mirror of
https://codeberg.org/superseriousbusiness/gotosocial.git
synced 2024-12-22 17:10:20 +03:00
77 lines
1.6 KiB
Go
77 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
|
||
|
}
|
||
|
}
|