63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package auth
|
|
|
|
import (
|
|
"fmt"
|
|
"system-trace/core/constants"
|
|
"system-trace/core/database"
|
|
"system-trace/core/types"
|
|
"system-trace/core/utils"
|
|
"time"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
const (
|
|
AccessTokenLifetime int8 = 3
|
|
RefreshTokenLifetime int8 = 24
|
|
)
|
|
|
|
func genPair(id int32) (*types.PairTokens, error) {
|
|
at, rt, err := genTokens(id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = database.InsertPairOfTokens(id, at, rt)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
p := types.PairTokens{
|
|
AccessToken: at,
|
|
RefreshToken: rt,
|
|
}
|
|
|
|
return &p, nil
|
|
}
|
|
|
|
func genTokens(id int32) (string, string, error) {
|
|
at, err := genToken(fmt.Sprintf("%d", id), AccessTokenLifetime)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
rt, err := genToken(at, RefreshTokenLifetime)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
return at, rt, nil
|
|
}
|
|
|
|
func genToken(sub string, hours int8) (string, error) {
|
|
c := jwt.MapClaims{
|
|
"iss": constants.JWT_APP_ISS,
|
|
"sub": sub,
|
|
"iat": time.Now().Unix(),
|
|
"exp": time.Now().Add(time.Duration(hours) * time.Hour).Unix(),
|
|
}
|
|
a, err := utils.SignJWT(c)
|
|
|
|
return a, err
|
|
}
|