trepa/internal/core/jwt.go
2025-02-26 19:11:47 +00:00

40 lines
787 B
Go

package core
import (
"github.com/golang-jwt/jwt/v5"
)
type JWTClaims struct {
jwt.RegisteredClaims
AccountId string `json:"account_id"`
RoleId string `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, error) {
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
}