github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/cnbutils/auth.go (about) 1 package cnbutils 2 3 import ( 4 "encoding/base64" 5 "encoding/json" 6 "fmt" 7 8 "github.com/SAP/jenkins-library/pkg/log" 9 "github.com/docker/cli/cli/config/configfile" 10 ) 11 12 func GenerateCnbAuth(config string, utils BuildUtils) (string, error) { 13 var err error 14 dockerConfig := &configfile.ConfigFile{} 15 16 if config != "" { 17 log.Entry().Debugf("using docker config file %q", config) 18 dockerConfigJSON, err := utils.FileRead(config) 19 if err != nil { 20 return "", err 21 } 22 23 err = json.Unmarshal(dockerConfigJSON, dockerConfig) 24 if err != nil { 25 return "", err 26 } 27 } 28 29 auth := map[string]string{} 30 for registry, value := range dockerConfig.AuthConfigs { 31 if value.Auth == "" && value.Username == "" && value.Password == "" { 32 log.Entry().Warnf("docker config.json contains empty credentials for registry %q. Either 'auth' or 'username' and 'password' have to be provided.", registry) 33 continue 34 } 35 36 if value.Auth == "" { 37 value.Auth = encodeAuth(value.Username, value.Password) 38 } 39 40 log.Entry().Debugf("Adding credentials for: registry %q", registry) 41 auth[registry] = fmt.Sprintf("Basic %s", value.Auth) 42 } 43 44 if len(auth) == 0 { 45 log.Entry().Warn("docker config file is empty!") 46 } 47 48 cnbRegistryAuth, err := json.Marshal(auth) 49 if err != nil { 50 return "", err 51 } 52 53 return string(cnbRegistryAuth), nil 54 } 55 56 func encodeAuth(username, password string) string { 57 auth := username + ":" + password 58 return base64.StdEncoding.EncodeToString([]byte(auth)) 59 }