trepa/internal/core/jwt.go
2025-03-24 20:43:00 +00:00

40 lines
786 B
Go

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
}