mirror of
https://github.com/containers/podman.git
synced 2025-12-05 04:40:47 +08:00
57 lines
2.0 KiB
Go
57 lines
2.0 KiB
Go
package imagesource
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/containers/image/v5/internal/imagesource/stubs"
|
|
"github.com/containers/image/v5/internal/private"
|
|
"github.com/containers/image/v5/internal/signature"
|
|
"github.com/containers/image/v5/types"
|
|
"github.com/opencontainers/go-digest"
|
|
)
|
|
|
|
// wrapped provides the private.ImageSource operations
|
|
// for a source that only implements types.ImageSource
|
|
type wrapped struct {
|
|
stubs.NoGetBlobAtInitialize
|
|
|
|
types.ImageSource
|
|
}
|
|
|
|
// FromPublic(src) returns an object that provides the private.ImageSource API
|
|
//
|
|
// Eventually, we might want to expose this function, and methods of the returned object,
|
|
// as a public API (or rather, a variant that does not include the already-superseded
|
|
// methods of types.ImageSource, and has added more future-proofing), and more strongly
|
|
// deprecate direct use of types.ImageSource.
|
|
//
|
|
// NOTE: The returned API MUST NOT be a public interface (it can be either just a struct
|
|
// with public methods, or perhaps a private interface), so that we can add methods
|
|
// without breaking any external implementers of a public interface.
|
|
func FromPublic(src types.ImageSource) private.ImageSource {
|
|
if src2, ok := src.(private.ImageSource); ok {
|
|
return src2
|
|
}
|
|
return &wrapped{
|
|
NoGetBlobAtInitialize: stubs.NoGetBlobAt(src.Reference()),
|
|
|
|
ImageSource: src,
|
|
}
|
|
}
|
|
|
|
// GetSignaturesWithFormat returns the image's signatures. It may use a remote (= slow) service.
|
|
// If instanceDigest is not nil, it contains a digest of the specific manifest instance to retrieve signatures for
|
|
// (when the primary manifest is a manifest list); this never happens if the primary manifest is not a manifest list
|
|
// (e.g. if the source never returns manifest lists).
|
|
func (w *wrapped) GetSignaturesWithFormat(ctx context.Context, instanceDigest *digest.Digest) ([]signature.Signature, error) {
|
|
sigs, err := w.GetSignatures(ctx, instanceDigest)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res := []signature.Signature{}
|
|
for _, sig := range sigs {
|
|
res = append(res, signature.SimpleSigningFromBlob(sig))
|
|
}
|
|
return res, nil
|
|
}
|