
- Add JWT token generation and validation utilities - Add password hashing with bcrypt for secure authentication - Add pagination helper for API responses - Add random string generation for tokens and IDs - Add session management utilities - Add admin user initialization functionality
35 lines
798 B
Go
35 lines
798 B
Go
package utils
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
func GenerateJWT(issuer string, claims jwt.MapClaims, expiresIn time.Duration) (string, error) {
|
|
claims["iss"] = os.Getenv("JWT_ISSUER")
|
|
claims["aud"] = issuer
|
|
claims["iat"] = time.Now().Unix()
|
|
claims["exp"] = time.Now().Add(expiresIn).Unix()
|
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
|
|
|
tokenString, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return tokenString, nil
|
|
}
|
|
|
|
func VerifyJWT(tokenString string) (jwt.MapClaims, error) {
|
|
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
|
|
return []byte(os.Getenv("JWT_SECRET")), nil
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return token.Claims.(jwt.MapClaims), nil
|
|
}
|