github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/image/registry/token.go (about) 1 package registry 2 3 import ( 4 "context" 5 6 "github.com/google/go-containerregistry/pkg/authn" 7 8 "github.com/devseccon/trivy/pkg/fanal/image/registry/azure" 9 "github.com/devseccon/trivy/pkg/fanal/image/registry/ecr" 10 "github.com/devseccon/trivy/pkg/fanal/image/registry/google" 11 "github.com/devseccon/trivy/pkg/fanal/log" 12 "github.com/devseccon/trivy/pkg/fanal/types" 13 ) 14 15 var ( 16 registries []Registry 17 ) 18 19 func init() { 20 RegisterRegistry(&google.Registry{}) 21 RegisterRegistry(&ecr.ECR{}) 22 RegisterRegistry(&azure.Registry{}) 23 } 24 25 type Registry interface { 26 CheckOptions(domain string, option types.RegistryOptions) error 27 GetCredential(ctx context.Context) (string, string, error) 28 } 29 30 func RegisterRegistry(registry Registry) { 31 registries = append(registries, registry) 32 } 33 34 func GetToken(ctx context.Context, domain string, opt types.RegistryOptions) (auth authn.Basic) { 35 // check registry which particular to get credential 36 for _, registry := range registries { 37 err := registry.CheckOptions(domain, opt) 38 if err != nil { 39 continue 40 } 41 username, password, err := registry.GetCredential(ctx) 42 if err != nil { 43 // only skip check registry if error occurred 44 log.Logger.Debug(err) 45 break 46 } 47 return authn.Basic{ 48 Username: username, 49 Password: password, 50 } 51 } 52 return authn.Basic{} 53 }