UPDATE: Historian module
All checks were successful
Build and Release / release (push) Successful in 1m20s
All checks were successful
Build and Release / release (push) Successful in 1m20s
This commit is contained in:
@@ -3,6 +3,7 @@ package email
|
||||
import (
|
||||
"fmt"
|
||||
"history-api/assets"
|
||||
"history-api/internal/models"
|
||||
"history-api/pkg/config"
|
||||
"history-api/pkg/constants"
|
||||
"strings"
|
||||
@@ -10,7 +11,7 @@ import (
|
||||
"github.com/wneessen/go-mail"
|
||||
)
|
||||
|
||||
func SendMailOTP(toEmail, otpCode string, tokenType constants.TokenType) error {
|
||||
func SendMail(toEmail, subject, templatePath string, data map[string]string) error {
|
||||
userSmtp, err := config.GetConfig("SMTP_USER")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -21,36 +22,27 @@ func SendMailOTP(toEmail, otpCode string, tokenType constants.TokenType) error {
|
||||
return err
|
||||
}
|
||||
|
||||
var subject string
|
||||
var templatePath string
|
||||
|
||||
switch tokenType {
|
||||
case constants.TokenPasswordReset:
|
||||
subject = "Your Password Reset Code"
|
||||
templatePath = "resources/password_reset.html"
|
||||
case constants.TokenEmailVerify:
|
||||
subject = "Verify your email address"
|
||||
templatePath = "resources/email_verify.html"
|
||||
default:
|
||||
return fmt.Errorf("invalid token type: %v", tokenType)
|
||||
}
|
||||
htmlTemplate, err := assets.GetFileContent(templatePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read email template: %s", err)
|
||||
}
|
||||
|
||||
message := mail.NewMsg()
|
||||
if err := message.From(userSmtp); err != nil {
|
||||
return fmt.Errorf("failed to set From email address: %s", err)
|
||||
}
|
||||
if err := message.To(toEmail); err != nil {
|
||||
return fmt.Errorf("failed to set To email address: %s", err)
|
||||
finalHTML := htmlTemplate
|
||||
for k, v := range data {
|
||||
finalHTML = strings.ReplaceAll(finalHTML, "{{"+k+"}}", v)
|
||||
}
|
||||
|
||||
finalHTML := strings.ReplaceAll(htmlTemplate, "{{OTP_CODE}}", otpCode)
|
||||
message := mail.NewMsg()
|
||||
if err := message.From(userSmtp); err != nil {
|
||||
return fmt.Errorf("failed to set From: %s", err)
|
||||
}
|
||||
if err := message.To(toEmail); err != nil {
|
||||
return fmt.Errorf("failed to set To: %s", err)
|
||||
}
|
||||
|
||||
message.Subject(subject)
|
||||
message.SetBodyString(mail.TypeTextHTML, finalHTML)
|
||||
|
||||
client, err := mail.NewClient(
|
||||
"smtp.gmail.com",
|
||||
mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover),
|
||||
@@ -59,12 +51,56 @@ func SendMailOTP(toEmail, otpCode string, tokenType constants.TokenType) error {
|
||||
mail.WithPassword(passSmtp),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create mail client: %s", err)
|
||||
return fmt.Errorf("failed to create client: %s", err)
|
||||
}
|
||||
|
||||
err = client.DialAndSend(message)
|
||||
if err != nil {
|
||||
if err := client.DialAndSend(message); err != nil {
|
||||
return fmt.Errorf("failed to send mail: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func SendMailOTP(dto *models.TokenEntity) error {
|
||||
var subject string
|
||||
var templatePath string
|
||||
|
||||
switch dto.TokenType {
|
||||
case constants.TokenPasswordReset:
|
||||
subject = "Your Password Reset Code"
|
||||
templatePath = "resources/password_reset.html"
|
||||
case constants.TokenEmailVerify:
|
||||
subject = "Verify your email address"
|
||||
templatePath = "resources/email_verify.html"
|
||||
default:
|
||||
return fmt.Errorf("invalid token type: %v", dto.TokenType)
|
||||
}
|
||||
|
||||
return SendMail(dto.Email, subject, templatePath, map[string]string{
|
||||
"OTP_CODE": dto.Token,
|
||||
})
|
||||
}
|
||||
|
||||
func SendHistorianReviewMail(dto *models.UserVerificationStorageEntity) error {
|
||||
var subject string
|
||||
var templatePath string
|
||||
feUrl := config.GetConfigWithDefault("FRONTEND_URL", "http://localhost:3000")
|
||||
switch dto.Status {
|
||||
case constants.StatusApproved:
|
||||
subject = "Your Historian Application is Approved"
|
||||
templatePath = "resources/historian_approved.html"
|
||||
|
||||
case constants.StatusRejected:
|
||||
subject = "Your Historian Application is Rejected"
|
||||
templatePath = "resources/historian_rejected.html"
|
||||
|
||||
default:
|
||||
return fmt.Errorf("invalid status: %v", dto.Status)
|
||||
}
|
||||
|
||||
return SendMail(dto.Email, subject, templatePath, map[string]string{
|
||||
"NAME": dto.Email,
|
||||
"REASON": dto.ReviewNote,
|
||||
"APP_URL": feUrl,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user