package token import ( "errors" "time" "github.com/google/uuid" ) // Different types of error returned by the VerifyToken function var ( ErrInvalidToken = errors.New("this token is invalid") ErrExpiredToken = errors.New("this token has expired") ) // Payload contains the payload data of the token type Payload struct { ID uuid.UUID `json:"id"` Email string `json:"account_id"` IssuedAt time.Time `json:"issued_at"` ExpiredAt time.Time `json:"expired_at"` } // NewPayload creates a new token payload with a specific accountID and duration func NewPayload(email string, duration time.Duration) (*Payload, error) { tokenID, err := uuid.NewRandom() if err != nil { return nil, err } payload := &Payload{ ID: tokenID, Email: email, IssuedAt: time.Now(), ExpiredAt: time.Now().Add(duration), } return payload, nil } // Valid checks if the token payload is valid or not func (payload *Payload) Valid() error { if time.Now().After(payload.ExpiredAt) { return ErrExpiredToken } return nil }