package jwt import ( "clapclap/internal/ginctx" "clapclap/internal/uuid" "errors" "github.com/gin-gonic/gin" "github.com/golang-jwt/jwt/v5" "log" ) func MintFromCtx(c *gin.Context) (string, error) { userID, err := ginctx.GetUUID(c, "userID") if err != nil { return "", err } duration, err := ginctx.GetDuration(c, TOKEN_DURATION_KEY) if err != nil { return "", err } signingMethod, err := ginctx.GetSigningMethod(c, SIGNING_METHOD_KEY) if err != nil { return "", err } key, ok := c.Get(SIGNING_KEY_KEY) if !ok { return "", errors.New("No " + SIGNING_KEY_KEY + " in gin ginctx") } now, err := ginctx.GetTimestamp(c) if err != nil { return "", err } log.Printf("exp: %v\n", duration) return jwt.NewWithClaims(signingMethod, jwt.MapClaims{ "jit": uuid.New(), "sub": userID.String(), "iss": c.GetString("issuer"), "aud": c.GetString("aud"), "iat": jwt.NewNumericDate(now), "exp": jwt.NewNumericDate(now.Add(duration)), // add custom claims here }).SignedString(key) }