package auth import ( "fmt" "os" "time" "github.com/golang-jwt/jwt/v5" ) var secretKey = os.Getenv("JWT_SECRET_KEY") type UserClaims struct { jwt.RegisteredClaims UserID int64 } func GenerateUserToken(userId int64, expiryTime time.Time) (string, error) { now := time.Now() claims := UserClaims{ UserID: userId, RegisteredClaims: jwt.RegisteredClaims{ IssuedAt: jwt.NewNumericDate(now), ExpiresAt: jwt.NewNumericDate(expiryTime), }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString([]byte(secretKey)) } func ValidateUserToken(token string) (int64, error) { claims := &UserClaims{} parsed, err := jwt.ParseWithClaims(token, claims, func(t *jwt.Token) (any, error) { return []byte(secretKey), nil }) if err != nil { return -1, fmt.Errorf("failed to parse token: %v", err) } if !parsed.Valid { return -1, fmt.Errorf("invalid token") } return claims.UserID, nil }