return index on get magifest
This commit is contained in:
+41
-19
@@ -48,6 +48,7 @@ func (oper *Operator) ManifestExists(ctx context.Context, params *ManifestExists
|
||||
}
|
||||
|
||||
var manifest descr.Manifest
|
||||
manifests := make([]descr.Manifest, 0)
|
||||
var exists bool
|
||||
if stringLikeSHA256Digest(params.Reference) {
|
||||
digest := fmt.Sprintf("%s:%s", sha256prefix, params.Reference)
|
||||
@@ -59,13 +60,14 @@ func (oper *Operator) ManifestExists(ctx context.Context, params *ManifestExists
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
} else {
|
||||
exists, manifest, err = oper.mdb.GetManifestByReference(ctx, params.Name, params.Reference)
|
||||
exists, manifests, err = oper.mdb.GetManifestsByReference(ctx, params.Name, params.Reference)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
if !exists {
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
manifest = manifests[0] // TODO: tmp
|
||||
}
|
||||
|
||||
digest := auxoci.SHA256DigestFromString(manifest.Payload)
|
||||
@@ -169,14 +171,17 @@ func (oper *Operator) PutManifest(ctx context.Context, params *PutManifestParams
|
||||
incomingManifest.MediaType = params.ContentType
|
||||
}
|
||||
|
||||
manifestExists, existengManifestDescr, err := oper.mdb.GetManifestByReference(ctx, params.Name, params.Reference)
|
||||
name := params.Name
|
||||
reference := params.Reference
|
||||
arch := incomingManifest.Subject.Platform.Architecture
|
||||
os := incomingManifest.Subject.Platform.OS
|
||||
variant := incomingManifest.Subject.Platform.Variant
|
||||
|
||||
manifestExists, existengManifestDescr, err := oper.mdb.GetManifestsByReferenceArchitecture(ctx, name, reference, arch, os, variant)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
|
||||
name := params.Name
|
||||
reference := params.Reference
|
||||
|
||||
incomingManifestDescr, incomingLayerDescrs, err := descrsFromManifest(name, reference, incomingManifest, incomingManifestBytes)
|
||||
// Always check layer files for availability
|
||||
var blobError error
|
||||
@@ -297,23 +302,33 @@ func (oper *Operator) GetManifest(ctx context.Context, params *GetManifestParams
|
||||
if !exists {
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
|
||||
manifestDigest := auxoci.SHA256DigestFromString(manifestDescr.Payload)
|
||||
res.DockerContentDigest = manifestDigest.String()
|
||||
|
||||
res.ContentLength = strconv.FormatInt(int64(len(manifestDescr.Payload)), 10)
|
||||
res.ContentType = manifestDescr.ContentType
|
||||
res.Payload = manifestDescr.Payload
|
||||
|
||||
} else {
|
||||
exists, manifestDescr, err = oper.mdb.GetManifestByReference(ctx, params.Name, params.Reference)
|
||||
exists, manifestDescrs, err := oper.mdb.GetManifestsByReference(ctx, params.Name, params.Reference)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
if !exists {
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
index, indexBytes, err := indexFromManigestDescrs(manifestDescrs)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
indexDigest := auxoci.SHA256DigestFromString(indexBytes)
|
||||
res.DockerContentDigest = indexDigest.String()
|
||||
|
||||
res.ContentLength = strconv.FormatInt(int64(len(indexBytes)), 10)
|
||||
res.ContentType = index.MediaType
|
||||
res.Payload = string(indexBytes)
|
||||
}
|
||||
|
||||
manifestDigest := auxoci.SHA256DigestFromString(manifestDescr.Payload)
|
||||
res.DockerContentDigest = manifestDigest.String()
|
||||
|
||||
res.ContentLength = strconv.FormatInt(int64(len(manifestDescr.Payload)), 10)
|
||||
res.ContentType = manifestDescr.ContentType
|
||||
res.Payload = manifestDescr.Payload
|
||||
|
||||
return res, http.StatusOK, err
|
||||
}
|
||||
|
||||
@@ -352,9 +367,13 @@ func (oper *Operator) DeleteManifest(ctx context.Context, params *DeleteManifest
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
reference = manifestDescr.Reference
|
||||
err = oper.deleteManifestObjects(ctx, params.Name, reference)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
} else {
|
||||
// Check manifest by name and reference
|
||||
exists, manifestDescr, err = oper.mdb.GetManifestByReference(ctx, params.Name, params.Reference)
|
||||
exists, manifestDescrs, err := oper.mdb.GetManifestsByReference(ctx, params.Name, params.Reference)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
@@ -362,12 +381,15 @@ func (oper *Operator) DeleteManifest(ctx context.Context, params *DeleteManifest
|
||||
return res, http.StatusNotFound, err
|
||||
}
|
||||
reference = params.Reference
|
||||
for _, manifestDescr := range manifestDescrs {
|
||||
reference = manifestDescr.Reference
|
||||
err = oper.deleteManifestObjects(ctx, params.Name, reference)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
}
|
||||
}
|
||||
// Get blobs associated with the name
|
||||
err = oper.deleteManifestObjects(ctx, params.Name, reference)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
return res, http.StatusAccepted, err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user