/pkce.go (raw)
package main
import (
	"fmt"
	"strings"
)
const (
	pkceRequirementNone  = ""
	pkceRequirementPlain = pkceMethodPlain
	pkceRequirementS256  = pkceMethodS256
)
func normalizeClientPKCERequirement(value string) (string, error) {
	switch strings.ToUpper(strings.TrimSpace(value)) {
	case "", "NONE":
		return pkceRequirementNone, nil
	case strings.ToUpper(pkceRequirementPlain):
		return pkceRequirementPlain, nil
	case pkceRequirementS256:
		return pkceRequirementS256, nil
	default:
		return "", fmt.Errorf("invalid PKCE requirement")
	}
}
func allowPKCERequirement(method, requirement string) bool {
	requirement = strings.ToUpper(requirement)
	method = strings.ToUpper(method)
	switch requirement {
	case "", "NONE":
		return true
	case strings.ToUpper(pkceRequirementPlain):
		return method == strings.ToUpper(pkceMethodPlain) || method == strings.ToUpper(pkceMethodS256)
	case pkceRequirementS256:
		return method == strings.ToUpper(pkceMethodS256)
	default:
		return false
	}
}