From bebbf79c7acd6a48f9b6021f9270548cc665ab8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 13 Mar 2026 15:34:53 +0200 Subject: [PATCH] app/imageoper: index only for OCI manifests --- app/imageoper/const.go | 19 +++++++++++++++++++ app/imageoper/ociaux.go | 9 ++++----- app/imageoper/putman.go | 10 +--------- 3 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 app/imageoper/const.go diff --git a/app/imageoper/const.go b/app/imageoper/const.go new file mode 100644 index 0000000..823c820 --- /dev/null +++ b/app/imageoper/const.go @@ -0,0 +1,19 @@ +/* + * Copyright 2026 Oleg Borodin + * + * This work is published and licensed under a Creative Commons + * Attribution-NonCommercial-NoDerivatives 4.0 International License. + * + * Distribution of this work is permitted, but commercial use and + * modifications are strictly prohibited. + */ +package imageoper + +const ( + ddmMediaType = "application/vnd.docker.distribution.manifest.v2+json" + oimMediaType = "application/vnd.oci.image.manifest.v1+json" + oiiMediaType = "application/vnd.oci.image.index.v1+json" + + XXXoicMediaType = "application/vnd.oci.image.config.v1+json" + XXXdciMediaType = "application/vnd.docker.container.image.v1+json" +) diff --git a/app/imageoper/ociaux.go b/app/imageoper/ociaux.go index 64dd44b..c2081ca 100644 --- a/app/imageoper/ociaux.go +++ b/app/imageoper/ociaux.go @@ -21,11 +21,6 @@ import ( ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) -const ( - oiiMediaType = "application/vnd.oci.image.index.v1+json" - oimMediaType = "application/vnd.oci.image.manifest.v1+json" -) - func indexFromManigestDescrs(mandescrs []descr.Manifest) (ocispec.Index, []byte, error) { var err error var indexdata []byte @@ -37,6 +32,10 @@ func indexFromManigestDescrs(mandescrs []descr.Manifest) (ocispec.Index, []byte, for _, mandescr := range mandescrs { var man ocispec.Manifest + if mandescr.ContentType != oimMediaType && mandescr.ContentType != ddmMediaType { + continue + } + man.Subject = &ocispec.Descriptor{} man.Subject.Platform = &ocispec.Platform{} man.Config = ocispec.Descriptor{} diff --git a/app/imageoper/putman.go b/app/imageoper/putman.go index 2b3e792..4f7b213 100644 --- a/app/imageoper/putman.go +++ b/app/imageoper/putman.go @@ -33,14 +33,6 @@ type PutManifestResult struct { Location string } -const ( - ddmMimeType = "application/vnd.docker.distribution.manifest.v2+json" - oimMimeType = "application/vnd.oci.image.manifest.v1+json" - - XXXoicMimeType = "application/vnd.oci.image.config.v1+json" - XXXdciMimeType = "application/vnd.docker.container.image.v1+json" -) - // TODO: lock for the name-reference or simular? func (oper *Operator) PutManifest(ctx context.Context, params *PutManifestParams) (*PutManifestResult, int, error) { var err error @@ -55,7 +47,7 @@ func (oper *Operator) PutManifest(ctx context.Context, params *PutManifestParams return res, http.StatusBadRequest, err } // Check Content-Type - if params.ContentType != oimMimeType && params.ContentType != ddmMimeType { + if params.ContentType != oimMediaType && params.ContentType != ddmMediaType { err = fmt.Errorf("Unknown or empty Content-Type: %s", params.ContentType) return res, http.StatusNotFound, err }