(v string)
| 351 | } |
| 352 | |
| 353 | func parseEnvConfig(v string) (map[string]types.AuthConfig, error) { |
| 354 | envConfig := &configEnv{} |
| 355 | decoder := json.NewDecoder(strings.NewReader(v)) |
| 356 | decoder.DisallowUnknownFields() |
| 357 | if err := decoder.Decode(envConfig); err != nil && !errors.Is(err, io.EOF) { |
| 358 | return nil, err |
| 359 | } |
| 360 | if decoder.More() { |
| 361 | return nil, errors.New("DOCKER_AUTH_CONFIG does not support more than one JSON object") |
| 362 | } |
| 363 | |
| 364 | authConfigs := make(map[string]types.AuthConfig) |
| 365 | for addr, envAuth := range envConfig.AuthConfigs { |
| 366 | if envAuth.Auth == "" { |
| 367 | return nil, fmt.Errorf("DOCKER_AUTH_CONFIG environment variable is missing key `auth` for %s", addr) |
| 368 | } |
| 369 | username, password, err := decodeAuth(envAuth.Auth) |
| 370 | if err != nil { |
| 371 | return nil, err |
| 372 | } |
| 373 | authConfigs[addr] = types.AuthConfig{ |
| 374 | Username: username, |
| 375 | Password: password, |
| 376 | ServerAddress: addr, |
| 377 | } |
| 378 | } |
| 379 | return authConfigs, nil |
| 380 | } |
| 381 | |
| 382 | // var for unit testing. |
| 383 | var newNativeStore = func(configFile *ConfigFile, helperSuffix string) credentials.Store { |
searching dependent graphs…