-
Notifications
You must be signed in to change notification settings - Fork 0
/
distribution.go
59 lines (50 loc) · 1.38 KB
/
distribution.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package client
import (
"net/http"
"net/url"
ischema "github.com/atlaskerr/oci-schemas"
"github.com/xeipuuv/gojsonschema"
)
// NewDistributionAPI returns a fully initialized API for interacting with
// a remote registry.
func NewDistributionAPI(c *Client) *DistributionAPI {
api := &DistributionAPI{
client: c,
imageIndexSchema: ischema.ImageIndexSchema(),
imageManifestSchema: ischema.ImageManifestSchema(),
}
return api
}
// DistributionAPI contains methods for interacting with a remote registry.
type DistributionAPI struct {
client *Client
imageIndexSchema *gojsonschema.Schema
imageManifestSchema *gojsonschema.Schema
}
// NewRegistry returns a fully initialized Registry.
func (api *DistributionAPI) NewRegistry(host string, auth *Authenticator) *Registry {
hostURL, _ := url.Parse(host)
return &Registry{
client: api.client,
Host: hostURL,
Auth: *auth,
}
}
// Registry represents a remote OCI-compliant registries.
type Registry struct {
client *Client
Host *url.URL
Auth Authenticator
}
// RoundTrip is the Registry implementation of http.RoundTripper.
func (r *Registry) RoundTrip(req *http.Request) (resp *http.Response, err error) {
if r.Auth != nil {
r.Auth.Set(req)
}
return r.client.RoundTrip(req)
}
// Image represents an image located on a remote registry.
type Image struct {
Repository string
Reference string
}