silvermobi/models/accounts.go

51 lines
1.2 KiB
Go

package models
import (
"time"
"github.com/golang-jwt/jwt/v4"
)
type Account struct {
ID string `json:"id"`
Email string `json:"email"`
FirstName string `json:"firstName,omitempty"`
LastName string `json:"lastName,omitempty"`
VerifiedIdentity *bool `json:"verifiedIdentity,omitempty"`
BirthDate string `json:"birthdate,omitempty"`
Type string `json:"type,omitempty"`
LocalCredentials
}
type User struct {
ID string `json:"user_id"`
Status string `json:"status"`
BookingID string `json:"booking_id"`
}
type LocalCredentials struct {
Email string
EmailVerified bool
EmailValidationCode string
PhoneNumber string
PhoneNumberVerified bool
PhoneNumberValidationCode string
}
type UserClaims struct {
jwt.RegisteredClaims
}
func (account Account) CreateToken(ttl time.Duration, key string) (token string, err error) {
expiresAt := jwt.NewNumericDate(time.Now().Add(ttl))
claims := UserClaims{
RegisteredClaims: jwt.RegisteredClaims{
Subject: account.ID,
ExpiresAt: expiresAt,
},
}
t := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return t.SignedString([]byte(key))
}