working commit
This commit is contained in:
+22
-35
@@ -15,8 +15,9 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"mstore/pkg/auxoci"
|
||||
"mstore/pkg/descr"
|
||||
|
||||
ocidigest "github.com/opencontainers/go-digest"
|
||||
)
|
||||
|
||||
type GetManifestParams struct {
|
||||
@@ -47,56 +48,42 @@ func (oper *Operator) GetManifest(ctx context.Context, params *GetManifestParams
|
||||
oper.iLock.WaitAndLock(resName)
|
||||
defer oper.iLock.Done(resName)
|
||||
|
||||
manifestDescr := descr.Manifest{}
|
||||
manDescr := descr.Manifest{}
|
||||
var exists bool
|
||||
// TODO: checking layers?
|
||||
if stringLikeSHADigest(params.Reference) {
|
||||
digest := normalizeSHADigest(params.Reference)
|
||||
exists, manifestDescr, err = oper.mdb.GetManifestByDigest(ctx, params.Name, digest)
|
||||
digobj, err := ocidigest.Parse(params.Reference)
|
||||
if err == nil {
|
||||
exists, manDescr, err = oper.mdb.GetManifestByDigest(ctx, params.Name, digobj.String())
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
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
|
||||
res.DockerContentDigest = manDescr.Digest
|
||||
size := int64(len(manDescr.Payload))
|
||||
res.ContentLength = strconv.FormatInt(size, 10)
|
||||
res.ContentType = manDescr.ContentType
|
||||
res.Payload = manDescr.Payload
|
||||
|
||||
} else {
|
||||
// Create index of manifests
|
||||
exists, manifestDescrs, err := oper.mdb.GetManifestsByReference(ctx, params.Name, params.Reference)
|
||||
exists, manDescrs, 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)
|
||||
*/
|
||||
manifestDescr = manifestDescrs[0]
|
||||
|
||||
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
|
||||
|
||||
_, indexdata, err := indexFromManigestDescrs(manDescrs)
|
||||
if err != nil {
|
||||
return res, http.StatusInternalServerError, err
|
||||
}
|
||||
digobj := ocidigest.SHA256.FromBytes(indexdata)
|
||||
res.DockerContentDigest = digobj.String()
|
||||
size := int64(len(indexdata))
|
||||
res.ContentLength = strconv.FormatInt(size, 10)
|
||||
res.ContentType = oiiMediaType
|
||||
res.Payload = string(indexdata)
|
||||
}
|
||||
return res, http.StatusOK, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user