in ecr-login/api/client.go [209:258]
func (c *defaultClient) getAuthorizationToken(registryID string) (*Auth, error) {
var input *ecr.GetAuthorizationTokenInput
if registryID == "" {
logrus.Debug("Calling ECR.GetAuthorizationToken for default registry")
input = &ecr.GetAuthorizationTokenInput{}
} else {
logrus.WithField("registry", registryID).Debug("Calling ECR.GetAuthorizationToken")
input = &ecr.GetAuthorizationTokenInput{
RegistryIds: []string{registryID},
}
}
output, err := c.ecrClient.GetAuthorizationToken(context.TODO(), input)
if err != nil || output == nil {
if err == nil {
if registryID == "" {
err = fmt.Errorf("missing AuthorizationData in ECR response for default registry")
} else {
err = fmt.Errorf("missing AuthorizationData in ECR response for %s", registryID)
}
}
return nil, errors.Wrap(err, "ecr: Failed to get authorization token")
}
for _, authData := range output.AuthorizationData {
if authData.ProxyEndpoint != nil && authData.AuthorizationToken != nil {
authEntry := cache.AuthEntry{
AuthorizationToken: aws.ToString(authData.AuthorizationToken),
RequestedAt: time.Now(),
ExpiresAt: aws.ToTime(authData.ExpiresAt),
ProxyEndpoint: aws.ToString(authData.ProxyEndpoint),
Service: cache.ServiceECR,
}
registry, err := ExtractRegistry(authEntry.ProxyEndpoint)
if err != nil {
return nil, fmt.Errorf("Invalid ProxyEndpoint returned by ECR: %s", authEntry.ProxyEndpoint)
}
auth, err := extractToken(authEntry.AuthorizationToken, authEntry.ProxyEndpoint)
if err != nil {
return nil, err
}
c.credentialCache.Set(registry.ID, &authEntry)
return auth, nil
}
}
if registryID == "" {
return nil, fmt.Errorf("No AuthorizationToken found for default registry")
}
return nil, fmt.Errorf("No AuthorizationToken found for %s", registryID)
}