From 5f96f8c229b349f2856986185420807bb4effe28 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Thu, 10 Oct 2019 16:18:29 +0800 Subject: [PATCH 1/9] =?UTF-8?q?[Update]=20=E4=BC=98=E5=8C=96=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E5=88=A0=E9=99=A4=20API=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=B1=E8=B4=A5=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/node.py | 12 +++- apps/assets/models/node.py | 7 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 80778 -> 80897 bytes apps/locale/zh/LC_MESSAGES/django.po | 99 ++++++++++++++------------- 4 files changed, 69 insertions(+), 49 deletions(-) diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index 4e608163f..fbdebabc5 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from rest_framework import generics +from rest_framework import generics, status from rest_framework.serializers import ValidationError from rest_framework.views import APIView from rest_framework.response import Response @@ -59,6 +59,16 @@ class NodeViewSet(OrgModelViewSet): raise ValidationError({"error": msg}) return super().perform_update(serializer) + def destroy(self, request, *args, **kwargs): + node = self.get_object() + if node.has_children_or_contains_assets(): + msg = _("Deletion failed " + "and the node contains children or assets") + return Response( + data={'msg': msg}, status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + return super().destroy(request, *args, **kwargs) + class NodeListAsTreeApi(generics.ListAPIView): """ diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index d1628be76..71e1d4a24 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -470,8 +470,13 @@ class Node(OrgModelMixin, SomeNodesMixin, TreeMixin, FamilyMixin, FullValueMixin tree_node = TreeNode(**data) return tree_node - def delete(self, using=None, keep_parents=False): + def has_children_or_contains_assets(self): if self.children or self.get_assets(): + return True + return False + + def delete(self, using=None, keep_parents=False): + if self.has_children_or_contains_assets(): return return super().delete(using=using, keep_parents=keep_parents) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 4d853714e2fee29dd0f111503dab31528d3d45e8..39c1b8257bb75983e7d5bd0eddbdf40b1b569cd8 100644 GIT binary patch delta 23445 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 z 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 Xf*al&IrYKDp?9_}S>NeJ+UoxY-$O&u delta 23325 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 F{tv);9W?*| diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 4240cb36f..6abaad43b 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-08 17:09+0800\n" +"POT-Creation-Date: 2019-10-10 16:15+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -114,7 +114,7 @@ msgstr "资产" #: applications/templates/applications/user_remote_app_list.html:16 #: assets/forms/asset.py:24 assets/forms/domain.py:73 assets/forms/user.py:74 #: assets/forms/user.py:94 assets/models/base.py:28 assets/models/cluster.py:18 -#: assets/models/cmd_filter.py:20 assets/models/domain.py:20 +#: assets/models/cmd_filter.py:21 assets/models/domain.py:20 #: assets/models/group.py:20 assets/models/label.py:18 #: assets/templates/assets/admin_user_detail.html:56 #: assets/templates/assets/admin_user_list.html:44 @@ -186,8 +186,8 @@ msgstr "参数" #: applications/models/remote_app.py:39 #: applications/templates/applications/remote_app_detail.html:73 #: assets/models/asset.py:174 assets/models/base.py:36 -#: assets/models/cluster.py:28 assets/models/cmd_filter.py:25 -#: assets/models/cmd_filter.py:58 assets/models/group.py:21 +#: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 +#: assets/models/cmd_filter.py:59 assets/models/group.py:21 #: assets/templates/assets/admin_user_detail.html:68 #: assets/templates/assets/asset_detail.html:124 #: assets/templates/assets/cmd_filter_detail.html:77 @@ -238,8 +238,8 @@ msgstr "创建日期" #: applications/templates/applications/remote_app_list.html:23 #: applications/templates/applications/user_remote_app_list.html:19 #: assets/models/asset.py:176 assets/models/base.py:33 -#: assets/models/cluster.py:29 assets/models/cmd_filter.py:22 -#: assets/models/cmd_filter.py:55 assets/models/domain.py:21 +#: assets/models/cluster.py:29 assets/models/cmd_filter.py:23 +#: assets/models/cmd_filter.py:56 assets/models/domain.py:21 #: assets/models/domain.py:53 assets/models/group.py:23 #: assets/models/label.py:23 assets/templates/assets/admin_user_detail.html:72 #: assets/templates/assets/admin_user_list.html:50 @@ -498,7 +498,7 @@ msgstr "创建远程应用" #: applications/templates/applications/remote_app_list.html:24 #: applications/templates/applications/user_remote_app_list.html:20 -#: assets/models/cmd_filter.py:54 +#: assets/models/cmd_filter.py:55 #: assets/templates/assets/_asset_user_list.html:25 #: assets/templates/assets/admin_user_list.html:51 #: assets/templates/assets/asset_list.html:100 @@ -568,11 +568,15 @@ msgstr "我的远程应用" msgid "You can't update the root node name" msgstr "不能修改根节点名称" -#: assets/api/node.py:266 +#: assets/api/node.py:65 +msgid "Deletion failed and the node contains children or assets" +msgstr "删除失败,节点包含子节点或资产" + +#: assets/api/node.py:276 msgid "Update node asset hardware information: {}" msgstr "更新节点资产硬件信息: {}" -#: assets/api/node.py:280 +#: assets/api/node.py:290 msgid "Test if the assets under the node are connectable: {}" msgstr "测试节点下资产是否可连接: {}" @@ -745,7 +749,7 @@ msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥" msgid "Password and private key file must be input one" msgstr "密码和私钥, 必须输入一个" -#: assets/forms/user.py:97 assets/models/cmd_filter.py:31 +#: assets/forms/user.py:97 assets/models/cmd_filter.py:32 #: assets/models/user.py:118 assets/templates/assets/_system_user.html:66 #: assets/templates/assets/system_user_detail.html:165 msgid "Command filter" @@ -828,7 +832,7 @@ msgid "Platform" msgstr "系统平台" #: assets/models/asset.py:146 assets/models/authbook.py:27 -#: assets/models/cmd_filter.py:21 assets/models/domain.py:54 +#: assets/models/cmd_filter.py:22 assets/models/domain.py:54 #: assets/models/label.py:22 assets/templates/assets/asset_detail.html:112 msgid "Is active" msgstr "激活" @@ -994,11 +998,11 @@ msgstr "北京电信" msgid "BGP full netcom" msgstr "BGP全网通" -#: assets/models/cmd_filter.py:38 +#: assets/models/cmd_filter.py:39 msgid "Regex" msgstr "正则表达式" -#: assets/models/cmd_filter.py:39 ops/models/command.py:21 +#: assets/models/cmd_filter.py:40 ops/models/command.py:21 #: ops/templates/ops/command_execution_list.html:64 terminal/models.py:163 #: terminal/templates/terminal/command_list.html:28 #: terminal/templates/terminal/command_list.html:68 @@ -1007,19 +1011,19 @@ msgstr "正则表达式" msgid "Command" msgstr "命令" -#: assets/models/cmd_filter.py:44 +#: assets/models/cmd_filter.py:45 msgid "Deny" msgstr "拒绝" -#: assets/models/cmd_filter.py:45 +#: assets/models/cmd_filter.py:46 msgid "Allow" msgstr "允许" -#: assets/models/cmd_filter.py:49 +#: assets/models/cmd_filter.py:50 msgid "Filter" msgstr "过滤器" -#: assets/models/cmd_filter.py:50 +#: assets/models/cmd_filter.py:51 #: assets/templates/assets/cmd_filter_rule_list.html:58 #: audits/templates/audits/login_log_list.html:58 #: perms/templates/perms/remote_app_permission_remote_app.html:54 @@ -1030,26 +1034,26 @@ msgstr "过滤器" msgid "Type" msgstr "类型" -#: assets/models/cmd_filter.py:51 assets/models/user.py:112 +#: assets/models/cmd_filter.py:52 assets/models/user.py:112 #: assets/templates/assets/cmd_filter_rule_list.html:60 msgid "Priority" msgstr "优先级" -#: assets/models/cmd_filter.py:51 +#: assets/models/cmd_filter.py:52 msgid "1-100, the higher will be match first" msgstr "优先级可选范围为1-100,1最低优先级,100最高优先级" -#: assets/models/cmd_filter.py:53 +#: assets/models/cmd_filter.py:54 #: assets/templates/assets/cmd_filter_rule_list.html:59 #: xpack/plugins/license/models.py:29 msgid "Content" msgstr "内容" -#: assets/models/cmd_filter.py:53 +#: assets/models/cmd_filter.py:54 msgid "One line one command" msgstr "每行一个命令" -#: assets/models/cmd_filter.py:64 +#: assets/models/cmd_filter.py:63 msgid "Command filter rule" msgstr "命令过滤规则" @@ -1208,16 +1212,16 @@ msgstr "系统用户" msgid "%(value)s is not an even number" msgstr "%(value)s is not an even number" -#: assets/models/utils.py:43 assets/tasks/const.py:81 +#: assets/models/utils.py:43 assets/tasks/const.py:84 msgid "Unreachable" msgstr "不可达" -#: assets/models/utils.py:44 assets/tasks/const.py:82 +#: assets/models/utils.py:44 assets/tasks/const.py:85 #: assets/templates/assets/asset_list.html:99 msgid "Reachable" msgstr "可连接" -#: assets/models/utils.py:45 assets/tasks/const.py:83 +#: assets/models/utils.py:45 assets/tasks/const.py:86 #: authentication/utils.py:13 xpack/plugins/license/models.py:78 msgid "Unknown" msgstr "未知" @@ -1424,6 +1428,7 @@ msgstr "资产列表" #: assets/templates/assets/_asset_list_modal.html:33 #: assets/templates/assets/_node_tree.html:40 #: ops/templates/ops/command_execution_create.html:49 +#: ops/templates/ops/command_execution_create.html:143 #: users/templates/users/_granted_assets.html:7 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:66 msgid "Loading" @@ -1639,7 +1644,7 @@ msgstr "选择节点" #: assets/templates/assets/system_user_list.html:139 #: authentication/templates/authentication/_mfa_confirm_modal.html:20 #: settings/templates/settings/terminal_setting.html:168 -#: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:108 +#: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:112 #: users/templates/users/user_detail.html:394 #: users/templates/users/user_detail.html:420 #: users/templates/users/user_detail.html:443 @@ -1720,7 +1725,7 @@ msgstr "资产用户" #: assets/templates/assets/asset_asset_user_list.html:47 #: assets/templates/assets/asset_detail.html:144 -#: terminal/templates/terminal/session_detail.html:81 +#: terminal/templates/terminal/session_detail.html:85 #: users/templates/users/user_detail.html:140 #: users/templates/users/user_profile.html:150 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:128 @@ -2984,38 +2989,38 @@ msgid "Task log" msgstr "任务列表" #: ops/templates/ops/command_execution_create.html:90 -#: terminal/templates/terminal/session_detail.html:91 -#: terminal/templates/terminal/session_detail.html:100 +#: terminal/templates/terminal/session_detail.html:95 +#: terminal/templates/terminal/session_detail.html:104 msgid "Go" msgstr "" -#: ops/templates/ops/command_execution_create.html:215 +#: ops/templates/ops/command_execution_create.html:216 msgid "Selected assets" msgstr "已选择资产" -#: ops/templates/ops/command_execution_create.html:218 +#: ops/templates/ops/command_execution_create.html:219 msgid "In total" msgstr "总共" -#: ops/templates/ops/command_execution_create.html:254 +#: ops/templates/ops/command_execution_create.html:256 msgid "" "Select the left asset, select the running system user, execute command in " "batch" msgstr "选择左侧资产, 选择运行的系统用户,批量执行命令" -#: ops/templates/ops/command_execution_create.html:275 +#: ops/templates/ops/command_execution_create.html:299 msgid "Unselected assets" msgstr "没有选中资产" -#: ops/templates/ops/command_execution_create.html:279 +#: ops/templates/ops/command_execution_create.html:303 msgid "No input command" msgstr "没有输入命令" -#: ops/templates/ops/command_execution_create.html:283 +#: ops/templates/ops/command_execution_create.html:307 msgid "No system user was selected" msgstr "没有选择系统用户" -#: ops/templates/ops/command_execution_create.html:328 +#: ops/templates/ops/command_execution_create.html:317 msgid "Pending" msgstr "等待" @@ -3394,21 +3399,21 @@ msgstr "连接LDAP成功" msgid "Match {} s users" msgstr "匹配 {} 个用户" -#: settings/api.py:163 +#: settings/api.py:151 msgid "succeed: {} failed: {} total: {}" msgstr "成功:{} 失败:{} 总数:{}" -#: settings/api.py:185 settings/api.py:221 +#: settings/api.py:173 settings/api.py:209 msgid "" "Error: Account invalid (Please make sure the information such as Access key " "or Secret key is correct)" msgstr "错误:账户无效 (请确保 Access key 或 Secret key 等信息正确)" -#: settings/api.py:191 settings/api.py:227 +#: settings/api.py:179 settings/api.py:215 msgid "Create succeed" msgstr "创建成功" -#: settings/api.py:209 settings/api.py:247 +#: settings/api.py:197 settings/api.py:235 #: settings/templates/settings/terminal_setting.html:154 msgid "Delete succeed" msgstr "删除成功" @@ -3923,11 +3928,11 @@ msgstr "删除失败" msgid "Are you sure about deleting it?" msgstr "您确定删除吗?" -#: settings/utils.py:91 +#: settings/utils.py:98 msgid "Search no entry matched in ou {}" msgstr "在ou:{}中没有匹配条目" -#: settings/utils.py:146 +#: settings/utils.py:172 msgid "The user source is not LDAP" msgstr "用户来源不是LDAP" @@ -4404,7 +4409,7 @@ msgstr "参数" msgid "Export command" msgstr "导出命令" -#: terminal/templates/terminal/command_list.html:191 +#: terminal/templates/terminal/command_list.html:205 msgid "Goto" msgstr "转到" @@ -4418,19 +4423,19 @@ msgstr "会话详情" msgid "Command list" msgstr "命令记录列表" -#: terminal/templates/terminal/session_detail.html:63 +#: terminal/templates/terminal/session_detail.html:67 msgid "There is no command about this session" msgstr "该会话没有命令记录" -#: terminal/templates/terminal/session_detail.html:88 +#: terminal/templates/terminal/session_detail.html:92 msgid "Replay session" msgstr "回放会话" -#: terminal/templates/terminal/session_detail.html:97 +#: terminal/templates/terminal/session_detail.html:101 msgid "Monitor session" msgstr "监控" -#: terminal/templates/terminal/session_detail.html:105 +#: terminal/templates/terminal/session_detail.html:109 msgid "Terminate session" msgstr "终止会话" From 7ff6391801da757019fa2c94562a6f301d2bf007 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Thu, 10 Oct 2019 16:59:57 +0800 Subject: [PATCH 2/9] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=8A=82=E7=82=B9=20API=20=E8=BF=94=E5=9B=9E=E7=9A=84?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/api/node.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index fbdebabc5..a48d5f00d 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -62,11 +62,8 @@ class NodeViewSet(OrgModelViewSet): def destroy(self, request, *args, **kwargs): node = self.get_object() if node.has_children_or_contains_assets(): - msg = _("Deletion failed " - "and the node contains children or assets") - return Response( - data={'msg': msg}, status=status.HTTP_500_INTERNAL_SERVER_ERROR - ) + msg = _("Deletion failed and the node contains children or assets") + return Response(data={'msg': msg}, status=status.HTTP_403_FORBIDDEN) return super().destroy(request, *args, **kwargs) From dfedfc7e7a7be168e0e9e7941e9f3e8452244277 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Thu, 10 Oct 2019 17:53:22 +0800 Subject: [PATCH 3/9] =?UTF-8?q?[Update]=20LDAP=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE=E9=A1=B9?= =?UTF-8?q?=EF=BC=9A=E5=8F=AA=E6=9C=89=E5=9C=A8=E7=94=A8=E6=88=B7=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E4=B8=AD=E7=9A=84=E7=94=A8=E6=88=B7=E4=BC=9A=E8=A2=AB?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/backends/ldap.py | 7 +++++++ apps/jumpserver/conf.py | 1 + apps/jumpserver/settings.py | 1 + 3 files changed, 9 insertions(+) diff --git a/apps/authentication/backends/ldap.py b/apps/authentication/backends/ldap.py index 9dd151561..07ec0f375 100644 --- a/apps/authentication/backends/ldap.py +++ b/apps/authentication/backends/ldap.py @@ -32,6 +32,13 @@ class LDAPAuthorizationBackend(LDAPBackend): if not username: logger.info('Authenticate failed: username is None') return None + if settings.AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: + user_model = self.get_user_model() + exist = user_model.objects.filter(username=username).exists() + if not exist: + msg = 'Authentication failed: user ({}) is not in the user list' + logger.info(msg.format(username)) + return None ldap_user = LDAPUser(self, username=username.strip(), request=request) user = self.authenticate_ldap_user(ldap_user, password) logger.info('Authenticate user: {}'.format(user)) diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 9825eaece..0df26d149 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -378,6 +378,7 @@ defaults = { 'AUTH_LDAP_SYNC_IS_PERIODIC': False, 'AUTH_LDAP_SYNC_INTERVAL': None, 'AUTH_LDAP_SYNC_CRONTAB': None, + 'AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS': False, 'HTTP_BIND_HOST': '0.0.0.0', 'HTTP_LISTEN_PORT': 8080, 'WS_LISTEN_PORT': 8070, diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index b0db8dbab..6088358f1 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -429,6 +429,7 @@ AUTH_LDAP_SEARCH_PAGED_SIZE = CONFIG.AUTH_LDAP_SEARCH_PAGED_SIZE AUTH_LDAP_SYNC_IS_PERIODIC = CONFIG.AUTH_LDAP_SYNC_IS_PERIODIC AUTH_LDAP_SYNC_INTERVAL = CONFIG.AUTH_LDAP_SYNC_INTERVAL AUTH_LDAP_SYNC_CRONTAB = CONFIG.AUTH_LDAP_SYNC_CRONTAB +AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS = CONFIG.AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS AUTH_LDAP_SERVER_URI = 'ldap://localhost:389' AUTH_LDAP_BIND_DN = 'cn=admin,dc=jumpserver,dc=org' From d1dc3342a24c1ac581a1181f898e1217863d9d8d Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Thu, 10 Oct 2019 18:04:31 +0800 Subject: [PATCH 4/9] =?UTF-8?q?[Update]=20=E9=85=8D=E7=BD=AE=E9=A1=B9=20AU?= =?UTF-8?q?TH=5FLDAP=5FUSER=5FLOGIN=5FONLY=5FIN=5FUSERS=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=88=B0=20config=5Fexample.yml=20=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config_example.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/config_example.yml b/config_example.yml index 911e7b8ee..786de3257 100644 --- a/config_example.yml +++ b/config_example.yml @@ -72,13 +72,18 @@ REDIS_PORT: 6379 # RADIUS_PORT: 1812 # RADIUS_SECRET: -# LDAP/AD 设置定时同步参数 +# LDAP/AD settings +# 定时同步用户 # 启用/禁用 # AUTH_LDAP_SYNC_IS_PERIODIC: True # 单位: 时 # AUTH_LDAP_SYNC_INTERVAL: 12 # Crontab 表达式 # AUTH_LDAP_SYNC_CRONTAB: * 6 * * * +# +# LDAP 用户登录时仅允许在用户列表中的用户执行 LDAP Server 认证 +# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False + # OTP settings # OTP/MFA 配置 From 7574966ccf8896b55eb3af07863d8d506fde4d53 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Fri, 11 Oct 2019 11:22:11 +0800 Subject: [PATCH 5/9] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E5=A4=8D=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E7=AE=A1=E7=90=86=E5=91=98=E5=9C=A8=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=EF=BC=88=E5=88=A0=E9=99=A4/=E6=9B=B4=E6=96=B0=EF=BC=89?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/templates/assets/asset_detail.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/assets/templates/assets/asset_detail.html b/apps/assets/templates/assets/asset_detail.html index 221818d2d..b0d35f382 100644 --- a/apps/assets/templates/assets/asset_detail.html +++ b/apps/assets/templates/assets/asset_detail.html @@ -22,7 +22,6 @@
  • {% trans 'Asset user list' %}
  • - {% if user.is_superuser %}
  • {% trans 'Update' %}
  • @@ -31,7 +30,6 @@ {% trans 'Delete' %} - {% endif %}
    From 70713af95a2bb330650ce11c63c18a31ac66a01a Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 12 Oct 2019 16:51:09 +0800 Subject: [PATCH 6/9] =?UTF-8?q?[Update]=20=E9=99=90=E5=88=B6=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=90=8D=E7=A7=B0=E4=B8=AD=E4=BD=BF=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/const.py | 14 ++++++++++++++ apps/assets/forms/asset.py | 9 +++------ apps/assets/serializers/asset.py | 8 ++++++-- apps/orgs/serializers.py | 15 ++++++++++++++- 4 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 apps/assets/const.py diff --git a/apps/assets/const.py b/apps/assets/const.py new file mode 100644 index 000000000..c23b700ba --- /dev/null +++ b/apps/assets/const.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# + +from django.utils.translation import ugettext_lazy as _ + + +GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT = _( + 'Only Numbers、letters、 chinese and characters ( {} ) are allowed' +).format(" ".join(['.', '_', '@', '-'])) + +GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN = r"^[\._@\w-]+$" + +GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG = \ + _("* The contains characters that are not allowed") diff --git a/apps/assets/forms/asset.py b/apps/assets/forms/asset.py index d83172373..d3d64d602 100644 --- a/apps/assets/forms/asset.py +++ b/apps/assets/forms/asset.py @@ -7,6 +7,7 @@ from common.utils import get_logger from orgs.mixins.forms import OrgModelForm from ..models import Asset, Node +from ..const import GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT logger = get_logger(__file__) @@ -14,10 +15,6 @@ __all__ = [ 'AssetCreateForm', 'AssetUpdateForm', 'AssetBulkUpdateForm', 'ProtocolForm', ] -HELP_TEXTS_ASSET_HOSTNAME = _( - 'Only Numbers、letters、 chinese and characters ( {} ) are allowed' -).format(" ".join(['.', '_', '@'])) - class ProtocolForm(forms.Form): name = forms.ChoiceField( @@ -72,7 +69,7 @@ class AssetCreateForm(OrgModelForm): 'nodes': _("Node"), } help_texts = { - 'hostname': HELP_TEXTS_ASSET_HOSTNAME, + 'hostname': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'admin_user': _( 'root or other NOPASSWD sudo privilege user existed in asset,' 'If asset is windows or other set any one, more see admin user left menu' @@ -119,7 +116,7 @@ class AssetUpdateForm(OrgModelForm): 'nodes': _("Node"), } help_texts = { - 'hostname': HELP_TEXTS_ASSET_HOSTNAME, + 'hostname': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'admin_user': _( 'root or other NOPASSWD sudo privilege user existed in asset,' 'If asset is windows or other set any one, more see admin user left menu' diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index c53b3057d..529ee1fde 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -8,6 +8,10 @@ from django.utils.translation import ugettext_lazy as _ from orgs.mixins.serializers import BulkOrgResourceModelSerializer from common.serializers import AdaptedBulkListSerializer from ..models import Asset, Node, Label +from ..const import ( + GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, + GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG +) from .base import ConnectivitySerializer __all__ = [ @@ -94,10 +98,10 @@ class AssetSerializer(BulkOrgResourceModelSerializer): @staticmethod def validate_hostname(hostname): - pattern = r"^[\._@\w-]+$" + pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN res = re.match(pattern, hostname) if res is None: - msg = _("* The hostname contains characters that are not allowed") + msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG raise serializers.ValidationError(msg) return hostname diff --git a/apps/orgs/serializers.py b/apps/orgs/serializers.py index 222598c88..8f4df1e10 100644 --- a/apps/orgs/serializers.py +++ b/apps/orgs/serializers.py @@ -1,9 +1,13 @@ +import re from rest_framework.serializers import ModelSerializer from rest_framework import serializers - from users.models import User, UserGroup from assets.models import Asset, Domain, AdminUser, SystemUser, Label +from assets.const import ( + GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, + GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG +) from perms.models import AssetPermission from common.serializers import AdaptedBulkListSerializer from .utils import set_current_org, get_current_org @@ -18,6 +22,15 @@ class OrgSerializer(ModelSerializer): fields = '__all__' read_only_fields = ['created_by', 'date_created'] + @staticmethod + def validate_name(name): + pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN + res = re.match(pattern, name) + if res is None: + msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG + raise serializers.ValidationError(msg) + return name + class OrgReadSerializer(ModelSerializer): admins = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True) From 21b17ca41a27e7350f14ef99fac774ae74007024 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 12 Oct 2019 17:05:49 +0800 Subject: [PATCH 7/9] =?UTF-8?q?[Update]=20=E7=B3=BB=E7=BB=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=20name=20=E9=99=90=E5=88=B6=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/forms/user.py | 2 ++ apps/assets/serializers/system_user.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/apps/assets/forms/user.py b/apps/assets/forms/user.py index 3d67b434b..b50639684 100644 --- a/apps/assets/forms/user.py +++ b/apps/assets/forms/user.py @@ -6,6 +6,7 @@ from django.utils.translation import gettext_lazy as _ from common.utils import validate_ssh_private_key, ssh_pubkey_gen, get_logger from orgs.mixins.forms import OrgModelForm from ..models import AdminUser, SystemUser +from ..const import GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT logger = get_logger(__file__) __all__ = [ @@ -98,6 +99,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm): }), } help_texts = { + 'name': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'auto_push': _('Auto push system user to asset'), 'priority': _('1-100, High level will be using login asset as default, ' 'if user was granted more than 2 system user'), diff --git a/apps/assets/serializers/system_user.py b/apps/assets/serializers/system_user.py index eea93360b..3194f2fb6 100644 --- a/apps/assets/serializers/system_user.py +++ b/apps/assets/serializers/system_user.py @@ -1,3 +1,4 @@ +import re from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ @@ -6,6 +7,10 @@ from common.serializers import AdaptedBulkListSerializer from common.utils import ssh_pubkey_gen from orgs.mixins.serializers import BulkOrgResourceModelSerializer from ..models import SystemUser +from ..const import ( + GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, + GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG +) from .base import AuthSerializer, AuthSerializerMixin @@ -33,6 +38,15 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): 'created_by': {'read_only': True}, } + @staticmethod + def validate_name(name): + pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN + res = re.match(pattern, name) + if res is None: + msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG + raise serializers.ValidationError(msg) + return name + def validate_auto_push(self, value): login_mode = self.initial_data.get("login_mode") protocol = self.initial_data.get("protocol") From 1f5cdc3fa4fbef10b3b18b91ba388aafa339db53 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 12 Oct 2019 17:42:00 +0800 Subject: [PATCH 8/9] =?UTF-8?q?[Update]=20=E6=B7=BB=E5=8A=A0=E7=BF=BB?= =?UTF-8?q?=E8=AF=91:=20=E9=99=90=E5=88=B6=20=E7=BB=84=E7=BB=87/=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=94=A8=E6=88=B7=E5=90=8D=E7=A7=B0=20=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 80897 -> 80879 bytes apps/locale/zh/LC_MESSAGES/django.po | 148 +++++++++++++-------------- 2 files changed, 74 insertions(+), 74 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 39c1b8257bb75983e7d5bd0eddbdf40b1b569cd8..ba94e9337bd2917e6fbac71fab2a260cd7be3116 100644 GIT binary patch delta 17552 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 C+Q-QN delta 17570 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\n" "Language-Team: Jumpserver team\n" @@ -78,7 +78,7 @@ msgstr "运行参数" #: assets/forms/domain.py:15 assets/forms/label.py:13 #: assets/models/asset.py:295 assets/models/authbook.py:24 #: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:32 -#: assets/serializers/asset_user.py:82 assets/serializers/system_user.py:31 +#: assets/serializers/asset_user.py:82 assets/serializers/system_user.py:36 #: assets/templates/assets/admin_user_list.html:46 #: assets/templates/assets/domain_detail.html:60 #: assets/templates/assets/domain_list.html:26 @@ -112,8 +112,8 @@ msgstr "资产" #: applications/templates/applications/remote_app_detail.html:53 #: applications/templates/applications/remote_app_list.html:20 #: applications/templates/applications/user_remote_app_list.html:16 -#: assets/forms/asset.py:24 assets/forms/domain.py:73 assets/forms/user.py:74 -#: assets/forms/user.py:94 assets/models/base.py:28 assets/models/cluster.py:18 +#: assets/forms/asset.py:21 assets/forms/domain.py:73 assets/forms/user.py:75 +#: assets/forms/user.py:95 assets/models/base.py:28 assets/models/cluster.py:18 #: assets/models/cmd_filter.py:21 assets/models/domain.py:20 #: assets/models/group.py:20 assets/models/label.py:18 #: assets/templates/assets/admin_user_detail.html:56 @@ -189,7 +189,7 @@ msgstr "参数" #: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 #: assets/models/cmd_filter.py:59 assets/models/group.py:21 #: assets/templates/assets/admin_user_detail.html:68 -#: assets/templates/assets/asset_detail.html:124 +#: assets/templates/assets/asset_detail.html:122 #: assets/templates/assets/cmd_filter_detail.html:77 #: assets/templates/assets/domain_detail.html:72 #: assets/templates/assets/system_user_detail.html:100 @@ -243,7 +243,7 @@ msgstr "创建日期" #: assets/models/domain.py:53 assets/models/group.py:23 #: assets/models/label.py:23 assets/templates/assets/admin_user_detail.html:72 #: assets/templates/assets/admin_user_list.html:50 -#: assets/templates/assets/asset_detail.html:132 +#: assets/templates/assets/asset_detail.html:130 #: assets/templates/assets/cmd_filter_detail.html:65 #: assets/templates/assets/cmd_filter_list.html:27 #: assets/templates/assets/cmd_filter_rule_list.html:62 @@ -394,7 +394,7 @@ msgstr "详情" #: assets/templates/assets/admin_user_detail.html:24 #: assets/templates/assets/admin_user_list.html:26 #: assets/templates/assets/admin_user_list.html:111 -#: assets/templates/assets/asset_detail.html:27 +#: assets/templates/assets/asset_detail.html:26 #: assets/templates/assets/asset_list.html:78 #: assets/templates/assets/asset_list.html:167 #: assets/templates/assets/cmd_filter_detail.html:29 @@ -440,7 +440,7 @@ msgstr "更新" #: applications/templates/applications/remote_app_list.html:55 #: assets/templates/assets/admin_user_detail.html:28 #: assets/templates/assets/admin_user_list.html:112 -#: assets/templates/assets/asset_detail.html:31 +#: assets/templates/assets/asset_detail.html:30 #: assets/templates/assets/asset_list.html:168 #: assets/templates/assets/cmd_filter_detail.html:33 #: assets/templates/assets/cmd_filter_list.html:59 @@ -572,28 +572,32 @@ msgstr "不能修改根节点名称" msgid "Deletion failed and the node contains children or assets" msgstr "删除失败,节点包含子节点或资产" -#: assets/api/node.py:276 +#: assets/api/node.py:273 msgid "Update node asset hardware information: {}" msgstr "更新节点资产硬件信息: {}" -#: assets/api/node.py:290 +#: assets/api/node.py:287 msgid "Test if the assets under the node are connectable: {}" msgstr "测试节点下资产是否可连接: {}" -#: assets/forms/asset.py:18 +#: assets/const.py:8 msgid "Only Numbers、letters、 chinese and characters ( {} ) are allowed" msgstr "只允许包含数字、字母、中文和特殊字符( {} )" -#: assets/forms/asset.py:28 assets/models/asset.py:140 +#: assets/const.py:14 +msgid "* The contains characters that are not allowed" +msgstr "* 包含不被允许的字符" + +#: assets/forms/asset.py:25 assets/models/asset.py:140 #: assets/models/domain.py:50 #: assets/templates/assets/domain_gateway_list.html:69 #: settings/templates/settings/replay_storage_create.html:59 msgid "Port" msgstr "端口" -#: assets/forms/asset.py:59 assets/models/asset.py:145 -#: assets/models/user.py:110 assets/templates/assets/asset_detail.html:190 -#: assets/templates/assets/asset_detail.html:198 +#: assets/forms/asset.py:56 assets/models/asset.py:145 +#: assets/models/user.py:110 assets/templates/assets/asset_detail.html:188 +#: assets/templates/assets/asset_detail.html:196 #: assets/templates/assets/system_user_assets.html:83 #: perms/models/asset_permission.py:81 #: xpack/plugins/change_auth_plan/models.py:74 @@ -602,16 +606,16 @@ msgstr "端口" msgid "Nodes" msgstr "节点" -#: assets/forms/asset.py:62 assets/forms/asset.py:109 +#: assets/forms/asset.py:59 assets/forms/asset.py:106 #: assets/models/asset.py:149 assets/models/cluster.py:19 -#: assets/models/user.py:68 assets/templates/assets/asset_detail.html:76 +#: assets/models/user.py:68 assets/templates/assets/asset_detail.html:74 #: templates/_nav.html:44 xpack/plugins/cloud/models.py:161 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:68 #: xpack/plugins/orgs/templates/orgs/org_list.html:19 msgid "Admin user" msgstr "管理用户" -#: assets/forms/asset.py:65 assets/forms/asset.py:112 assets/forms/asset.py:152 +#: assets/forms/asset.py:62 assets/forms/asset.py:109 assets/forms/asset.py:149 #: assets/templates/assets/asset_create.html:48 #: assets/templates/assets/asset_create.html:50 #: assets/templates/assets/asset_list.html:85 @@ -619,16 +623,16 @@ msgstr "管理用户" msgid "Label" msgstr "标签" -#: assets/forms/asset.py:68 assets/forms/asset.py:115 +#: assets/forms/asset.py:65 assets/forms/asset.py:112 #: assets/models/asset.py:144 assets/models/domain.py:26 -#: assets/models/domain.py:52 assets/templates/assets/asset_detail.html:80 +#: assets/models/domain.py:52 assets/templates/assets/asset_detail.html:78 #: assets/templates/assets/user_asset_list.html:53 #: xpack/plugins/orgs/templates/orgs/org_list.html:18 msgid "Domain" msgstr "网域" -#: assets/forms/asset.py:72 assets/forms/asset.py:106 assets/forms/asset.py:119 -#: assets/forms/asset.py:155 assets/models/node.py:409 +#: assets/forms/asset.py:69 assets/forms/asset.py:103 assets/forms/asset.py:116 +#: assets/forms/asset.py:152 assets/models/node.py:409 #: assets/templates/assets/asset_create.html:42 #: perms/forms/asset_permission.py:83 perms/forms/asset_permission.py:90 #: perms/templates/perms/asset_permission_list.html:53 @@ -643,7 +647,7 @@ msgstr "网域" msgid "Node" msgstr "节点" -#: assets/forms/asset.py:77 assets/forms/asset.py:124 +#: assets/forms/asset.py:74 assets/forms/asset.py:121 msgid "" "root or other NOPASSWD sudo privilege user existed in asset,If asset is " "windows or other set any one, more see admin user left menu" @@ -651,16 +655,16 @@ msgstr "" "root或其他拥有NOPASSWD: ALL权限的用户, 如果是windows或其它硬件可以随意设置一" "个, 更多信息查看左侧 `管理用户` 菜单" -#: assets/forms/asset.py:80 assets/forms/asset.py:127 +#: assets/forms/asset.py:77 assets/forms/asset.py:124 msgid "Windows 2016 RDP protocol is different, If is window 2016, set it" msgstr "Windows 2016的RDP协议与之前不同,如果是请设置" -#: assets/forms/asset.py:81 assets/forms/asset.py:128 +#: assets/forms/asset.py:78 assets/forms/asset.py:125 msgid "" "If your have some network not connect with each other, you can set domain" msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,使用网域网关跳转登录" -#: assets/forms/asset.py:135 assets/forms/asset.py:139 +#: assets/forms/asset.py:132 assets/forms/asset.py:136 #: assets/forms/domain.py:17 assets/forms/label.py:15 #: perms/templates/perms/asset_permission_asset.html:78 #: xpack/plugins/change_auth_plan/forms.py:55 @@ -680,7 +684,7 @@ msgstr "不能包含特殊字符" msgid "SSH gateway support proxy SSH,RDP,VNC" msgstr "SSH网关,支持代理SSH,RDP和VNC" -#: assets/forms/domain.py:74 assets/forms/user.py:75 assets/forms/user.py:95 +#: assets/forms/domain.py:74 assets/forms/user.py:76 assets/forms/user.py:96 #: assets/models/base.py:29 assets/models/gathered_user.py:16 #: assets/templates/assets/_asset_user_auth_update_modal.html:15 #: assets/templates/assets/_asset_user_auth_view_modal.html:21 @@ -712,11 +716,11 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC" msgid "Username" msgstr "用户名" -#: assets/forms/user.py:25 +#: assets/forms/user.py:26 msgid "Password or private key passphrase" msgstr "密码或密钥密码" -#: assets/forms/user.py:26 assets/models/base.py:30 +#: assets/forms/user.py:27 assets/models/base.py:30 #: assets/serializers/asset_user.py:63 #: assets/templates/assets/_asset_user_auth_update_modal.html:21 #: assets/templates/assets/_asset_user_auth_view_modal.html:27 @@ -735,31 +739,31 @@ msgstr "密码或密钥密码" msgid "Password" msgstr "密码" -#: assets/forms/user.py:29 assets/serializers/asset_user.py:71 +#: assets/forms/user.py:30 assets/serializers/asset_user.py:71 #: assets/templates/assets/_asset_user_auth_update_modal.html:27 #: users/models/user.py:400 msgid "Private key" msgstr "ssh私钥" -#: assets/forms/user.py:41 +#: assets/forms/user.py:42 msgid "Invalid private key, Only support RSA/DSA format key" msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥" -#: assets/forms/user.py:52 +#: assets/forms/user.py:53 msgid "Password and private key file must be input one" msgstr "密码和私钥, 必须输入一个" -#: assets/forms/user.py:97 assets/models/cmd_filter.py:32 +#: assets/forms/user.py:98 assets/models/cmd_filter.py:32 #: assets/models/user.py:118 assets/templates/assets/_system_user.html:66 #: assets/templates/assets/system_user_detail.html:165 msgid "Command filter" msgstr "命令过滤器" -#: assets/forms/user.py:101 +#: assets/forms/user.py:103 msgid "Auto push system user to asset" msgstr "自动推送系统用户到资产" -#: assets/forms/user.py:102 +#: assets/forms/user.py:104 msgid "" "1-100, High level will be using login asset as default, if user was granted " "more than 2 system user" @@ -767,13 +771,13 @@ msgstr "" "1-100, 1最低优先级,100最高优先级。授权多个用户时,高优先级的系统用户将会作为" "默认登录用户" -#: assets/forms/user.py:104 +#: assets/forms/user.py:106 msgid "" "If you choose manual login mode, you do not need to fill in the username and " "password." msgstr "如果选择手动登录模式,用户名和密码可以不填写" -#: assets/forms/user.py:106 +#: assets/forms/user.py:108 msgid "Use comma split multi command, ex: /bin/whoami,/bin/ifconfig" msgstr "使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig" @@ -781,7 +785,7 @@ msgstr "使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig" #: assets/serializers/asset_user.py:28 #: assets/templates/assets/_asset_list_modal.html:47 #: assets/templates/assets/_asset_user_list.html:20 -#: assets/templates/assets/asset_detail.html:64 +#: assets/templates/assets/asset_detail.html:62 #: assets/templates/assets/asset_list.html:97 #: assets/templates/assets/domain_gateway_list.html:68 #: assets/templates/assets/user_asset_list.html:49 @@ -799,7 +803,7 @@ msgstr "IP" #: assets/templates/assets/_asset_user_auth_update_modal.html:9 #: assets/templates/assets/_asset_user_auth_view_modal.html:15 #: assets/templates/assets/_asset_user_list.html:19 -#: assets/templates/assets/asset_detail.html:60 +#: assets/templates/assets/asset_detail.html:58 #: assets/templates/assets/asset_list.html:96 #: assets/templates/assets/user_asset_list.html:48 #: perms/templates/perms/asset_permission_asset.html:57 @@ -811,7 +815,7 @@ msgid "Hostname" msgstr "主机名" #: assets/models/asset.py:139 assets/models/domain.py:51 -#: assets/models/user.py:113 assets/templates/assets/asset_detail.html:72 +#: assets/models/user.py:113 assets/templates/assets/asset_detail.html:70 #: assets/templates/assets/domain_gateway_list.html:70 #: assets/templates/assets/system_user_detail.html:70 #: assets/templates/assets/system_user_list.html:53 @@ -819,41 +823,41 @@ msgstr "主机名" msgid "Protocol" msgstr "协议" -#: assets/models/asset.py:142 assets/serializers/asset.py:64 +#: assets/models/asset.py:142 assets/serializers/asset.py:68 #: assets/templates/assets/asset_create.html:24 #: assets/templates/assets/user_asset_list.html:50 #: perms/serializers/user_permission.py:48 msgid "Protocols" msgstr "协议组" -#: assets/models/asset.py:143 assets/templates/assets/asset_detail.html:104 +#: assets/models/asset.py:143 assets/templates/assets/asset_detail.html:102 #: assets/templates/assets/user_asset_list.html:51 msgid "Platform" msgstr "系统平台" #: assets/models/asset.py:146 assets/models/authbook.py:27 #: assets/models/cmd_filter.py:22 assets/models/domain.py:54 -#: assets/models/label.py:22 assets/templates/assets/asset_detail.html:112 +#: assets/models/label.py:22 assets/templates/assets/asset_detail.html:110 msgid "Is active" msgstr "激活" -#: assets/models/asset.py:152 assets/templates/assets/asset_detail.html:68 +#: assets/models/asset.py:152 assets/templates/assets/asset_detail.html:66 msgid "Public IP" msgstr "公网IP" -#: assets/models/asset.py:153 assets/templates/assets/asset_detail.html:120 +#: assets/models/asset.py:153 assets/templates/assets/asset_detail.html:118 msgid "Asset number" msgstr "资产编号" -#: assets/models/asset.py:156 assets/templates/assets/asset_detail.html:84 +#: assets/models/asset.py:156 assets/templates/assets/asset_detail.html:82 msgid "Vendor" msgstr "制造商" -#: assets/models/asset.py:157 assets/templates/assets/asset_detail.html:88 +#: assets/models/asset.py:157 assets/templates/assets/asset_detail.html:86 msgid "Model" msgstr "型号" -#: assets/models/asset.py:158 assets/templates/assets/asset_detail.html:116 +#: assets/models/asset.py:158 assets/templates/assets/asset_detail.html:114 msgid "Serial number" msgstr "序列号" @@ -874,7 +878,7 @@ msgstr "CPU核数" msgid "CPU vcpus" msgstr "CPU总数" -#: assets/models/asset.py:164 assets/templates/assets/asset_detail.html:96 +#: assets/models/asset.py:164 assets/templates/assets/asset_detail.html:94 msgid "Memory" msgstr "内存" @@ -886,7 +890,7 @@ msgstr "硬盘大小" msgid "Disk info" msgstr "硬盘信息" -#: assets/models/asset.py:168 assets/templates/assets/asset_detail.html:108 +#: assets/models/asset.py:168 assets/templates/assets/asset_detail.html:106 msgid "OS" msgstr "操作系统" @@ -903,7 +907,7 @@ msgid "Hostname raw" msgstr "主机名原始" #: assets/models/asset.py:173 assets/templates/assets/asset_create.html:46 -#: assets/templates/assets/asset_detail.html:224 templates/_nav.html:46 +#: assets/templates/assets/asset_detail.html:222 templates/_nav.html:46 msgid "Labels" msgstr "标签管理" @@ -1226,31 +1230,27 @@ msgstr "可连接" msgid "Unknown" msgstr "未知" -#: assets/serializers/asset.py:22 +#: assets/serializers/asset.py:26 msgid "Protocol format should {}/{}" msgstr "协议格式 {}/{}" -#: assets/serializers/asset.py:39 +#: assets/serializers/asset.py:43 msgid "Protocol duplicate: {}" msgstr "协议重复: {}" -#: assets/serializers/asset.py:65 assets/serializers/asset_user.py:29 +#: assets/serializers/asset.py:69 assets/serializers/asset_user.py:29 #: assets/templates/assets/_asset_user_list.html:23 msgid "Connectivity" msgstr "连接" -#: assets/serializers/asset.py:91 +#: assets/serializers/asset.py:95 msgid "Hardware info" msgstr "硬件信息" -#: assets/serializers/asset.py:92 orgs/mixins/serializers.py:27 +#: assets/serializers/asset.py:96 orgs/mixins/serializers.py:27 msgid "Org name" msgstr "组织名称" -#: assets/serializers/asset.py:100 -msgid "* The hostname contains characters that are not allowed" -msgstr "* 主机名包含不被允许的字符" - #: assets/serializers/asset_user.py:31 msgid "Backend" msgstr "后端" @@ -1281,15 +1281,15 @@ msgstr "值" msgid "The same level node name cannot be the same" msgstr "同级别节点名字不能重复" -#: assets/serializers/system_user.py:32 +#: assets/serializers/system_user.py:37 msgid "Login mode display" msgstr "登录模式显示" -#: assets/serializers/system_user.py:67 +#: assets/serializers/system_user.py:81 msgid "* Automatic login mode must fill in the username." msgstr "自动登录模式,必须填写用户名" -#: assets/serializers/system_user.py:78 +#: assets/serializers/system_user.py:92 msgid "Password or private key required" msgstr "密码或密钥密码需要一个" @@ -1448,7 +1448,7 @@ msgid "Please input password" msgstr "请输入密码" #: assets/templates/assets/_asset_user_auth_update_modal.html:68 -#: assets/templates/assets/asset_detail.html:304 +#: assets/templates/assets/asset_detail.html:302 #: users/templates/users/user_detail.html:313 #: users/templates/users/user_detail.html:340 #: xpack/plugins/interface/views.py:35 @@ -1497,7 +1497,7 @@ msgstr "查看" #: assets/templates/assets/_asset_user_list.html:75 #: assets/templates/assets/admin_user_assets.html:61 #: assets/templates/assets/asset_asset_user_list.html:57 -#: assets/templates/assets/asset_detail.html:178 +#: assets/templates/assets/asset_detail.html:176 #: assets/templates/assets/system_user_assets.html:63 #: assets/templates/assets/system_user_detail.html:151 msgid "Test" @@ -1619,7 +1619,7 @@ msgstr "快速更新" #: assets/templates/assets/admin_user_assets.html:58 #: assets/templates/assets/asset_asset_user_list.html:54 -#: assets/templates/assets/asset_detail.html:175 +#: assets/templates/assets/asset_detail.html:173 msgid "Test connective" msgstr "测试可连接性" @@ -1636,7 +1636,7 @@ msgid "Select nodes" msgstr "选择节点" #: assets/templates/assets/admin_user_detail.html:100 -#: assets/templates/assets/asset_detail.html:204 +#: assets/templates/assets/asset_detail.html:202 #: assets/templates/assets/asset_list.html:422 #: assets/templates/assets/cmd_filter_detail.html:106 #: assets/templates/assets/system_user_assets.html:97 @@ -1724,7 +1724,7 @@ msgid "Asset users of" msgstr "资产用户" #: assets/templates/assets/asset_asset_user_list.html:47 -#: assets/templates/assets/asset_detail.html:144 +#: assets/templates/assets/asset_detail.html:142 #: terminal/templates/terminal/session_detail.html:85 #: users/templates/users/user_detail.html:140 #: users/templates/users/user_profile.html:150 @@ -1744,21 +1744,21 @@ msgstr "选择需要修改属性" msgid "Select all" msgstr "全选" -#: assets/templates/assets/asset_detail.html:92 +#: assets/templates/assets/asset_detail.html:90 msgid "CPU" msgstr "CPU" -#: assets/templates/assets/asset_detail.html:100 +#: assets/templates/assets/asset_detail.html:98 msgid "Disk" msgstr "硬盘" -#: assets/templates/assets/asset_detail.html:128 +#: assets/templates/assets/asset_detail.html:126 #: users/templates/users/user_detail.html:115 #: users/templates/users/user_profile.html:106 msgid "Date joined" msgstr "创建日期" -#: assets/templates/assets/asset_detail.html:150 authentication/models.py:15 +#: assets/templates/assets/asset_detail.html:148 authentication/models.py:15 #: authentication/templates/authentication/_access_key_modal.html:32 #: perms/models/base.py:51 #: perms/templates/perms/asset_permission_create_update.html:55 @@ -1772,11 +1772,11 @@ msgstr "创建日期" msgid "Active" msgstr "激活中" -#: assets/templates/assets/asset_detail.html:167 +#: assets/templates/assets/asset_detail.html:165 msgid "Refresh hardware" msgstr "更新硬件信息" -#: assets/templates/assets/asset_detail.html:170 +#: assets/templates/assets/asset_detail.html:168 msgid "Refresh" msgstr "刷新" From b732f4e32c6c9e781e581c27cfc3a6f433249c86 Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 12 Oct 2019 18:00:40 +0800 Subject: [PATCH 9/9] =?UTF-8?q?[Bugfix]=20=E4=BF=AE=E6=94=B9=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=20API=20=E6=97=B6=20Connectivity=20is=20not=20JSON=20serializa?= =?UTF-8?q?ble=20=E7=9A=84=20Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index 529ee1fde..f198aee76 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -140,6 +140,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer): class AssetSimpleSerializer(serializers.ModelSerializer): + connectivity = ConnectivitySerializer(read_only=True, label=_("Connectivity")) class Meta: model = Asset