Documentation ¶
Index ¶
- func RegisterAuthDriver(name string, factory func() AuthDriver)
- type AuthChallenge
- type AuthDriver
- type DownloadManifestOpts
- type RepoClient
- func (c *RepoClient) DownloadBlob(ctx context.Context, blobDigest digest.Digest) (contents io.ReadCloser, sizeBytes uint64, returnErr error)
- func (c *RepoClient) DownloadManifest(ctx context.Context, reference models.ManifestReference, ...) (contents []byte, mediaType string, returnErr error)
- func (c *RepoClient) SetToken(token string)
- func (c *RepoClient) UploadManifest(ctx context.Context, contents []byte, mediaType, tagName string) (digest.Digest, error)
- func (c *RepoClient) UploadMonolithicBlob(ctx context.Context, contents []byte) (digest.Digest, error)
- func (c *RepoClient) ValidateBlobContents(ctx context.Context, blobDigest digest.Digest, session *ValidationSession) error
- func (c *RepoClient) ValidateManifest(ctx context.Context, reference models.ManifestReference, ...) error
- type ValidationLogger
- type ValidationSession
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterAuthDriver ¶
func RegisterAuthDriver(name string, factory func() AuthDriver)
RegisterAuthDriver registers an AuthDriver. Call this from func init() of the package defining the AuthDriver.
Types ¶
type AuthChallenge ¶
AuthChallenge contains the parsed contents of a Www-Authenticate header returned by a registry.
func ParseAuthChallenge ¶
func ParseAuthChallenge(hdr http.Header) (AuthChallenge, error)
ParseAuthChallenge parses the auth challenge from the response headers of an unauthenticated request to a registry API.
type AuthDriver ¶
type AuthDriver interface { // MatchesEnvironment checks the process's environment variables to see if // they contain credentials for this authentication method. This is how we // decide which AuthDriver to use. MatchesEnvironment() bool // Connect sets up a connection to a Keppel server, using the credentials from // the process's environment variables. Connect(context.Context) error // CurrentAuthTenantID returns the ID of the auth tenant where the client is // authenticated. CurrentAuthTenantID() string // ServerHost returns the server's hostname. May be of the form "host:port". // May panic when called before Connect(). ServerHost() string // ServerScheme returns "http" or "https" to indicate whether the server // exposes an encrypted or unencrypted API. ServerScheme() string // SendHTTPRequest sends a HTTP request to the Keppel API. The implementation // will fill in the correct server hostname and add any required auth headers. // May panic when called before Connect(). SendHTTPRequest(req *http.Request) (*http.Response, error) // CredentialsForRegistryAPI returns a pair of username and password that can // be used on the Registry API of the same Keppel instance to obtain // equivalent access. CredentialsForRegistryAPI() (userName, password string) }
AuthDriver is the client-side counterpart of keppel.AuthDriver. It implements support for talking to the Keppel API using the corresponding server-side authentication driver.
func NewAuthDriver ¶
func NewAuthDriver(ctx context.Context) (AuthDriver, error)
NewAuthDriver selects the correct AuthDriver and executes its Connect() method.
type DownloadManifestOpts ¶
DownloadManifestOpts appears in func DownloadManifest.
type RepoClient ¶
type RepoClient struct { Scheme string // either "http" or "https" Host string // either a plain hostname or a host:port like "example.org:443" RepoName string // credentials (only needed for non-public repos) UserName string Password string // contains filtered or unexported fields }
RepoClient contains methods for interacting with a repository on a registry server.
func (*RepoClient) DownloadBlob ¶
func (c *RepoClient) DownloadBlob(ctx context.Context, blobDigest digest.Digest) (contents io.ReadCloser, sizeBytes uint64, returnErr error)
DownloadBlob fetches a blob's contents from this repository. If an error is returned, it's usually a *keppel.RegistryV2Error.
func (*RepoClient) DownloadManifest ¶
func (c *RepoClient) DownloadManifest(ctx context.Context, reference models.ManifestReference, opts *DownloadManifestOpts) (contents []byte, mediaType string, returnErr error)
DownloadManifest fetches a manifest from this repository. If an error is returned, it's usually a *keppel.RegistryV2Error.
func (*RepoClient) SetToken ¶
func (c *RepoClient) SetToken(token string)
SetToken can be used in tests to inject a pre-computed token and bypass the username/password requirement.
func (*RepoClient) UploadManifest ¶
func (c *RepoClient) UploadManifest(ctx context.Context, contents []byte, mediaType, tagName string) (digest.Digest, error)
UploadManifest uploads a manifest. If `tagName` is not empty, this tag name is used, otherwise the manifest is uploaded to its canonical digest. On success, the manifest's digest is returned.
func (*RepoClient) UploadMonolithicBlob ¶
func (c *RepoClient) UploadMonolithicBlob(ctx context.Context, contents []byte) (digest.Digest, error)
UploadMonolithicBlob performs a monolithic blob upload. On success, the blob's digest is returned.
func (*RepoClient) ValidateBlobContents ¶
func (c *RepoClient) ValidateBlobContents(ctx context.Context, blobDigest digest.Digest, session *ValidationSession) error
ValidateBlobContents fetches the given blob from the repo and verifies that the contents produce the correct digest.
func (*RepoClient) ValidateManifest ¶
func (c *RepoClient) ValidateManifest(ctx context.Context, reference models.ManifestReference, session *ValidationSession, platformFilter models.PlatformFilter) error
ValidateManifest fetches the given manifest from the repo and verifies that it parses correctly. It also validates all references manifests and blobs recursively.
type ValidationLogger ¶
type ValidationLogger interface { LogManifest(reference models.ManifestReference, level int, validationResult error, resultFromCache bool) LogBlob(d digest.Digest, level int, validationResult error, resultFromCache bool) }
ValidationLogger can be passed to ValidateManifest, primarily to allow the caller to log the progress of the validation operation.
type ValidationSession ¶
type ValidationSession struct { Logger ValidationLogger // contains filtered or unexported fields }
ValidationSession holds state and caches intermediate results over the course of several ValidateManifest() and ValidateBlobContents() calls. The cache optimizes the validation of submanifests and blobs that are referenced multiple times. The session instance should only be used for as long as the caller wishes to cache validation results.