Files
podman/pkg/api/server/register_manifest.go
Vladimir Kochnev e6ebfbd1e0 Set TLSVerify=true by default for API endpoints
Option defaults in API must be the same as in CLI.

```
% podman image push --help
% podman image pull --help
% podman manifest push --help
% podman image search --help
```

All of these CLI commands them have --tls-verify=true by default:
```
--tls-verify  require HTTPS and verify certificates when accessing the registry (default true)
```

As for `podman image build`, it doesn't have any means to control
`tlsVerify` parameter but it must be true by default.

Signed-off-by: Vladimir Kochnev <hashtable@yandex.ru>
2022-07-26 14:44:05 -04:00

307 lines
9.1 KiB
Go

package server
import (
"net/http"
"github.com/containers/podman/v4/pkg/api/handlers/libpod"
"github.com/gorilla/mux"
)
func (s *APIServer) registerManifestHandlers(r *mux.Router) error {
v3 := r.PathPrefix("/v{version:[0-3][0-9A-Za-z.-]*}/libpod/manifests").Subrouter()
v4 := r.PathPrefix("/v{version:[4-9][0-9A-Za-z.-]*}/libpod/manifests").Subrouter()
// swagger:operation POST /libpod/manifests/{name}/push manifests ManifestPushV3Libpod
// ---
// summary: Push manifest to registry
// description: |
// Push a manifest list or image index to a registry
//
// Deprecated: As of 4.0.0 use ManifestPushLibpod instead
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the name or ID of the manifest
// - in: query
// name: destination
// type: string
// required: true
// description: the destination for the manifest
// - in: query
// name: all
// description: push all images
// type: boolean
// responses:
// 200:
// schema:
// $ref: "#/definitions/IDResponse"
// 400:
// $ref: "#/responses/badParamError"
// 404:
// $ref: "#/responses/manifestNotFound"
// 500:
// $ref: "#/responses/internalError"
v3.Handle("/{name}/push", s.APIHandler(libpod.ManifestPushV3)).Methods(http.MethodPost)
// swagger:operation POST /libpod/manifests/{name}/registry/{destination} manifests ManifestPushLibpod
// ---
// summary: Push manifest list to registry
// description: |
// Push a manifest list or image index to the named registry
//
// As of v4.0.0
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the name or ID of the manifest list
// - in: path
// name: destination
// type: string
// required: true
// description: the registry for the manifest list
// - in: query
// name: all
// description: push all images
// type: boolean
// default: true
// - in: query
// name: tlsVerify
// type: boolean
// default: true
// description: Require HTTPS and verify signatures when contacting registries.
// responses:
// 200:
// schema:
// $ref: "#/definitions/IDResponse"
// 400:
// $ref: "#/responses/badParamError"
// 404:
// $ref: "#/responses/manifestNotFound"
// 500:
// $ref: "#/responses/internalError"
v4.Handle("/{name:.*}/registry/{destination:.*}", s.APIHandler(libpod.ManifestPush)).Methods(http.MethodPost)
// swagger:operation POST /libpod/manifests manifests ManifestCreateLibpod
// ---
// summary: Create
// description: Create a manifest list
// produces:
// - application/json
// parameters:
// - in: query
// name: name
// type: string
// description: manifest list or index name to create
// required: true
// - in: query
// name: images
// type: string
// required: true
// description: |
// One or more names of an image or a manifest list. Repeat parameter as needed.
//
// Support for multiple images, as of version 4.0.0
// Alias of `image` is support for compatibility with < 4.0.0
// Response status code is 200 with < 4.0.0 for compatibility
// - in: query
// name: all
// type: boolean
// description: add all contents if given list
// - in: body
// name: options
// description: options for new manifest
// required: false
// schema:
// $ref: "#/definitions/ManifestModifyOptions"
// responses:
// 201:
// schema:
// $ref: "#/definitions/IDResponse"
// 400:
// $ref: "#/responses/badParamError"
// 404:
// $ref: "#/responses/imageNotFound"
// 500:
// $ref: "#/responses/internalError"
v3.Handle("/create", s.APIHandler(libpod.ManifestCreate)).Methods(http.MethodPost)
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestCreate)).Methods(http.MethodPost)
// swagger:operation GET /libpod/manifests/{name}/exists manifests ManifestExistsLibpod
// ---
// summary: Exists
// description: |
// Check if manifest list exists
//
// Note: There is no contract that the manifest list will exist for a follow-on operation
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the name or ID of the manifest list
// produces:
// - application/json
// responses:
// 204:
// description: manifest list exists
// 404:
// $ref: '#/responses/manifestNotFound'
// 500:
// $ref: '#/responses/internalError'
v3.Handle("/{name:.*}/exists", s.APIHandler(libpod.ManifestExists)).Methods(http.MethodGet)
v4.Handle("/{name:.*}/exists", s.APIHandler(libpod.ManifestExists)).Methods(http.MethodGet)
// swagger:operation GET /libpod/manifests/{name}/json manifests ManifestInspectLibpod
// ---
// summary: Inspect
// description: Display attributes of given manifest list
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the name or ID of the manifest list
// responses:
// 200:
// $ref: "#/responses/manifestInspect"
// 404:
// $ref: "#/responses/manifestNotFound"
// 500:
// $ref: "#/responses/internalError"
v3.Handle("/{name:.*}/json", s.APIHandler(libpod.ManifestInspect)).Methods(http.MethodGet)
v4.Handle("/{name:.*}/json", s.APIHandler(libpod.ManifestInspect)).Methods(http.MethodGet)
// swagger:operation PUT /libpod/manifests/{name} manifests ManifestModifyLibpod
// ---
// summary: Modify manifest list
// description: |
// Add/Remove an image(s) to a manifest list
//
// Note: operations are not atomic when multiple Images are provided.
//
// As of v4.0.0
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the name or ID of the manifest
// - in: query
// name: tlsVerify
// type: boolean
// default: true
// description: Require HTTPS and verify signatures when contacting registries.
// - in: body
// name: options
// description: options for mutating a manifest
// required: true
// schema:
// $ref: "#/definitions/ManifestModifyOptions"
// responses:
// 200:
// schema:
// $ref: "#/definitions/ManifestModifyReport"
// 404:
// $ref: "#/responses/manifestNotFound"
// 400:
// $ref: "#/responses/badParamError"
// 409:
// description: Operation had partial success, both Images and Errors may have members
// schema:
// $ref: "#/definitions/ManifestModifyReport"
// 500:
// $ref: "#/responses/internalError"
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestModify)).Methods(http.MethodPut)
// swagger:operation POST /libpod/manifests/{name}/add manifests ManifestAddLibpod
// ---
// summary: Add image
// description: |
// Add an image to a manifest list
//
// Deprecated: As of 4.0.0 use ManifestModifyLibpod instead
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the name or ID of the manifest
// - in: body
// name: options
// description: options for creating a manifest
// schema:
// $ref: "#/definitions/ManifestAddOptions"
// responses:
// 200:
// schema:
// $ref: "#/definitions/IDResponse"
// 404:
// $ref: "#/responses/manifestNotFound"
// 409:
// $ref: "#/responses/badParamError"
// 500:
// $ref: "#/responses/internalError"
v3.Handle("/{name:.*}/add", s.APIHandler(libpod.ManifestAddV3)).Methods(http.MethodPost)
// swagger:operation DELETE /libpod/manifests/{name} manifests ManifestDeleteV3Libpod
// ---
// summary: Remove image from a manifest list
// description: |
// Remove an image from a manifest list
//
// Deprecated: As of 4.0.0 use ManifestModifyLibpod instead
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: the image associated with the manifest
// - in: query
// name: digest
// type: string
// description: image digest to be removed
// responses:
// 200:
// schema:
// $ref: "#/definitions/IDResponse"
// 400:
// $ref: "#/responses/badParamError"
// 404:
// $ref: "#/responses/manifestNotFound"
// 500:
// $ref: "#/responses/internalError"
v3.Handle("/{name:.*}", s.APIHandler(libpod.ManifestRemoveDigestV3)).Methods(http.MethodDelete)
// swagger:operation DELETE /libpod/manifests/{name} manifests ManifestDeleteLibpod
// ---
// summary: Delete manifest list
// description: |
// Delete named manifest list
//
// As of v4.0.0
// produces:
// - application/json
// parameters:
// - in: path
// name: name
// type: string
// required: true
// description: The name or ID of the list to be deleted
// responses:
// 200:
// $ref: "#/responses/imagesRemoveResponseLibpod"
// 404:
// $ref: "#/responses/manifestNotFound"
// 500:
// $ref: "#/responses/internalError"
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestDelete)).Methods(http.MethodDelete)
return nil
}