func parseChallengeHeader()

in pkg/dataplane/authenticator.go [58:80]


func parseChallengeHeader(headers http.Header) (string, error) {
	challenges, err := challenge.Parse(headers)
	if err != nil {
		return "", fmt.Errorf("%w: %w", errInvalidAuthHeader, err)
	}
	if len(challenges) == 0 {
		return "", fmt.Errorf("%w: %s", errInvalidAuthHeader, "no challenges found")
	}
	var bearer *challenge.Challenge
	for _, c := range challenges {
		if c.Scheme == "Bearer" {
			bearer = &c
		}
	}
	if bearer == nil {
		return "", fmt.Errorf("%w: %s", errInvalidAuthHeader, "no bearer challenge found")
	}
	authParam, provided := bearer.Parameters["authorization"]
	if !provided {
		return "", fmt.Errorf("%w: %s", errInvalidAuthHeader, "no authorization parameter in bearer challenge")
	}
	return authParam, nil
}