in graph/registry_credential.go [57:125]
func CreateRegistryCredentialFromString(str string) (*RegistryCredential, error) {
var cred RegistryCredential
if err := json.Unmarshal([]byte(str), &cred); err != nil {
return nil, errors.Wrap(err, "unable to unmarshal Credentials from string")
}
usernameType := strings.ToLower(cred.UsernameType)
passwordType := strings.ToLower(cred.PasswordType)
if cred.Registry == "" {
return nil, errInvalidRegName
}
var retVal *RegistryCredential
isOpaque := usernameType == Opaque && passwordType == Opaque
hasVaultSecret := usernameType == VaultSecret || passwordType == VaultSecret
isMSI := usernameType == "" && passwordType == ""
if isOpaque {
if cred.Username == "" {
return nil, errInvalidUsername
}
if cred.Password == "" {
return nil, errInvalidPassword
}
retVal = &RegistryCredential{
Registry: cred.Registry,
Username: cred.Username,
UsernameType: usernameType,
Password: cred.Password,
PasswordType: passwordType,
}
} else if hasVaultSecret {
if cred.Username == "" {
return nil, errInvalidUsername
}
if cred.Password == "" {
return nil, errInvalidPassword
}
if cred.Identity == "" {
return nil, errInvalidIdentity
}
retVal = &RegistryCredential{
Registry: cred.Registry,
Username: cred.Username,
UsernameType: usernameType,
Password: cred.Password,
PasswordType: passwordType,
Identity: cred.Identity,
}
} else if isMSI {
if cred.Identity == "" {
return nil, errInvalidIdentity
}
if cred.AadResourceID == "" {
return nil, errInvalidAadResourceID
}
retVal = &RegistryCredential{
Registry: cred.Registry,
Identity: cred.Identity,
AadResourceID: cred.AadResourceID,
}
} else {
return nil, errCouldNotClassify
}
return retVal, nil
}