portainer/portainer

View on GitHub
api/aws/ecr/authorization_token.go

Summary

Maintainability
A
0 mins
Test Coverage
package ecr

import (
    "context"
    "encoding/base64"
    "fmt"
    "strings"
    "time"
)

func (s *Service) GetEncodedAuthorizationToken() (token *string, expiry *time.Time, err error) {
    getAuthorizationTokenOutput, err := s.client.GetAuthorizationToken(context.TODO(), nil)
    if err != nil {
        return
    }

    if len(getAuthorizationTokenOutput.AuthorizationData) == 0 {
        err = fmt.Errorf("AuthorizationData is empty")
        return
    }

    authData := getAuthorizationTokenOutput.AuthorizationData[0]

    token = authData.AuthorizationToken
    expiry = authData.ExpiresAt

    return
}

func (s *Service) GetAuthorizationToken() (token *string, expiry *time.Time, err error) {
    tokenEncodedStr, expiry, err := s.GetEncodedAuthorizationToken()
    if err != nil {
        return
    }

    tokenByte, err := base64.StdEncoding.DecodeString(*tokenEncodedStr)
    if err != nil {
        return
    }
    tokenStr := string(tokenByte)
    token = &tokenStr

    return
}

func (s *Service) ParseAuthorizationToken(token string) (username string, password string, err error) {
    if len(token) == 0 {
        return
    }

    splitToken := strings.Split(token, ":")
    if len(splitToken) < 2 {
        err = fmt.Errorf("invalid ECR authorization token")
        return
    }

    username = splitToken[0]
    password = splitToken[1]

    return
}