cloudfoundry/cf-k8s-controllers

View on GitHub
api/authorization/info_parser.go

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package authorization

import (
    "encoding/base64"
    "errors"
    "strings"

    apierrors "code.cloudfoundry.org/korifi/api/errors"
)

type InfoParser struct{}

func NewInfoParser() *InfoParser {
    return &InfoParser{}
}

func (p *InfoParser) Parse(authorizationHeader string) (Info, error) {
    if authorizationHeader == "" {
        return Info{}, apierrors.NewNotAuthenticatedError(errors.New("missing Authorization header"))
    }

    values := strings.Split(authorizationHeader, " ")
    if len(values) != 2 {
        return Info{}, apierrors.NewInvalidAuthError(errors.New("invalid Authorization header"))
    }

    scheme, data := values[0], values[1]
    switch strings.ToLower(scheme) {
    case BearerScheme:
        return Info{Token: data}, nil
    case CertScheme:
        certBytes, err := base64.StdEncoding.DecodeString(data)
        if err != nil {
            return Info{}, apierrors.NewInvalidAuthError(err)
        }
        return Info{CertData: certBytes}, nil
    default:
        return Info{}, apierrors.NewInvalidAuthError(errors.New("unsupported authorization scheme"))
    }
}