mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 17:42:25 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package oauth2
 | 
						|
 | 
						|
import (
 | 
						|
	"crypto/sha256"
 | 
						|
	"encoding/base64"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// ResponseType the type of authorization request
 | 
						|
type ResponseType string
 | 
						|
 | 
						|
// define the type of authorization request
 | 
						|
const (
 | 
						|
	Code  ResponseType = "code"
 | 
						|
	Token ResponseType = "token"
 | 
						|
)
 | 
						|
 | 
						|
func (rt ResponseType) String() string {
 | 
						|
	return string(rt)
 | 
						|
}
 | 
						|
 | 
						|
// GrantType authorization model
 | 
						|
type GrantType string
 | 
						|
 | 
						|
// define authorization model
 | 
						|
const (
 | 
						|
	AuthorizationCode   GrantType = "authorization_code"
 | 
						|
	PasswordCredentials GrantType = "password"
 | 
						|
	ClientCredentials   GrantType = "client_credentials"
 | 
						|
	Refreshing          GrantType = "refresh_token"
 | 
						|
	Implicit            GrantType = "__implicit"
 | 
						|
)
 | 
						|
 | 
						|
func (gt GrantType) String() string {
 | 
						|
	if gt == AuthorizationCode ||
 | 
						|
		gt == PasswordCredentials ||
 | 
						|
		gt == ClientCredentials ||
 | 
						|
		gt == Refreshing {
 | 
						|
		return string(gt)
 | 
						|
	}
 | 
						|
	return ""
 | 
						|
}
 | 
						|
 | 
						|
// CodeChallengeMethod PCKE method
 | 
						|
type CodeChallengeMethod string
 | 
						|
 | 
						|
const (
 | 
						|
	// CodeChallengePlain PCKE Method
 | 
						|
	CodeChallengePlain CodeChallengeMethod = "plain"
 | 
						|
	// CodeChallengeS256 PCKE Method
 | 
						|
	CodeChallengeS256 CodeChallengeMethod = "S256"
 | 
						|
)
 | 
						|
 | 
						|
func (ccm CodeChallengeMethod) String() string {
 | 
						|
	if ccm == CodeChallengePlain ||
 | 
						|
		ccm == CodeChallengeS256 {
 | 
						|
		return string(ccm)
 | 
						|
	}
 | 
						|
	return ""
 | 
						|
}
 | 
						|
 | 
						|
// Validate code challenge
 | 
						|
func (ccm CodeChallengeMethod) Validate(cc, ver string) bool {
 | 
						|
	switch ccm {
 | 
						|
	case CodeChallengePlain:
 | 
						|
		return cc == ver
 | 
						|
	case CodeChallengeS256:
 | 
						|
		s256 := sha256.Sum256([]byte(ver))
 | 
						|
		// trim padding
 | 
						|
		a := strings.TrimRight(base64.URLEncoding.EncodeToString(s256[:]), "=")
 | 
						|
		b := strings.TrimRight(cc, "=")
 | 
						|
		return a == b
 | 
						|
	default:
 | 
						|
		return false
 | 
						|
	}
 | 
						|
}
 |