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  }