61 lines
1.0 KiB
Go
61 lines
1.0 KiB
Go
package github_auth
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"github.com/gofrs/uuid"
|
|
"os"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
func sha256Sign(data string) string {
|
|
hash := sha256.Sum256([]byte(data))
|
|
return hex.EncodeToString(hash[:])
|
|
}
|
|
|
|
func GetAccessTokenT() string {
|
|
t, _ := uuid.NewV4()
|
|
return t.String()
|
|
}
|
|
|
|
func JsonMap2Token(data map[string]interface{}) string {
|
|
if len(data) == 0 {
|
|
return ""
|
|
}
|
|
|
|
keys := make([]string, 0, len(data))
|
|
for k := range data {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
|
|
var sb strings.Builder
|
|
for i, key := range keys {
|
|
if i > 0 {
|
|
sb.WriteString(";")
|
|
}
|
|
sb.WriteString(key)
|
|
sb.WriteString("=")
|
|
sb.WriteString(fmt.Sprintf("%v", data[key]))
|
|
}
|
|
|
|
return sb.String()
|
|
}
|
|
|
|
func JsonMap2SignToken(data map[string]interface{}) string {
|
|
token := JsonMap2Token(data)
|
|
if token == "" {
|
|
return ""
|
|
}
|
|
|
|
sign := Token2Sign(token)
|
|
return token + ";8kp=1:" + sign
|
|
}
|
|
|
|
func Token2Sign(token string) string {
|
|
sign := sha256Sign(token + fmt.Sprintf(";salt=%s", os.Getenv("TOKEN_SALT")))
|
|
return sign
|
|
}
|