Private
Public Access
1
0
Files
Kordophone/model/authtoken.go

60 lines
1.3 KiB
Go
Raw Normal View History

package model
import (
"encoding/base64"
"time"
2023-06-22 11:03:00 -07:00
"github.com/rs/zerolog/log"
"github.com/dgrijalva/jwt-go"
)
type AuthToken struct {
SignedToken string `json:"jwt"`
token jwt.Token
}
type TokenGenerationError struct {
message string
}
func (e *TokenGenerationError) Error() string {
return e.message
}
// Create a struct to hold your custom claims
type customClaims struct {
Username string `json:"username"`
jwt.StandardClaims
}
const signingKey = "nDjYmTjoPrAGzuyhHz6Dq5bqcRrEZJc5Ls3SQcdylBI="
func NewAuthToken(username string) (*AuthToken, error) {
claims := customClaims{
Username: username,
StandardClaims: jwt.StandardClaims{
ExpiresAt: time.Now().Add(time.Hour * 24 * 5).Unix(), // 5 days
},
}
// Create a new JWT token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
if token == nil {
2023-06-22 11:03:00 -07:00
log.Error().Msg("Error creating Jwt Token")
return nil, &TokenGenerationError{"Error creating Jwt Token"}
}
// Sign the token with the specified signing key
decodedSigningKey, _ := base64.StdEncoding.DecodeString(signingKey)
signedToken, err := token.SignedString(decodedSigningKey)
if err != nil {
2023-06-22 11:03:00 -07:00
log.Error().Err(err).Msg("Error signing Jwt Token")
return nil, &TokenGenerationError{"Error signing Jwt Token"}
}
return &AuthToken{
SignedToken: signedToken,
token: *token,
}, nil
}