You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.8 KiB

package token
import (
"log"
"time"
"github.com/golang-jwt/jwt/v5"
"github.com/mnrva-dev/owltier.com/server/config"
"github.com/mnrva-dev/owltier.com/server/db"
)
const (
ACCESS_EXPIRATION = 10 * time.Minute
REFRESH_EXPIRATION = 7 * 24 * time.Hour
VERIFY_EMAIL_EXPIRATION = 15 * time.Minute
)
func GenerateAccess(user *db.UserSchema) string {
c := BuildClaims(user)
c.ExpiresAt = jwt.NewNumericDate(time.Now().Add(ACCESS_EXPIRATION))
c.Type = TypeAccess
c.Id = user.Id
token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
// Sign and get the complete encoded token as a string using the secret
tokenString, err := token.SignedString(config.AccessSecret())
if err != nil {
log.Println(err)
return ""
}
return tokenString
}
func GenerateRefresh(user *db.UserSchema) string {
c := BuildClaims(user)
c.ExpiresAt = jwt.NewNumericDate(time.Now().Add(REFRESH_EXPIRATION))
c.Type = TypeRefresh
token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
// Sign and get the complete encoded token as a string using the secret
tokenString, err := token.SignedString(config.RefreshSecret())
if err != nil {
log.Println(err)
return ""
}
return tokenString
}
func GenerateVerifyEmail(user *db.UserSchema) string {
c := &Claims{}
c.Id = user.Id
c.Email = user.Email
c.IssuedAt = jwt.NewNumericDate(time.Now())
c.NotBefore = jwt.NewNumericDate(time.Now())
c.Issuer = config.JwtIssuer()
c.Audience = config.JwtAudience()
c.ExpiresAt = jwt.NewNumericDate(time.Now().Add(VERIFY_EMAIL_EXPIRATION))
c.Type = TypeVerifyEmail
c.Scope = "verify-email"
token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
// Sign and get the complete encoded token as a string using the secret
tokenString, err := token.SignedString(config.EmailTokenSecret())
if err != nil {
log.Println(err)
return ""
}
return tokenString
}