add basic user authentication

This commit is contained in:
2025-10-01 21:43:37 +02:00
parent 57355fe9ac
commit f20e177480
16 changed files with 338 additions and 51 deletions

22
internal/jwtauth/jwt.go Normal file
View File

@@ -0,0 +1,22 @@
package jwtauth
import (
"encoding/base64"
"os"
"github.com/golang-jwt/jwt/v5"
)
func GenerateJwtToken(username string) (string, error) {
var s string
key, err := base64.URLEncoding.DecodeString(os.Getenv(getKeyVariableName()))
if err != nil {
return s, err
}
t := jwt.NewWithClaims(jwt.SigningMethodHS256,
jwt.MapClaims{
"iss": "PersonalLibraryManager",
"sub": username,
})
return t.SignedString(key)
}

39
internal/jwtauth/key.go Normal file
View File

@@ -0,0 +1,39 @@
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
}