github.com/litesolutions/justifay-api@v1.0.0-2.0.20220707114139-46f28a909481/model/email.go (about) 1 package model 2 3 import ( 4 "time" 5 6 jwt "github.com/form3tech-oss/jwt-go" 7 uuid "github.com/google/uuid" 8 ) 9 10 // EmailTokenModel is an abstract model which can be used for objects from which 11 // we derive redirect emails (email confirmation, password reset and such) 12 type EmailToken struct { 13 IDRecord 14 Reference uuid.UUID `bun:"type:uuid,notnull,default:uuid_generate_v4()"` 15 EmailSent bool `bun:",notnull,default:false"` 16 EmailSentAt *time.Time 17 ExpiresAt time.Time `bun:",notnull"` 18 } 19 20 type EmailTokenClaims struct { 21 Username string `json:"username"` 22 Reference string `json:"reference"` 23 jwt.StandardClaims 24 } 25 26 type Email struct { 27 Recipient string 28 Subject string 29 Template string 30 } 31 32 // NewEmailToken creates new OauthEmailToken instance 33 func NewOauthEmailToken(expiresIn *time.Duration) *EmailToken { 34 return &EmailToken{ 35 EmailSent: false, 36 ExpiresAt: time.Now().UTC().Add(*expiresIn), 37 } 38 } 39 40 // NewOauthEmailTokenClaims creates new NewOauthEmailTokenClaims instance 41 func NewOauthEmailTokenClaims(email string, emailToken *EmailToken) *EmailTokenClaims { 42 return &EmailTokenClaims{ 43 Username: email, 44 Reference: emailToken.Reference.String(), 45 StandardClaims: jwt.StandardClaims{ 46 // In JWT, the expiry time is expressed as unix milliseconds 47 ExpiresAt: emailToken.ExpiresAt.Unix(), 48 }, 49 } 50 } 51 52 // NewOauthEmail 53 func NewOauthEmail(email, subject, template string) *Email { 54 return &Email{ 55 Recipient: email, 56 Subject: subject, 57 Template: template, 58 } 59 }