package auth import ( "fmt" "time" "github.com/google/uuid" ) var ( ErrExpiredToken = fmt.Errorf("token has expired") ErrInvalidToken = fmt.Errorf("token is invalid") ) // Payload contains the payload data of the token type Payload struct { ID uuid.UUID `json:"id"` Username string `json:"username"` // or UserID Role string `json:"role"` IssuedAt time.Time `json:"issued_at"` ExpiredAt time.Time `json:"expired_at"` } // NewPayload creates a new token payload with a specific username and duration func NewPayload(username string, role string, duration time.Duration) (*Payload, error) { tokenID, err := uuid.NewRandom() if err != nil { return nil, err } payload := &Payload{ ID: tokenID, Username: username, Role: role, IssuedAt: time.Now(), ExpiredAt: time.Now().Add(duration), } return payload, nil }