From 295f5cc14a82c98aa4afe45326d26ed0fc54d616 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 22 Oct 2025 00:30:00 +0800 Subject: [PATCH] add failure retry detection to the sending forget password mail --- pkg/api/forget_passwords.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pkg/api/forget_passwords.go b/pkg/api/forget_passwords.go index fe29e7de..8b1f94cf 100644 --- a/pkg/api/forget_passwords.go +++ b/pkg/api/forget_passwords.go @@ -4,6 +4,7 @@ import ( "time" "github.com/mayswind/ezbookkeeping/pkg/core" + "github.com/mayswind/ezbookkeeping/pkg/duplicatechecker" "github.com/mayswind/ezbookkeeping/pkg/errs" "github.com/mayswind/ezbookkeeping/pkg/log" "github.com/mayswind/ezbookkeeping/pkg/models" @@ -14,6 +15,7 @@ import ( // ForgetPasswordsApi represents user forget password api type ForgetPasswordsApi struct { ApiUsingConfig + ApiUsingDuplicateChecker users *services.UserService tokens *services.TokenService forgetPasswords *services.ForgetPasswordService @@ -25,6 +27,12 @@ var ( ApiUsingConfig: ApiUsingConfig{ container: settings.Container, }, + ApiUsingDuplicateChecker: ApiUsingDuplicateChecker{ + ApiUsingConfig: ApiUsingConfig{ + container: settings.Container, + }, + container: duplicatechecker.Container, + }, users: services.Users, tokens: services.Tokens, forgetPasswords: services.ForgetPasswords, @@ -41,6 +49,13 @@ func (a *ForgetPasswordsApi) UserForgetPasswordRequestHandler(c *core.WebContext return nil, errs.ErrEmailIsEmptyOrInvalid } + err = a.CheckFailureCount(c, 0) + + if err != nil { + log.Warnf(c, "[forget_passwords.UserForgetPasswordRequestHandler] cannot send forget password mail to \"%s\", because %s", request.Email, err.Error()) + return nil, errs.Or(err, errs.ErrFailureCountLimitReached) + } + user, err := a.users.GetUserByEmail(c, request.Email) if err != nil { @@ -48,6 +63,13 @@ func (a *ForgetPasswordsApi) UserForgetPasswordRequestHandler(c *core.WebContext log.Errorf(c, "[forget_passwords.UserForgetPasswordRequestHandler] failed to get user, because %s", err.Error()) } + failureCheckErr := a.CheckAndIncreaseFailureCount(c, 0) + + if failureCheckErr != nil { + log.Warnf(c, "[forget_passwords.UserForgetPasswordRequestHandler] cannot send forget password mail to \"%s\", because %s", request.Email, failureCheckErr.Error()) + return nil, errs.Or(failureCheckErr, errs.ErrFailureCountLimitReached) + } + return nil, errs.ErrUserNotFound }