mirror of
https://github.com/project-zot/zot.git
synced 2026-06-16 04:17:55 +08:00
feat(api): added oci-subject header when pushing an image with subject field (#1415)
- as requested by the latest version of the oci distribution spec Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ const (
|
||||
Uploads = "uploads"
|
||||
DistAPIVersion = "Docker-Distribution-API-Version"
|
||||
DistContentDigestKey = "Docker-Content-Digest"
|
||||
SubjectDigestKey = "OCI-Subject"
|
||||
BlobUploadUUID = "Blob-Upload-UUID"
|
||||
DefaultMediaType = "application/json"
|
||||
BinaryMediaType = "application/octet-stream"
|
||||
|
||||
+5
-1
@@ -606,7 +606,7 @@ func (rh *RouteHandler) UpdateManifest(response http.ResponseWriter, request *ht
|
||||
return
|
||||
}
|
||||
|
||||
digest, err := imgStore.PutImageManifest(name, reference, mediaType, body)
|
||||
digest, subjectDigest, err := imgStore.PutImageManifest(name, reference, mediaType, body)
|
||||
if err != nil {
|
||||
if errors.Is(err, zerr.ErrRepoNotFound) { //nolint:gocritic // errorslint conflicts with gocritic:IfElseChain
|
||||
WriteJSON(response, http.StatusNotFound,
|
||||
@@ -656,6 +656,10 @@ func (rh *RouteHandler) UpdateManifest(response http.ResponseWriter, request *ht
|
||||
}
|
||||
}
|
||||
|
||||
if subjectDigest.String() != "" {
|
||||
response.Header().Set(constants.SubjectDigestKey, subjectDigest.String())
|
||||
}
|
||||
|
||||
response.Header().Set("Location", fmt.Sprintf("/v2/%s/manifests/%s", name, digest))
|
||||
response.Header().Set(constants.DistContentDigestKey, digest.String())
|
||||
response.WriteHeader(http.StatusCreated)
|
||||
|
||||
+20
-10
@@ -148,8 +148,10 @@ func TestRoutes(t *testing.T) {
|
||||
"reference": "reference",
|
||||
},
|
||||
&mocks.MockedImageStore{
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest, error) {
|
||||
return "", zerr.ErrRepoNotFound
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest,
|
||||
godigest.Digest, error,
|
||||
) {
|
||||
return "", "", zerr.ErrRepoNotFound
|
||||
},
|
||||
})
|
||||
So(statusCode, ShouldEqual, http.StatusNotFound)
|
||||
@@ -161,8 +163,10 @@ func TestRoutes(t *testing.T) {
|
||||
},
|
||||
|
||||
&mocks.MockedImageStore{
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest, error) {
|
||||
return "", zerr.ErrManifestNotFound
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest,
|
||||
godigest.Digest, error,
|
||||
) {
|
||||
return "", "", zerr.ErrManifestNotFound
|
||||
},
|
||||
})
|
||||
So(statusCode, ShouldEqual, http.StatusNotFound)
|
||||
@@ -173,8 +177,10 @@ func TestRoutes(t *testing.T) {
|
||||
"reference": "reference",
|
||||
},
|
||||
&mocks.MockedImageStore{
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest, error) {
|
||||
return "", zerr.ErrBadManifest
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest,
|
||||
godigest.Digest, error,
|
||||
) {
|
||||
return "", "", zerr.ErrBadManifest
|
||||
},
|
||||
})
|
||||
So(statusCode, ShouldEqual, http.StatusBadRequest)
|
||||
@@ -185,8 +191,10 @@ func TestRoutes(t *testing.T) {
|
||||
"reference": "reference",
|
||||
},
|
||||
&mocks.MockedImageStore{
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest, error) {
|
||||
return "", zerr.ErrBlobNotFound
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest,
|
||||
godigest.Digest, error,
|
||||
) {
|
||||
return "", "", zerr.ErrBlobNotFound
|
||||
},
|
||||
})
|
||||
So(statusCode, ShouldEqual, http.StatusBadRequest)
|
||||
@@ -198,8 +206,10 @@ func TestRoutes(t *testing.T) {
|
||||
"reference": "reference",
|
||||
},
|
||||
&mocks.MockedImageStore{
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest, error) {
|
||||
return "", zerr.ErrRepoBadVersion
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte) (godigest.Digest,
|
||||
godigest.Digest, error,
|
||||
) {
|
||||
return "", "", zerr.ErrRepoBadVersion
|
||||
},
|
||||
})
|
||||
So(statusCode, ShouldEqual, http.StatusInternalServerError)
|
||||
|
||||
Reference in New Issue
Block a user