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  }