1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package docker
- import (
- "encoding/base64"
- "fmt"
- "strings"
- log "github.com/Sirupsen/logrus"
- "github.com/docker/docker/registry"
- "github.com/docker/engine-api/types"
- "github.com/docker/libcompose/docker"
- "github.com/rancher/os/config"
- )
- // ConfigAuthLookup will lookup registry auth info from cloud config
- // if a context is set, it will also lookup auth info from the Docker config file
- type ConfigAuthLookup struct {
- cfg *config.CloudConfig
- context *docker.Context
- dockerConfigAuthLookup *docker.ConfigAuthLookup
- }
- func NewConfigAuthLookup(cfg *config.CloudConfig) *ConfigAuthLookup {
- return &ConfigAuthLookup{
- cfg: cfg,
- }
- }
- func populateRemaining(authConfig *types.AuthConfig) error {
- if authConfig.Auth == "" {
- return nil
- }
- decoded, err := base64.URLEncoding.DecodeString(authConfig.Auth)
- if err != nil {
- return err
- }
- decodedSplit := strings.Split(string(decoded), ":")
- if len(decodedSplit) != 2 {
- return fmt.Errorf("Invalid auth: %s", authConfig.Auth)
- }
- authConfig.Username = decodedSplit[0]
- authConfig.Password = decodedSplit[1]
- return nil
- }
- func (c *ConfigAuthLookup) SetConfig(cfg *config.CloudConfig) {
- c.cfg = cfg
- }
- func (c *ConfigAuthLookup) SetContext(context *docker.Context) {
- c.context = context
- c.dockerConfigAuthLookup = docker.NewConfigAuthLookup(context)
- }
- func (c *ConfigAuthLookup) Lookup(repoInfo *registry.RepositoryInfo) types.AuthConfig {
- if repoInfo == nil || repoInfo.Index == nil {
- return types.AuthConfig{}
- }
- authConfig := registry.ResolveAuthConfig(c.All(), repoInfo.Index)
- err := populateRemaining(&authConfig)
- if err != nil {
- log.Error(err)
- return types.AuthConfig{}
- }
- return authConfig
- }
- func (c *ConfigAuthLookup) All() map[string]types.AuthConfig {
- registryAuths := c.cfg.Rancher.RegistryAuths
- if c.dockerConfigAuthLookup != nil {
- for registry, authConfig := range c.dockerConfigAuthLookup.All() {
- registryAuths[registry] = authConfig
- }
- }
- return registryAuths
- }
|