package auth import ( "context" "fmt" "system-trace/core/app/constants" "system-trace/core/database" "system-trace/core/database/entities" "system-trace/core/utils" "time" "github.com/golang-jwt/jwt/v5" ) const ( AccessTokenLifetime int8 = 3 RefreshTokenLifetime int8 = 24 ) func genPair(u *entities.User) (*PairTokens, error) { at, rt, err := genTokens(u) err = insertPair(u.ID, at, rt) if err != nil { return nil, err } p := PairTokens{ AccessToken: at, RefreshToken: rt, } return &p, nil } func genTokens(u *entities.User) (string, string, error) { at, err := genToken(fmt.Sprintf("%d", u.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) { fmt.Println(sub, hours) 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 } func insertPair(id int32, at, rt string) error { aut := entities.AuthToken{ UserID: id, AccessToken: at, RefreshToken: rt, } ctx := context.Background() _, err := database.PG.NewInsert(). Model(&aut). Exec(ctx) return err }