From 76e5f86a0b4a2a90c4e56d47b8924fbdfb183b96 Mon Sep 17 00:00:00 2001 From: Donovan Date: Sun, 6 Oct 2024 12:30:30 -0500 Subject: [PATCH] implement reset cache --- core/aws_ses.go | 61 ------------------------------------------- core/email_queue.go | 5 ++++ core/nkode_handler.go | 1 + main.go | 2 ++ main_test.go | 1 + 5 files changed, 9 insertions(+), 61 deletions(-) delete mode 100644 core/aws_ses.go diff --git a/core/aws_ses.go b/core/aws_ses.go deleted file mode 100644 index fd12999..0000000 --- a/core/aws_ses.go +++ /dev/null @@ -1,61 +0,0 @@ -package core - -import ( - "context" - "errors" - "fmt" - "github.com/aws/aws-sdk-go-v2/aws" - "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/service/ses" - "github.com/aws/aws-sdk-go-v2/service/ses/types" -) - -func ResetUserEmail(userEmail UserEmail, customerId CustomerId) error { - // Load AWS configuration - cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-east-1")) - if err != nil { - return errors.New(fmt.Sprintf("unable to load SDK config, %v", err)) - } - - nkodeResetJwt, err := ResetNKodeToken(userEmail, customerId) - if err != nil { - return errors.New(fmt.Sprintf("unable to load SDK config, %v", err)) - } - // Create an SES client - sesClient := ses.NewFromConfig(cfg) - - // Define sender and recipient - sender := "no-reply@nkode.tech" - - // Define email subject and body - subject := "nKode Reset" - htmlBody := fmt.Sprintf("

Hello!

Click the link to reset your nKode.

Reset nKode", FrontendHost, nkodeResetJwt) - - // Construct the email message - input := &ses.SendEmailInput{ - Destination: &types.Destination{ - ToAddresses: []string{string(userEmail)}, - }, - Message: &types.Message{ - Body: &types.Body{ - Html: &types.Content{ - Data: aws.String(htmlBody), - }, - }, - Subject: &types.Content{ - Data: aws.String(subject), - }, - }, - Source: aws.String(sender), - } - - // Send the email - resp, err := sesClient.SendEmail(context.TODO(), input) - if err != nil { - return errors.New(fmt.Sprintf("failed to send email, %v", err)) - } - - // Output the message ID of the sent email - fmt.Printf("UserEmail sent successfully, Message ID: %s\n", *resp.MessageId) - return nil -} diff --git a/core/email_queue.go b/core/email_queue.go index 2e24a68..aa8ec54 100644 --- a/core/email_queue.go +++ b/core/email_queue.go @@ -84,9 +84,14 @@ func (s *SESClient) SendEmail(email Email) error { Source: aws.String(email.Sender), } + if err = s.ResetCache.Add(email.Recipient, nil, defaultExpiration); err != nil { + return err + } + // Send the email resp, err := sesClient.SendEmail(context.TODO(), input) if err != nil { + s.ResetCache.Delete(email.Recipient) return fmt.Errorf("failed to send email, %v", err) } diff --git a/core/nkode_handler.go b/core/nkode_handler.go index 86e4946..e7dc486 100644 --- a/core/nkode_handler.go +++ b/core/nkode_handler.go @@ -428,6 +428,7 @@ func (h *NKodeHandler) ResetNKode(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { methodNotAllowed(w) } + log.Print("Resetting email") var resetNKodePost ResetNKodePost err := decodeJson(w, r, &resetNKodePost) if err != nil { diff --git a/main.go b/main.go index df7445e..ecbf4e4 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,8 @@ func main() { defer db.CloseDb() sesClient := core.NewSESClient() emailQueue := core.NewEmailQueue(emailQueueBufferSize, maxEmailsPerSecond, &sesClient) + emailQueue.Start() + defer emailQueue.Stop() nkodeApi := core.NewNKodeAPI(db, emailQueue) AddDefaultCustomer(nkodeApi) handler := core.NKodeHandler{Api: nkodeApi} diff --git a/main_test.go b/main_test.go index b5b2a24..a510ee5 100644 --- a/main_test.go +++ b/main_test.go @@ -73,6 +73,7 @@ func TestApi(t *testing.T) { UserEmail: username, KeySelection: loginKeySelection, } + var jwtTokens core.AuthenticationTokens testApiPost(t, base+core.Login, loginBody, &jwtTokens) refreshClaims, err := core.ParseRefreshToken(jwtTokens.RefreshToken)