Files
trivy/extractor/docker/token.go
2019-05-09 11:06:20 +09:00

45 lines
1.0 KiB
Go

package docker
import (
"context"
"github.com/docker/docker/api/types"
"github.com/genuinetools/reg/repoutils"
)
var (
registries []Registry
)
type Registry interface {
CheckOptions(domain string, option DockerOption) error
GetCredential(ctx context.Context) (string, string, error)
}
func RegisterRegistry(registry Registry) {
registries = append(registries, registry)
}
func GetToken(ctx context.Context, domain string, opt DockerOption) (auth types.AuthConfig, err error) {
authDomain := opt.AuthURL
if authDomain == "" {
authDomain = domain
}
auth.ServerAddress = authDomain
// check registry which particular to get credential
for _, registry := range registries {
err := registry.CheckOptions(authDomain, opt)
if err != nil {
continue
}
auth.Username, auth.Password, err = registry.GetCredential(ctx)
if err != nil {
// only skip check registry if error occured
break
} else {
return auth, nil
}
}
return repoutils.GetAuthConfig(opt.UserName, opt.Password, authDomain)
}