Files
outfit-voting-abi26/internal/auth/jwt.go
T
tueem 85e4df52a5
build / Go-Build (push) Successful in 1m1s
feat(*): initial commit
2026-06-24 00:16:21 +02:00

55 lines
1.0 KiB
Go

package auth
import (
"time"
"github.com/golang-jwt/jwt/v5"
)
var signingkey []byte
type JWTClaims struct {
User string `json:"user"`
jwt.RegisteredClaims
}
func SetSigningKey(key string) {
signingkey = []byte(key)
}
func NewJWT(user string) (string, error) {
claims := JWTClaims{
user,
jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)), // Expires in 24 hours
IssuedAt: jwt.NewNumericDate(time.Now()),
Issuer: "outfit-voting-abi26",
},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString(signingkey)
}
func ValidateJWT(token string) (string, error) {
claims := &JWTClaims{}
parsed, err := jwt.ParseWithClaims(token, claims, func(t *jwt.Token) (any, error) {
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, jwt.ErrSignatureInvalid
}
return signingkey, nil
})
if err != nil {
return "", err
}
claims, ok := parsed.Claims.(*JWTClaims)
if !ok {
return "", jwt.ErrTokenInvalidClaims
}
return claims.User, nil
}