From 14ddb9052592a9bd2fdb32e19d8b4e3968371d9b Mon Sep 17 00:00:00 2001 From: GareArc Date: Wed, 28 May 2025 11:14:26 +0800 Subject: [PATCH] feat: support both code and id for access mode api --- api/controllers/console/explore/installed_app.py | 7 +++++-- api/controllers/web/app.py | 12 ++++++++++-- api/services/app_service.py | 12 ++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/api/controllers/console/explore/installed_app.py b/api/controllers/console/explore/installed_app.py index 8ac7f59de2..9d0c08564e 100644 --- a/api/controllers/console/explore/installed_app.py +++ b/api/controllers/console/explore/installed_app.py @@ -60,9 +60,12 @@ class InstalledAppsListApi(Resource): user_id = current_user.id res = [] app_ids = [installed_app["app"].id for installed_app in installed_app_list] - access_modes = EnterpriseService.WebAppAuth.batch_get_app_access_mode_by_id(app_ids) + webapp_settings = EnterpriseService.WebAppAuth.batch_get_app_access_mode_by_id(app_ids) for installed_app in installed_app_list: - if access_modes.get(installed_app["app"].id).access_mode == "sso_verified": + webapp_setting = webapp_settings.get(installed_app["app"].id) + if not webapp_setting: + continue + if webapp_setting.access_mode == "sso_verified": continue app_code = AppService.get_app_code_by_id(str(installed_app["app"].id)) if EnterpriseService.WebAppAuth.is_user_allowed_to_access_webapp( diff --git a/api/controllers/web/app.py b/api/controllers/web/app.py index bb4486bd91..22dc761780 100644 --- a/api/controllers/web/app.py +++ b/api/controllers/web/app.py @@ -46,10 +46,18 @@ class AppMeta(WebApiResource): class AppAccessMode(Resource): def get(self): parser = reqparse.RequestParser() - parser.add_argument("appId", type=str, required=True, location="args") + parser.add_argument("appId", type=str, required=False, location="args") + parser.add_argument("appCode", type=str, required=False, location="args") args = parser.parse_args() - app_id = args["appId"] + app_id = args.get("appId") + if args.get("appCode"): + app_code = args["appCode"] + app_id = AppService.get_app_id_by_code(app_code) + + if not app_id: + raise ValueError("appId or appCode must be provided") + res = EnterpriseService.WebAppAuth.get_app_access_mode_by_id(app_id) return {"accessMode": res.access_mode} diff --git a/api/services/app_service.py b/api/services/app_service.py index ebebf8fa58..d08462d001 100644 --- a/api/services/app_service.py +++ b/api/services/app_service.py @@ -395,3 +395,15 @@ class AppService: if not site: raise ValueError(f"App with id {app_id} not found") return str(site.code) + + @staticmethod + def get_app_id_by_code(app_code: str) -> str: + """ + Get app id by app code + :param app_code: app code + :return: app id + """ + site = db.session.query(Site).filter(Site.code == app_code).first() + if not site: + raise ValueError(f"App with code {app_code} not found") + return str(site.app_id)