40 lines
657 B
Go
40 lines
657 B
Go
package jwtauth
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"os"
|
|
)
|
|
|
|
func generateRandomBytes(n int) ([]byte, error) {
|
|
b := make([]byte, n)
|
|
_, err := rand.Read(b)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return b, nil
|
|
}
|
|
|
|
func generateSecureToken(n int) (string, error) {
|
|
bytes, err := generateRandomBytes(n)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return base64.URLEncoding.EncodeToString(bytes), nil
|
|
}
|
|
|
|
func getKeyVariableName() string {
|
|
return "PLM_JWT_KEY"
|
|
}
|
|
|
|
func InitKey() error {
|
|
var err error
|
|
keyName := getKeyVariableName()
|
|
key := os.Getenv(keyName)
|
|
if key == "" {
|
|
key, err = generateSecureToken(64)
|
|
os.Setenv(keyName, key)
|
|
}
|
|
return err
|
|
}
|