diff options
Diffstat (limited to 'routers/api/packages')
-rw-r--r-- | routers/api/packages/api.go | 2 | ||||
-rw-r--r-- | routers/api/packages/container/container.go | 4 | ||||
-rw-r--r-- | routers/api/packages/container/manifest.go | 24 |
3 files changed, 11 insertions, 19 deletions
diff --git a/routers/api/packages/api.go b/routers/api/packages/api.go index 41e89ae567..df5897e45e 100644 --- a/routers/api/packages/api.go +++ b/routers/api/packages/api.go @@ -693,6 +693,8 @@ func ContainerRoutes() *web.Router { &container.Auth{}, }) + // TODO: Content Discovery / References (not implemented yet) + r.Get("", container.ReqContainerAccess, container.DetermineSupport) r.Group("/token", func() { r.Get("", container.Authenticate) diff --git a/routers/api/packages/container/container.go b/routers/api/packages/container/container.go index 972506103a..d1b80daccf 100644 --- a/routers/api/packages/container/container.go +++ b/routers/api/packages/container/container.go @@ -320,6 +320,7 @@ func PostBlobsUploads(ctx *context.Context) { // https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pushing-a-blob-in-chunks func GetBlobsUpload(ctx *context.Context) { + image := ctx.PathParam("image") uuid := ctx.PathParam("uuid") upload, err := packages_model.GetBlobUploadByID(ctx, uuid) @@ -334,6 +335,7 @@ func GetBlobsUpload(ctx *context.Context) { // FIXME: undefined behavior when the uploaded content is empty: https://github.com/opencontainers/distribution-spec/issues/578 respHeaders := &containerHeaders{ + Location: fmt.Sprintf("/v2/%s/%s/blobs/uploads/%s", ctx.Package.Owner.LowerName, image, upload.ID), UploadUUID: upload.ID, Status: http.StatusNoContent, } @@ -386,7 +388,7 @@ func PatchBlobsUpload(ctx *context.Context) { UploadUUID: uploader.ID, Status: http.StatusAccepted, } - if contentRange != "" { + if uploader.Size() > 0 { respHeaders.Range = fmt.Sprintf("0-%d", uploader.Size()-1) } setResponseHeaders(ctx.Resp, respHeaders) diff --git a/routers/api/packages/container/manifest.go b/routers/api/packages/container/manifest.go index a640bcda25..b69b7af3f7 100644 --- a/routers/api/packages/container/manifest.go +++ b/routers/api/packages/container/manifest.go @@ -29,18 +29,6 @@ import ( oci "github.com/opencontainers/image-spec/specs-go/v1" ) -func isMediaTypeValid(mt string) bool { - return strings.HasPrefix(mt, "application/vnd.docker.") || strings.HasPrefix(mt, "application/vnd.oci.") -} - -func isMediaTypeImageManifest(mt string) bool { - return strings.EqualFold(mt, oci.MediaTypeImageManifest) || strings.EqualFold(mt, "application/vnd.docker.distribution.manifest.v2+json") -} - -func isMediaTypeImageIndex(mt string) bool { - return strings.EqualFold(mt, oci.MediaTypeImageIndex) || strings.EqualFold(mt, "application/vnd.docker.distribution.manifest.list.v2+json") -} - // manifestCreationInfo describes a manifest to create type manifestCreationInfo struct { MediaType string @@ -66,16 +54,16 @@ func processManifest(ctx context.Context, mci *manifestCreationInfo, buf *packag return "", err } - if !isMediaTypeValid(mci.MediaType) { + if !container_module.IsMediaTypeValid(mci.MediaType) { mci.MediaType = index.MediaType - if !isMediaTypeValid(mci.MediaType) { + if !container_module.IsMediaTypeValid(mci.MediaType) { return "", errManifestInvalid.WithMessage("MediaType not recognized") } } - if isMediaTypeImageManifest(mci.MediaType) { + if container_module.IsMediaTypeImageManifest(mci.MediaType) { return processOciImageManifest(ctx, mci, buf) - } else if isMediaTypeImageIndex(mci.MediaType) { + } else if container_module.IsMediaTypeImageIndex(mci.MediaType) { return processOciImageIndex(ctx, mci, buf) } return "", errManifestInvalid @@ -201,7 +189,7 @@ func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *p } for _, manifest := range index.Manifests { - if !isMediaTypeImageManifest(manifest.MediaType) { + if !container_module.IsMediaTypeImageManifest(manifest.MediaType) { return errManifestInvalid } @@ -336,7 +324,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met return nil, err } - if isMediaTypeImageIndex(mci.MediaType) { + if container_module.IsMediaTypeImageIndex(mci.MediaType) { if pv.CreatedUnix.AsTime().Before(time.Now().Add(-24 * time.Hour)) { if err = packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil { return nil, err |