feat: email api add password param

pull/8904/head
Joe 2 years ago
parent 0cbef254cd
commit 5066233cd4

@ -31,18 +31,23 @@ class ForgotPasswordSendEmailApi(Resource):
def post(self): def post(self):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument("email", type=email, required=True, location="json") parser.add_argument("email", type=email, required=True, location="json")
parser.add_argument("language", type=str, required=False, location="json")
args = parser.parse_args() args = parser.parse_args()
account = Account.query.filter_by(email=args["email"]).first() account = Account.query.filter_by(email=args["email"]).first()
token = None token = None
if account is None: if account is None:
if dify_config.ALLOW_REGISTER: if dify_config.ALLOW_REGISTER:
token = AccountService.send_reset_password_email(email=args["email"]) token = AccountService.send_reset_password_email(
email=args["email"], language=args["language"] or "en-US"
)
else: else:
raise NotAllowedRegister() raise NotAllowedRegister()
elif account: elif account:
try: try:
token = AccountService.send_reset_password_email(account=account, email=args["email"]) token = AccountService.send_reset_password_email(
account=account, email=args["email"], language=args["language"] or "en-US"
)
except RateLimitExceededError: except RateLimitExceededError:
logging.warning(f"Rate limit exceeded for email: {args['email']}") logging.warning(f"Rate limit exceeded for email: {args['email']}")
raise PasswordResetRateLimitExceededError() raise PasswordResetRateLimitExceededError()

@ -81,16 +81,19 @@ class ResetPasswordSendEmailApi(Resource):
def post(self): def post(self):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument("email", type=email, required=True, location="json") parser.add_argument("email", type=email, required=True, location="json")
parser.add_argument("language", type=str, required=False, location="json")
args = parser.parse_args() args = parser.parse_args()
account = AccountService.get_user_through_email(args["email"]) account = AccountService.get_user_through_email(args["email"])
if account is None: if account is None:
if dify_config.ALLOW_REGISTER: if dify_config.ALLOW_REGISTER:
token = AccountService.send_reset_password_email(email=args["email"]) token = AccountService.send_reset_password_email(
email=args["email"], language=args["language"] or "en-US"
)
else: else:
raise NotAllowedRegister() raise NotAllowedRegister()
else: else:
token = AccountService.send_reset_password_email(account=account) token = AccountService.send_reset_password_email(account=account, language=args["language"])
return {"result": "success", "data": token} return {"result": "success", "data": token}
@ -100,16 +103,19 @@ class EmailCodeLoginSendEmailApi(Resource):
def post(self): def post(self):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument("email", type=email, required=True, location="json") parser.add_argument("email", type=email, required=True, location="json")
parser.add_argument("language", type=str, required=False, location="json")
args = parser.parse_args() args = parser.parse_args()
account = AccountService.get_user_through_email(args["email"]) account = AccountService.get_user_through_email(args["email"])
if account is None: if account is None:
if dify_config.ALLOW_REGISTER: if dify_config.ALLOW_REGISTER:
token = AccountService.send_email_code_login_email(email=args["email"]) token = AccountService.send_email_code_login_email(
email=args["email"], language=args["language"] or "en-US"
)
else: else:
raise NotAllowedRegister() raise NotAllowedRegister()
else: else:
token = AccountService.send_email_code_login_email(account=account) token = AccountService.send_email_code_login_email(account=account, language=args["language"])
return {"result": "success", "data": token} return {"result": "success", "data": token}

@ -255,9 +255,11 @@ class AccountService:
return AccountService.load_user(account_id) return AccountService.load_user(account_id)
@classmethod @classmethod
def send_reset_password_email(cls, account: Optional[Account] = None, email: Optional[str] = None): def send_reset_password_email(
cls, account: Optional[Account] = None, email: Optional[str] = None, language: Optional[str] = "en-US"
):
account_email = account.email if account else email account_email = account.email if account else email
account_language = account.interface_language if account else languages[0] account_language = account.interface_language if account else language
if cls.reset_password_rate_limiter.is_rate_limited(account_email): if cls.reset_password_rate_limiter.is_rate_limited(account_email):
raise RateLimitExceededError(f"Rate limit exceeded for email: {account_email}. Please try again later.") raise RateLimitExceededError(f"Rate limit exceeded for email: {account_email}. Please try again later.")
@ -283,7 +285,9 @@ class AccountService:
return TokenManager.get_token_data(token, "reset_password") return TokenManager.get_token_data(token, "reset_password")
@classmethod @classmethod
def send_email_code_login_email(cls, account: Optional[Account] = None, email: Optional[str] = None): def send_email_code_login_email(
cls, account: Optional[Account] = None, email: Optional[str] = None, language: Optional[str] = "en-US"
):
if cls.email_code_login_rate_limiter.is_rate_limited(email): if cls.email_code_login_rate_limiter.is_rate_limited(email):
raise RateLimitExceededError(f"Rate limit exceeded for email: {email}. Please try again later.") raise RateLimitExceededError(f"Rate limit exceeded for email: {email}. Please try again later.")
@ -292,7 +296,7 @@ class AccountService:
account=account, email=email, token_type="email_code_login", additional_data={"code": code} account=account, email=email, token_type="email_code_login", additional_data={"code": code}
) )
send_email_code_login_mail_task.delay( send_email_code_login_mail_task.delay(
language=account.interface_language if account else languages[0], language=account.interface_language if account else language,
to=account.email if account else email, to=account.email if account else email,
code=code, code=code,
) )

Loading…
Cancel
Save