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 }