package core import ( "github.com/golang-jwt/jwt/v5" ) type JWTClaims struct { jwt.RegisteredClaims AccountId int `json:"account_id"` RoleId int `json:"role_id"` } var jwtSecret string func InitJWT(secret string) { jwtSecret = secret } func SignJWT(claims JWTClaims) (string, error) { token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) return token.SignedString([]byte(jwtSecret)) } func VerifyJWT(token string) (JWTClaims, *HTTPError) { parsedClaims := JWTClaims{} claims, err := jwt.ParseWithClaims(token, &parsedClaims, func(token *jwt.Token) (any, error) { return []byte(jwtSecret), nil }) if err != nil { return JWTClaims{}, NewInternalServerError(err) } if !claims.Valid { return JWTClaims{}, ErrInvalidToken } return parsedClaims, nil }