working commit

This commit is contained in:
2026-03-06 16:26:04 +02:00
parent 48a2d95f14
commit ef9a3f6b20
11 changed files with 242 additions and 503 deletions
+21 -25
View File
@@ -5,9 +5,12 @@ import (
"context"
"errors"
"fmt"
"io"
"net/http"
"strconv"
"strings"
ocidigest "github.com/opencontainers/go-digest"
)
func (cli *Client) GetManifest(ctx context.Context, rawrepo, tag string) (bool, string, []byte, error) {
@@ -55,36 +58,29 @@ func (cli *Client) GetManifest(ctx context.Context, rawrepo, tag string) (bool,
err := fmt.Errorf("Empty MIME type declaration")
return exist, mime, man, err
}
buffer := bytes.NewBuffer(nil)
recSize, err := Copy(ctx, buffer, resp.Body)
if manSize != recSize {
err := fmt.Errorf("Mismatch declared and actual body size, %d and %d", manSize, recSize)
return exist, mime, man, err
}
man = buffer.Bytes()
csum := resp.Header.Get("Docker-Content-Digest")
if csum == "" {
digstr := resp.Header.Get("Docker-Content-Digest")
if digstr == "" {
err := fmt.Errorf("Empty digest declaration")
return exist, mime, man, err
}
csum = strings.ToLower(csum)
switch DigestType(csum) {
case SHA256:
if csum != SHA256Digest(man) {
err := fmt.Errorf("Mismatch digest and actual declaration")
return exist, mime, man, err
}
case SHA512:
if csum != SHA256Digest(man) {
err := fmt.Errorf("Mismatch digest and actual declaration")
return exist, mime, man, err
}
default:
err := fmt.Errorf("Unknown digest type: %s", csum)
digstr = strings.ToLower(digstr)
digobj, err := ocidigest.Parse(digstr)
if err != nil {
return exist, mime, man, err
}
verifier := digobj.Verifier()
buffer := bytes.NewBuffer(nil)
mwriter := io.MultiWriter(buffer, verifier)
recSize, err := Copy(ctx, mwriter, resp.Body)
if manSize != recSize {
err := fmt.Errorf("Mismatch declared and actual size")
return exist, mime, man, err
}
man = buffer.Bytes()
if !verifier.Verified() {
err := fmt.Errorf("Mismatch digest declaration and actual")
return exist, mime, man, err
}
exist = true
return exist, mime, man, err
}