From e67dfeddca8db85d6b60d4b6528d5450712e7abf Mon Sep 17 00:00:00 2001 From: wely Date: Mon, 1 Aug 2022 15:25:38 +0800 Subject: [PATCH 01/49] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E5=85=B6=E5=AE=83=E6=8F=92=E4=BB=B6=20=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ \345\274\200\345\217\221\345\225\206.md" | 0 .../ \344\273\243\347\220\206\345\225\206.md" | 0 .../ \350\277\220\350\220\245\345\225\206.md" | 0 .../index.md" | 0 ...6\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" | 0 .../ \347\263\273\347\273\237\346\217\222\344\273\266" | 0 "docs/ \345\205\266\345\256\203\346\217\222\344\273\266" | 1 + 7 files changed, 1 insertion(+) rename "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \345\274\200\345\217\221\345\225\206.md" => "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \345\274\200\345\217\221\345\225\206.md" (100%) rename "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \344\273\243\347\220\206\345\225\206.md" => "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \344\273\243\347\220\206\345\225\206.md" (100%) rename "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \350\277\220\350\220\245\345\225\206.md" => "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \350\277\220\350\220\245\345\225\206.md" (100%) rename "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/index.md" => "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/index.md" (100%) rename "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/\346\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" => "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/\346\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" (100%) rename "docs/ \347\263\273\347\273\237\346\217\222\344\273\266" => "docs/ \347\263\273\347\273\237\346\217\222\344\273\266" (100%) create mode 120000 "docs/ \345\205\266\345\256\203\346\217\222\344\273\266" diff --git "a/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \345\274\200\345\217\221\345\225\206.md" "b/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \345\274\200\345\217\221\345\225\206.md" similarity index 100% rename from "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \345\274\200\345\217\221\345\225\206.md" rename to "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \345\274\200\345\217\221\345\225\206.md" diff --git "a/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \344\273\243\347\220\206\345\225\206.md" "b/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \344\273\243\347\220\206\345\225\206.md" similarity index 100% rename from "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \344\273\243\347\220\206\345\225\206.md" rename to "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \344\273\243\347\220\206\345\225\206.md" diff --git "a/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \350\277\220\350\220\245\345\225\206.md" "b/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \350\277\220\350\220\245\345\225\206.md" similarity index 100% rename from "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \350\277\220\350\220\245\345\225\206.md" rename to "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/ \350\277\220\350\220\245\345\225\206.md" diff --git "a/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/index.md" "b/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/index.md" similarity index 100% rename from "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/index.md" rename to "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/index.md" diff --git "a/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/\346\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" "b/docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/\346\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" similarity index 100% rename from "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/\346\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" rename to "docs/ \345\225\206\344\270\232\345\220\210\344\275\234\346\214\207\345\215\227/\346\224\266\347\233\212\350\256\241\347\256\227\345\231\250.md" diff --git "a/docs/ \347\263\273\347\273\237\346\217\222\344\273\266" "b/docs/ \347\263\273\347\273\237\346\217\222\344\273\266" similarity index 100% rename from "docs/ \347\263\273\347\273\237\346\217\222\344\273\266" rename to "docs/ \347\263\273\347\273\237\346\217\222\344\273\266" diff --git "a/docs/ \345\205\266\345\256\203\346\217\222\344\273\266" "b/docs/ \345\205\266\345\256\203\346\217\222\344\273\266" new file mode 120000 index 000000000..03ea94656 --- /dev/null +++ "b/docs/ \345\205\266\345\256\203\346\217\222\344\273\266" @@ -0,0 +1 @@ +../arkid_extensions \ No newline at end of file From 2ad24bba9fcca85f7d14f95b1025e379b8fe13cf Mon Sep 17 00:00:00 2001 From: fanhe Date: Mon, 1 Aug 2022 15:38:48 +0800 Subject: [PATCH 02/49] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BF=83=E8=B7=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arkid/urls.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arkid/urls.py b/arkid/urls.py index 929ecc011..3581eeaad 100644 --- a/arkid/urls.py +++ b/arkid/urls.py @@ -22,6 +22,7 @@ from arkid.redoc import view as redoc_view from scim_server import urls as scim_urls from arkid.core.path import API_PATH_HEAD +from django.http import HttpResponse urlpatterns = [ @@ -32,6 +33,7 @@ path(f"{API_PATH_HEAD}/redoc", redoc_view.Redoc.as_view()), path(f"{API_PATH_HEAD}/openapi_redoc.json", redoc_view.RedocOpenAPI.as_view()), path(f"{API_PATH_HEAD}/", include('oauth2_provider.urls', namespace='oauth2_provider')), + path(f"{API_PATH_HEAD}/ping/", lambda _: HttpResponse('pong'), name='ping'), ] From 9157007512c1b11a955d7410ca8a347eb3b035b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Mon, 1 Aug 2022 17:26:58 +0800 Subject: [PATCH 03/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E5=88=9B=E5=BB=BA=E7=94=A8=E6=88=B7=E6=97=B6=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=88=B7=E5=90=8D=E9=94=99=E8=AF=AF=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=BB=A5=E5=8F=8A=E9=99=84=E5=8A=A0=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=97=A0=E5=A1=AB=E5=86=99=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/views/user.py | 8 +++++++- arkid/core/error.py | 2 +- extension_root/com_longgui_auth_factor_mobile/__init__.py | 5 ++++- extension_root/com_longgui_auth_factor_mobile/index.md | 4 ++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/api/v1/views/user.py b/api/v1/views/user.py index cd1343935..529c61842 100644 --- a/api/v1/views/user.py +++ b/api/v1/views/user.py @@ -53,11 +53,17 @@ def user_list_no_super(request, tenant_id: str): def user_create(request, tenant_id: str,data:UserCreateIn): # user = User.expand_objects.create(tenant=request.tenant,**data.dict()) + if User.objects.filter(tenant=request.tenant, username=data.username).count(): + return ErrorDict( + ErrorCode.USERNAME_EXISTS_ERROR + ) + user = User.objects.create(tenant=request.tenant, username=data.username) for key,value in data.dict().items(): if key=='username': continue - setattr(user,key,value) + if value: + setattr(user,key,value) user.save() return {"data":{"user":user.id.hex}} diff --git a/arkid/core/error.py b/arkid/core/error.py index 6b7210a49..e9fc6b756 100644 --- a/arkid/core/error.py +++ b/arkid/core/error.py @@ -11,7 +11,7 @@ class ErrorCode(Enum): # SMS_CODE_MISMATCH = '10002' # EMAIL_CODE_MISMATCH = '10021' - # USERNAME_EXISTS_ERROR = '10004' + USERNAME_EXISTS_ERROR = ('10004', _('username already exists', '用户名已存在')) # TENANT_NO_ACCESS = '10003' diff --git a/extension_root/com_longgui_auth_factor_mobile/__init__.py b/extension_root/com_longgui_auth_factor_mobile/__init__.py index 91df5d341..acc54146f 100644 --- a/extension_root/com_longgui_auth_factor_mobile/__init__.py +++ b/extension_root/com_longgui_auth_factor_mobile/__init__.py @@ -361,7 +361,10 @@ def create_auth_manage_page(self): page.create_actions( init_action=actions.DirectAction( path=mine_mobile_path, - method=actions.FrontActionMethod.GET + method=actions.FrontActionMethod.GET, + init_data={ + + } ), global_actions={ 'confirm': actions.ConfirmAction( diff --git a/extension_root/com_longgui_auth_factor_mobile/index.md b/extension_root/com_longgui_auth_factor_mobile/index.md index 78b7afcbe..97467a553 100644 --- a/extension_root/com_longgui_auth_factor_mobile/index.md +++ b/extension_root/com_longgui_auth_factor_mobile/index.md @@ -16,6 +16,10 @@ ## 配置指南 + + + + ## 实现思路 * 普通用户:手机号码+验证码用户注册/登录/重置密码: From 817692e75d2329a29d4045241602766ec99200a7 Mon Sep 17 00:00:00 2001 From: inji-hanbin Date: Mon, 1 Aug 2022 17:44:32 +0800 Subject: [PATCH 04/49] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/views/permission.py | 3 ++- arkid/core/error.py | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/api/v1/views/permission.py b/api/v1/views/permission.py index a54f19bc8..2e2a67780 100644 --- a/api/v1/views/permission.py +++ b/api/v1/views/permission.py @@ -419,9 +419,10 @@ def permission_toggle_open(request, tenant_id: str, permission_id: str): 切换权限是否打开的状态 ''' permission = SystemPermission.valid_objects.filter( - tenant_id=tenant_id, id=permission_id ).first() + if permission and permission.tenant is None: + return ErrorDict(ErrorCode.SYSTEM_PERMISSION_NOT_OPERATION) if permission is None: permission = Permission.valid_objects.filter(tenant_id=tenant_id, id=permission_id).first() if permission: diff --git a/arkid/core/error.py b/arkid/core/error.py index 6b7210a49..0171836c4 100644 --- a/arkid/core/error.py +++ b/arkid/core/error.py @@ -40,6 +40,7 @@ class ErrorCode(Enum): # PASSWORD_EXPIRED_ERROR = '10029' # USER_NOT_IN_TENANT_ERROR = '10030' PERMISSION_EXISTS_ERROR = ('10033', _('the permission not exists', '该权限不存在')) + # APP_EXISTS_ERROR = '10032' PERMISSION_NOT_EDIT = ('10033', _('the permission not edit', '该权限不允许编辑')) PERMISSION_NOT_CLOSE = ('10033', _('the permission not edit', '该权限不允许关闭')) @@ -48,6 +49,7 @@ class ErrorCode(Enum): BAN_REMOVE_GROUP_SCOPE = ('10036', _('ban remove group permission', '该分组范围不允许移除')) PERMISSION_GROUP_NOT_EDIT = ('10037', _('the permission group not edit', '该分组权限不允许编辑')) PERMISSION_GROUP_NOT_DELETE = ('10038', _('the permission group not delete', '该分组权限不允许删除')) + SYSTEM_PERMISSION_NOT_OPERATION = ('10033', _('system permission not operation', '系统权限不支持此操作')) # SMS_PROVIDER_IS_MISSING = '11001' # AUTHCODE_PROVIDER_IS_MISSING = '11002' From c0ef0f9e9ee6ec4766e54b43cc2116e4c7c65ced Mon Sep 17 00:00:00 2001 From: fanhe Date: Mon, 1 Aug 2022 17:58:51 +0800 Subject: [PATCH 05/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=AE=A1=E6=89=B9=E7=B3=BB=E7=BB=9Fschema?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arkid/core/extension/approve_system.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arkid/core/extension/approve_system.py b/arkid/core/extension/approve_system.py index dd9e75359..ca3adea32 100644 --- a/arkid/core/extension/approve_system.py +++ b/arkid/core/extension/approve_system.py @@ -19,9 +19,14 @@ class ApproveRequestOut(ResponseSchema): class ApproveSystemBaseSchema(Schema): - change_status_url: str = Field( + pass_request_url: str = Field( default='', - title=_('Change Approve Request Status Url', '改变审批请求URL'), + title=_('Pass Approve Request Url', '通过审批请求URL'), + readonly=True, + ) + deny_request_url: str = Field( + default='', + title=_('Deny Approve Request Url', '拒绝审批请求URL'), readonly=True, ) From 27bbc5d2e4ae9d403b926f2bcb455a53022124ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Mon, 1 Aug 2022 18:03:44 +0800 Subject: [PATCH 06/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20API=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/pages/developer_manage/api_docs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v1/pages/developer_manage/api_docs.py b/api/v1/pages/developer_manage/api_docs.py index 5bcf209cf..098535ed1 100644 --- a/api/v1/pages/developer_manage/api_docs.py +++ b/api/v1/pages/developer_manage/api_docs.py @@ -8,5 +8,5 @@ router = FrontRouter( path=tag, name=name, - url='/api/v1/tenant/{tenant_}docs/redoc/' + url='/api/v1/tenant/{tenant_id}/docs/redoc/' ) \ No newline at end of file From 8d50993e1f5a2e8d52b16f34ece1e59c7c99b4bf Mon Sep 17 00:00:00 2001 From: fanhe Date: Mon, 1 Aug 2022 18:18:03 +0800 Subject: [PATCH 07/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E5=8A=A8=E4=BD=9C=E7=BC=96=E8=BE=91=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/schema/approve_action.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/v1/schema/approve_action.py b/api/v1/schema/approve_action.py index 382d5afc3..7b4744c24 100644 --- a/api/v1/schema/approve_action.py +++ b/api/v1/schema/approve_action.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -from typing import List +from typing import List, Optional from pydantic import Field from ninja import Schema, ModelSchema from arkid.core.translation import gettext_default as _ @@ -64,7 +64,7 @@ class ApproveActionExtensionIn(Schema): class ApproveActionSchema(Schema): name: str = Field(title=_('Name', '名称'), default='') - description: str = Field(title=_('Description', '备注'), default='') + description: Optional[str] = Field(title=_('Description', '备注'), default='') path: str = Field( title=_('Path', '请求路径'), type="string", From 53aaed812b9227e11dd8d68e4d9ecf2cad46921d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Mon, 1 Aug 2022 19:16:56 +0800 Subject: [PATCH 08/49] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E6=8F=92=E4=BB=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A0=81=E9=A1=B5=E9=9D=A2=E9=87=8D?= =?UTF-8?q?=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__init__.py | 21 +++++--- .../com_longgui_auth_factor_mobile/schema.py | 50 +++++++++++++++++-- 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/extension_root/com_longgui_auth_factor_mobile/__init__.py b/extension_root/com_longgui_auth_factor_mobile/__init__.py index acc54146f..e0870f013 100644 --- a/extension_root/com_longgui_auth_factor_mobile/__init__.py +++ b/extension_root/com_longgui_auth_factor_mobile/__init__.py @@ -57,6 +57,7 @@ def load(self): tenant_path=True, response=SendSMSCodeOut, ) + print(self.url_send_sms_code) def authenticate(self, event, **kwargs): """ 认证 @@ -362,9 +363,6 @@ def create_auth_manage_page(self): init_action=actions.DirectAction( path=mine_mobile_path, method=actions.FrontActionMethod.GET, - init_data={ - - } ), global_actions={ 'confirm': actions.ConfirmAction( @@ -467,6 +465,9 @@ def update_mine_mobile(self, request, tenant_id: str,data:UpdateMineMobileIn): if not ret: return self.error(message) + if not check_sms_code(mobile,data.code): + return self.error(ErrorCode.SMS_CODE_MISMATCH) + user = request.user user.mobile=data.mobile user.save() @@ -477,9 +478,17 @@ def update_mine_mobile(self, request, tenant_id: str,data:UpdateMineMobileIn): def mine_mobile(self,request,tenant_id: str): user = request.user user_expand = User.expand_objects.filter(id=user.id).first() - return { - "data":user_expand - } + + config = self.get_tenant_configs(request.tenant).first() + + return self.success( + data={ + "current_mobile": user_expand.get("mobile",None), + "mobile": "", + "code": "", + "config_id": config.id.hex, + }, + ) extension = MobileAuthFactorExtension() diff --git a/extension_root/com_longgui_auth_factor_mobile/schema.py b/extension_root/com_longgui_auth_factor_mobile/schema.py index b00a2f918..a37d060fa 100644 --- a/extension_root/com_longgui_auth_factor_mobile/schema.py +++ b/extension_root/com_longgui_auth_factor_mobile/schema.py @@ -1,8 +1,8 @@ from typing import Optional from uuid import UUID from ninja import Field, ModelSchema, Schema +from arkid.config import get_app_config from arkid.core import actions -from arkid.core.actions import DirectAction from arkid.core.extension import create_extension_schema from arkid.core.schema import ResponseSchema from arkid.core.translation import gettext_default as _ @@ -42,8 +42,33 @@ class MineMobileItemOut(Schema): # default="86" # ) + current_mobile:str = Field( + title=_("当前手机号码"), + + ) + mobile:str = Field( - title='手机号', + title=_('新手机号码'), + suffix_action={ + "path":get_app_config().get_host() + "/api/v1/tenant/{tenant_id}/com_longgui_auth_factor_mobile/config/{config_id}/send_sms_code/", + "method":"post", + "params": { + "mobile": "mobile", + "areacode": "86", + }, + "delay":60, + "name":_("发送验证码") + } + ) + + config_id:str = Field( + default="", + hidden=True + ) + + code:str = Field( + title=_("验证码"), + default="" ) class MineMobileBaseOut(ResponseSchema): @@ -55,8 +80,27 @@ class UpdateMineMobileBaseIn(Schema): 注意: 此处因需要部分运行时配置参数故而临时写在此处,未来可能优化 """ mobile:str = Field( - title='手机号', + title=_('手机号码'), + suffix_action={ + "path":get_app_config().get_host() + "/api/v1/tenant/{tenant_id}/com_longgui_auth_factor_mobile/config/{config_id}/send_sms_code/", + "method":"post", + "params": { + "mobile": "mobile", + "areacode": "86", + }, + "delay":60, + "name":_("发送验证码") + } ) + + config_id:str = Field( + hidden=True + ) + + code:str = Field( + title=_("验证码"), + ) + class UpdateMineMobileBaseOut(ResponseSchema): pass From af600fd084754a068ec553f6966b998efc44487a Mon Sep 17 00:00:00 2001 From: inji-hanbin Date: Mon, 1 Aug 2022 19:28:41 +0800 Subject: [PATCH 09/49] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/views/app_protocol.py | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/api/v1/views/app_protocol.py b/api/v1/views/app_protocol.py index 137ab9f7c..92b5e7148 100644 --- a/api/v1/views/app_protocol.py +++ b/api/v1/views/app_protocol.py @@ -9,7 +9,6 @@ from arkid.core.extension.app_protocol import AppProtocolExtension from arkid.config import get_app_config - @api.get("/tenant/{tenant_id}/app_protocols/",response=List[AppProtocolListItemOut],tags=["应用协议"]) @operation(AppProtocolListOut, roles=[TENANT_ADMIN, PLATFORM_ADMIN]) @paginate(CustomPagination) @@ -18,12 +17,27 @@ def get_app_protocols(request, tenant_id: str): """ rs = [] host = get_app_config().get_frontend_host() + # 拿到默认的系统插件 + qs = Extension.valid_objects.all() + packages = [] + for item in qs: + ext_dir = item.ext_dir + package = item.package + if 'extension_root' in ext_dir and package not in packages: + packages.append(package) + # 插件筛选 for k,v in AppProtocolExtension.composite_schema_map.items(): for p_k,p_v in v.items(): - rs.append({ - "name": k, - "doc_url": f"{host}/arkid/%20系统插件/{p_k.replace('.','_')}/", - "package": p_k - }) - + if p_k in packages: + rs.append({ + "name": k, + "doc_url": f"{host}/docs/%20%20系统插件/{p_k.replace('.','_')}/", + "package": p_k + }) + else: + rs.append({ + "name": k, + "doc_url": f"{host}/docs/%20其它插件/{p_k.replace('.','_')}/", + "package": p_k + }) return rs \ No newline at end of file From 8f4b19b5d137283c07536df10d5a8a984e1675b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Tue, 2 Aug 2022 10:12:43 +0800 Subject: [PATCH 10/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=BD=93=E5=89=8D=E6=9C=AA=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=94=B5=E8=AF=9D=E5=8F=B7=E7=A0=81=E8=80=8C=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension_root/com_longgui_auth_factor_mobile/schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension_root/com_longgui_auth_factor_mobile/schema.py b/extension_root/com_longgui_auth_factor_mobile/schema.py index a37d060fa..39f9b1470 100644 --- a/extension_root/com_longgui_auth_factor_mobile/schema.py +++ b/extension_root/com_longgui_auth_factor_mobile/schema.py @@ -42,7 +42,7 @@ class MineMobileItemOut(Schema): # default="86" # ) - current_mobile:str = Field( + current_mobile:Optional[str] = Field( title=_("当前手机号码"), ) From 9f621ba536a01c20e81b7419e0f6c50fe5df25af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Tue, 2 Aug 2022 10:15:16 +0800 Subject: [PATCH 11/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=97=A0=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension_root/com_longgui_auth_factor_mobile/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extension_root/com_longgui_auth_factor_mobile/__init__.py b/extension_root/com_longgui_auth_factor_mobile/__init__.py index e0870f013..4d4d166e0 100644 --- a/extension_root/com_longgui_auth_factor_mobile/__init__.py +++ b/extension_root/com_longgui_auth_factor_mobile/__init__.py @@ -481,6 +481,11 @@ def mine_mobile(self,request,tenant_id: str): config = self.get_tenant_configs(request.tenant).first() + if not config: + return self.error( + ErrorCode.CONFIG_IS_NOT_EXISTS + ) + return self.success( data={ "current_mobile": user_expand.get("mobile",None), From 08784b767963a12cb3819d7fb3a77cc706092285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Tue, 2 Aug 2022 11:23:57 +0800 Subject: [PATCH 12/49] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8D=E6=AD=A3=E7=A1=AEBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension_root/com_longgui_auth_factor_mobile/__init__.py | 1 + extension_root/com_longgui_sms_aliyun/__init__.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/extension_root/com_longgui_auth_factor_mobile/__init__.py b/extension_root/com_longgui_auth_factor_mobile/__init__.py index 4d4d166e0..75daecd8a 100644 --- a/extension_root/com_longgui_auth_factor_mobile/__init__.py +++ b/extension_root/com_longgui_auth_factor_mobile/__init__.py @@ -55,6 +55,7 @@ def load(self): 'POST', self.send_sms_code, tenant_path=True, + auth=None, response=SendSMSCodeOut, ) print(self.url_send_sms_code) diff --git a/extension_root/com_longgui_sms_aliyun/__init__.py b/extension_root/com_longgui_sms_aliyun/__init__.py index 1c77f6248..466a3a548 100644 --- a/extension_root/com_longgui_sms_aliyun/__init__.py +++ b/extension_root/com_longgui_sms_aliyun/__init__.py @@ -1,3 +1,4 @@ +import json from ninja import Field from typing import Optional from types import SimpleNamespace @@ -45,7 +46,7 @@ def send_sms(self, event, **kwargs): mobile = event.data.pop("mobile") # TODO 处理短信发送的数据结构 - template_params = event.data + template_params = json.dumps({"code":event.data["code"]}) settings = self.get_settings(tenant) settings = SimpleNamespace(**settings.settings) @@ -74,6 +75,7 @@ def send_sms(self, event, **kwargs): out_id=config.out_id or None, ) res = client.send_sms(send_sms_request) + print(res.body) return res.body.to_map() From 9d914f13a433471dc891ddb0b90a0c7c3a515b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=98=E5=B0=8F=E8=A5=BF?= Date: Tue, 2 Aug 2022 11:31:10 +0800 Subject: [PATCH 13/49] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A0=81=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=B8=AD=E5=8F=91=E9=80=81=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8F=82=E6=95=B0=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension_root/com_longgui_auth_factor_mobile/schema.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/extension_root/com_longgui_auth_factor_mobile/schema.py b/extension_root/com_longgui_auth_factor_mobile/schema.py index 39f9b1470..51cf46d27 100644 --- a/extension_root/com_longgui_auth_factor_mobile/schema.py +++ b/extension_root/com_longgui_auth_factor_mobile/schema.py @@ -52,10 +52,6 @@ class MineMobileItemOut(Schema): suffix_action={ "path":get_app_config().get_host() + "/api/v1/tenant/{tenant_id}/com_longgui_auth_factor_mobile/config/{config_id}/send_sms_code/", "method":"post", - "params": { - "mobile": "mobile", - "areacode": "86", - }, "delay":60, "name":_("发送验证码") } @@ -84,10 +80,6 @@ class UpdateMineMobileBaseIn(Schema): suffix_action={ "path":get_app_config().get_host() + "/api/v1/tenant/{tenant_id}/com_longgui_auth_factor_mobile/config/{config_id}/send_sms_code/", "method":"post", - "params": { - "mobile": "mobile", - "areacode": "86", - }, "delay":60, "name":_("发送验证码") } From 8892b6c18e0e125060372a5aab8dc771cb9ae8b0 Mon Sep 17 00:00:00 2001 From: wely Date: Tue, 2 Aug 2022 12:35:48 +0800 Subject: [PATCH 14/49] =?UTF-8?q?docs:=20=E2=9C=8F=EF=B8=8F=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=96=87=E6=A1=A3=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/overrides/partials/header.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/overrides/partials/header.html b/docs/overrides/partials/header.html index a5241dc5a..b6ac56376 100644 --- a/docs/overrides/partials/header.html +++ b/docs/overrides/partials/header.html @@ -6,6 +6,15 @@ {% set class = class ~ " md-header--lifted" %} {% endif %}
+