package auth import ( "github.com/golang-jwt/jwt/v5" "os" "time" ) var jwtKey = []byte(os.Getenv("JWT_SECRET")) type Claims struct { UserID int `json:"user_id"` jwt.RegisteredClaims } func GenerateJWT(userID int) (string, error) { expirationTime := time.Now().Add(5 * time.Hour) claims := &Claims{ UserID: userID, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(expirationTime), }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString(jwtKey) if err != nil { return "", err } return tokenString, nil } func ValidateJWT(tokenString string) (*Claims, error) { claims := &Claims{} token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) { return jwtKey, nil }) if err != nil { return nil, err } if !token.Valid { return nil, err } return claims, nil }