@@ -16,12 +16,41 @@ import (
16
16
"github.com/pkg/errors"
17
17
)
18
18
19
- func ProviderFromRef (ref string ) (ocispecs.Descriptor , content.Provider , error ) {
19
+ type ResolveOpt struct {
20
+ Credentials func (string ) (string , string , error )
21
+ }
22
+
23
+ type ResolveOptFunc func (* ResolveOpt )
24
+
25
+ func WithCredentials (c func (string ) (string , string , error )) ResolveOptFunc {
26
+ return func (o * ResolveOpt ) {
27
+ o .Credentials = func (host string ) (string , string , error ) {
28
+ if host == "registry-1.docker.io" {
29
+ host = "https://index.docker.io/v1/"
30
+ }
31
+ return c (host )
32
+ }
33
+ }
34
+ }
35
+
36
+ func ProviderFromRef (ref string , opts ... ResolveOptFunc ) (ocispecs.Descriptor , content.Provider , error ) {
20
37
headers := http.Header {}
21
38
headers .Set ("User-Agent" , version .UserAgent ())
22
- remote := docker .NewResolver (docker.ResolverOptions {
39
+
40
+ var ro ResolveOpt
41
+ for _ , f := range opts {
42
+ f (& ro )
43
+ }
44
+
45
+ dro := docker.ResolverOptions {
23
46
Headers : headers ,
24
- })
47
+ }
48
+ if ro .Credentials != nil {
49
+ dro .Hosts = docker .ConfigureDefaultRegistries (
50
+ docker .WithAuthorizer (docker .NewDockerAuthorizer (docker .WithAuthCreds (ro .Credentials ))),
51
+ )
52
+ }
53
+ remote := docker .NewResolver (dro )
25
54
26
55
name , desc , err := remote .Resolve (context .TODO (), ref )
27
56
if err != nil {
0 commit comments