mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-29 19:52:24 -05:00 
			
		
		
		
	* start fixing up tests * fix up tests + automate with drone * fiddle with linting * messing about with drone.yml * some more fiddling * hmmm * add cache * add vendor directory * verbose * ci updates * update some little things * update sig
		
			
				
	
	
		
			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
 | |
| 	}
 | |
| }
 |