diff --git a/api/controllers/console/app/error.py b/api/controllers/console/app/error.py index c19f054be4..88ca7a0449 100644 --- a/api/controllers/console/app/error.py +++ b/api/controllers/console/app/error.py @@ -47,3 +47,9 @@ class AppMoreLikeThisDisabledError(BaseHTTPException): error_code = 'app_more_like_this_disabled' description = "More like this disabled." code = 403 + + +class SiteCodeExistedError(BaseHTTPException): + error_code = 'site_code_existed_error' + description = 'Site code already existed' + code = 400 diff --git a/api/controllers/console/app/site.py b/api/controllers/console/app/site.py index 2e0e00a881..5c40fdfaa9 100644 --- a/api/controllers/console/app/site.py +++ b/api/controllers/console/app/site.py @@ -5,6 +5,7 @@ from werkzeug.exceptions import NotFound, Forbidden from controllers.console import api from controllers.console.app import _get_app +from controllers.console.app.error import SiteCodeExistedError from controllers.console.setup import setup_required from controllers.console.wraps import account_initialization_required from libs.helper import supported_language @@ -95,6 +96,10 @@ class AppSiteAccessTokenReset(Resource): app_id = str(app_id) app_model = _get_app(app_id) + parser = reqparse.RequestParser() + parser.add_argument('code', type=str, location='json') + args = parser.parse_args() + # The role of the current user in the ta table must be admin or owner if current_user.current_tenant.current_role not in ['admin', 'owner']: raise Forbidden() @@ -104,7 +109,11 @@ class AppSiteAccessTokenReset(Resource): if not site: raise NotFound - site.code = Site.generate_code(16) + code = args.get('code', Site.generate_code(16)) + if db.session.query(Site).filter(Site.code == code).first(): + raise SiteCodeExistedError(description=f'Site code already existed: {code}') + + site.code = code db.session.commit() return site