From f365677fd52c809c66f8baf5a093ea15b066807c Mon Sep 17 00:00:00 2001 From: Yansong Zhang <916125788@qq.com> Date: Fri, 11 Jul 2025 11:01:10 +0800 Subject: [PATCH] add api check-email-unique --- api/controllers/console/auth/error.py | 7 ++++++- api/controllers/console/workspace/account.py | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/api/controllers/console/auth/error.py b/api/controllers/console/auth/error.py index 7051fb9cc3..e1cf7a67e6 100644 --- a/api/controllers/console/auth/error.py +++ b/api/controllers/console/auth/error.py @@ -73,4 +73,9 @@ class EmailPasswordResetLimitError(BaseHTTPException): class EmailChangeLimitError(BaseHTTPException): error_code = "email_change_limit" description = "Too many failed email change attempts. Please try again in 24 hours." - code = 429 \ No newline at end of file + code = 429 + +class EmailAlreadyInUseError(BaseHTTPException): + error_code = "email_already_in_use" + description = "A user with this email already exists." + code = 400 \ No newline at end of file diff --git a/api/controllers/console/workspace/account.py b/api/controllers/console/workspace/account.py index ade2bf1a1f..4779c69e7d 100644 --- a/api/controllers/console/workspace/account.py +++ b/api/controllers/console/workspace/account.py @@ -15,6 +15,7 @@ from controllers.console.auth.error import ( EmailCodeError, InvalidEmailError, InvalidTokenError, + EmailAlreadyInUseError, ) from controllers.console.error import AccountNotFound, EmailSendIpLimitError from controllers.console.workspace.error import ( @@ -492,6 +493,18 @@ class ChangeEmailResetApi(Resource): return updated_account +class CheckEmailUnique(Resource): + @setup_required + def post(self): + parser = reqparse.RequestParser() + parser.add_argument("email", type=email, required=True, location="json") + args = parser.parse_args() + with Session(db.engine) as session: + # check if email is already in use + account = session.execute(select(Account).filter_by(email=args["email"])).scalar_one_or_none() + if account is not None: + raise EmailAlreadyInUseError() + return {"result": "success"} # Register API resources api.add_resource(AccountInitApi, "/account/init") @@ -513,5 +526,6 @@ api.add_resource(EducationAutoCompleteApi, "/account/education/autocomplete") api.add_resource(ChangeEmailSendEmailApi, "/account/change-email") api.add_resource(ChangeEmailCheckApi, "/account/change-email/validity") api.add_resource(ChangeEmailResetApi, "/account/change-email/reset") +api.add_resource(CheckEmailUnique, "/account/change-email/check-email-unique") # api.add_resource(AccountEmailApi, '/account/email') # api.add_resource(AccountEmailVerifyApi, '/account/email-verify')