diff --git a/apps/applications/views/remote_app.py b/apps/applications/views/remote_app.py index dee6d50f2..5576ed3bb 100644 --- a/apps/applications/views/remote_app.py +++ b/apps/applications/views/remote_app.py @@ -28,7 +28,7 @@ class RemoteAppListView(PermissionsMixin, TemplateView): def get_context_data(self, **kwargs): context = { - 'app': _('Assets'), + 'app': _('Applications'), 'action': _('RemoteApp list'), } kwargs.update(context) @@ -44,7 +44,7 @@ class RemoteAppCreateView(PermissionsMixin, SuccessMessageMixin, CreateView): def get_context_data(self, **kwargs): context = { - 'app': _('Assets'), + 'app': _('Applications'), 'action': _('Create RemoteApp'), } kwargs.update(context) @@ -66,7 +66,7 @@ class RemoteAppUpdateView(PermissionsMixin, SuccessMessageMixin, UpdateView): def get_context_data(self, **kwargs): context = { - 'app': _('Assets'), + 'app': _('Applications'), 'action': _('Update RemoteApp'), } kwargs.update(context) @@ -84,7 +84,7 @@ class RemoteAppDetailView(PermissionsMixin, DetailView): def get_context_data(self, **kwargs): context = { - 'app': _('Assets'), + 'app': _('Applications'), 'action': _('RemoteApp detail'), } kwargs.update(context) diff --git a/apps/assets/backends/vault.py b/apps/assets/backends/vault.py index da7583458..d21245247 100644 --- a/apps/assets/backends/vault.py +++ b/apps/assets/backends/vault.py @@ -1,19 +1,11 @@ # -*- coding: utf-8 -*- # -from ..base import BaseBackend +from .base import BaseBackend class VaultBackend(BaseBackend): - @classmethod - def get(cls, username, asset): - pass - @classmethod def filter(cls, username=None, asset=None, latest=True): pass - - @classmethod - def create(cls, **kwargs): - pass diff --git a/apps/assets/models/asset.py b/apps/assets/models/asset.py index 45d4cfe3c..7042340fe 100644 --- a/apps/assets/models/asset.py +++ b/apps/assets/models/asset.py @@ -229,6 +229,8 @@ class Asset(OrgModelMixin): @property def connectivity(self): + if not self.admin_user: + return self.UNKNOWN return self.admin_user.get_connectivity_of(self) @connectivity.setter diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index c66004ba0..77715b351 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -27,8 +27,6 @@ class ProtocolsRelatedField(serializers.RelatedField): return str(value) def to_internal_value(self, data): - print(data) - print(type(data)) if isinstance(data, dict): return data if '/' not in data: @@ -152,7 +150,9 @@ class AssetGrantedSerializer(serializers.ModelSerializer): """ 被授权资产的数据结构 """ - protocols = ProtocolSerializer(many=True) + protocols = ProtocolsRelatedField( + many=True, queryset=Protocol.objects.all(), label=_("Protocols") + ) system_users_granted = AssetSystemUserSerializer(many=True, read_only=True) system_users_join = serializers.SerializerMethodField() # nodes = NodeTMPSerializer(many=True, read_only=True) @@ -160,9 +160,9 @@ class AssetGrantedSerializer(serializers.ModelSerializer): class Meta: model = Asset fields = ( - "id", "hostname", "ip", "protocols", "system_users_granted", - "is_active", "system_users_join", "os", 'domain', - "platform", "comment", "org_id", "org_name", + "id", "hostname", "ip", "protocol", "port", "protocols", + "system_users_granted", "is_active", "system_users_join", "os", + 'domain', "platform", "comment", "org_id", "org_name", ) @staticmethod @@ -187,8 +187,7 @@ class AssetGrantedSerializer(serializers.ModelSerializer): class AssetSimpleSerializer(serializers.ModelSerializer): - protocols = ProtocolSerializer(many=True) class Meta: model = Asset - fields = ['id', 'hostname', 'ip', 'protocols', 'connectivity', 'port'] + fields = ['id', 'hostname', 'ip', 'connectivity', 'port'] diff --git a/apps/assets/tasks.py b/apps/assets/tasks.py index 81fbf5880..149e9fa2c 100644 --- a/apps/assets/tasks.py +++ b/apps/assets/tasks.py @@ -209,9 +209,13 @@ def test_asset_connectivity_util(assets, task_name=None): ) result = task.run() summary = result[1] - results_summary['success'] &= summary['success'] - results_summary['contacted'].update(summary['contacted']) - results_summary['dark'].update(summary['dark']) + success = summary.get('success', False) + contacted = summary.get('contacted', {}) + dark = summary.get('dark', {}) + + results_summary['success'] &= success + results_summary['contacted'].update(contacted) + results_summary['dark'].update(dark) for asset in assets: if asset.hostname in results_summary.get('dark', {}): @@ -330,14 +334,17 @@ def test_system_user_connectivity_util(system_user, assets, task_name): task, created = update_or_create_ansible_task( task_name=task_name, hosts=value['hosts'], tasks=value['tasks'], pattern='all', options=const.TASK_OPTIONS, - run_as=system_user.username, - created_by=system_user.org_id, + run_as=system_user.username, created_by=system_user.org_id, ) result = task.run() summary = result[1] - results_summary['success'] &= summary['success'] - results_summary['contacted'].update(summary['contacted']) - results_summary['dark'].update(summary['dark']) + success = summary.get('success', False) + contacted = summary.get('contacted', {}) + dark = summary.get('dark', {}) + + results_summary['success'] &= success + results_summary['contacted'].update(contacted) + results_summary['dark'].update(dark) set_system_user_connectivity_info(system_user, results_summary) return results_summary diff --git a/apps/audits/views.py b/apps/audits/views.py index cab4f1fbf..8c9b6467d 100644 --- a/apps/audits/views.py +++ b/apps/audits/views.py @@ -248,7 +248,7 @@ class CommandExecutionListView(UserCommandExecutionListView): 'keyword': self.keyword, 'user_id': self.user_id, }) - return super().get_context_data(**context) + return context @method_decorator(csrf_exempt, name='dispatch') diff --git a/apps/common/mixins.py b/apps/common/mixins.py index 694e78d50..b46673cd6 100644 --- a/apps/common/mixins.py +++ b/apps/common/mixins.py @@ -224,7 +224,7 @@ class ApiMessageMixin: def dispatch(self, request, *args, **kwargs): resp = super().dispatch(request, *args, **kwargs) - if request.method.lower() in ("get", "delete"): + if request.method.lower() in ("get", "delete", "patch"): return resp if resp.status_code >= 400: return resp diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 2e7a24b89..c4e24380b 100644 Binary files a/apps/locale/zh/LC_MESSAGES/django.mo and b/apps/locale/zh/LC_MESSAGES/django.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 16eab6dd9..4747d760a 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-06-19 18:16+0800\n" +"POT-Creation-Date: 2019-06-20 17:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -210,7 +210,7 @@ msgstr "参数" #: assets/models/cluster.py:28 assets/models/cmd_filter.py:25 #: assets/models/cmd_filter.py:58 assets/models/group.py:21 #: assets/templates/assets/admin_user_detail.html:68 -#: assets/templates/assets/asset_detail.html:129 +#: assets/templates/assets/asset_detail.html:128 #: assets/templates/assets/cmd_filter_detail.html:77 #: assets/templates/assets/domain_detail.html:72 #: assets/templates/assets/system_user_detail.html:100 @@ -265,7 +265,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:53 -#: assets/templates/assets/asset_detail.html:137 +#: assets/templates/assets/asset_detail.html:136 #: 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 @@ -305,7 +305,7 @@ msgstr "备注" #: perms/templates/perms/remote_app_permission_list.html:17 #: perms/templates/perms/remote_app_permission_remote_app.html:26 #: perms/templates/perms/remote_app_permission_user.html:26 -#: templates/_nav.html:36 templates/_nav.html:48 templates/_nav_user.html:14 +#: templates/_nav.html:36 templates/_nav.html:48 templates/_nav_user.html:16 msgid "RemoteApp" msgstr "远程应用" @@ -558,28 +558,9 @@ msgstr "连接" #: applications/views/remote_app.py:31 applications/views/remote_app.py:47 #: applications/views/remote_app.py:69 applications/views/remote_app.py:87 -#: assets/models/user.py:135 -#: assets/templates/assets/_asset_group_bulk_update_modal.html:11 -#: assets/templates/assets/system_user_asset.html:22 -#: assets/templates/assets/system_user_detail.html:22 -#: assets/views/admin_user.py:30 assets/views/admin_user.py:49 -#: assets/views/admin_user.py:66 assets/views/admin_user.py:82 -#: assets/views/admin_user.py:107 assets/views/asset.py:52 -#: assets/views/asset.py:69 assets/views/asset.py:128 assets/views/asset.py:171 -#: assets/views/asset.py:199 assets/views/asset.py:226 -#: assets/views/cmd_filter.py:31 assets/views/cmd_filter.py:48 -#: assets/views/cmd_filter.py:65 assets/views/cmd_filter.py:82 -#: assets/views/cmd_filter.py:102 assets/views/cmd_filter.py:136 -#: assets/views/cmd_filter.py:170 assets/views/domain.py:30 -#: assets/views/domain.py:47 assets/views/domain.py:64 -#: assets/views/domain.py:78 assets/views/domain.py:104 -#: assets/views/domain.py:133 assets/views/domain.py:153 -#: assets/views/label.py:27 assets/views/label.py:45 assets/views/label.py:72 -#: assets/views/system_user.py:29 assets/views/system_user.py:46 -#: assets/views/system_user.py:63 assets/views/system_user.py:78 -#: templates/_nav.html:19 xpack/plugins/change_auth_plan/models.py:68 -msgid "Assets" -msgstr "资产管理" +#: templates/_nav.html:33 +msgid "Applications" +msgstr "应用管理" #: applications/views/remote_app.py:32 msgid "RemoteApp list" @@ -619,8 +600,8 @@ msgid "Test if the assets under the node are connectable: {}" msgstr "测试节点下资产是否可连接: {}" #: assets/forms/asset.py:45 assets/models/asset.py:103 -#: assets/models/user.py:134 assets/templates/assets/asset_detail.html:195 -#: assets/templates/assets/asset_detail.html:203 +#: assets/models/user.py:134 assets/templates/assets/asset_detail.html:194 +#: assets/templates/assets/asset_detail.html:202 #: assets/templates/assets/system_user_asset.html:83 #: perms/models/asset_permission.py:38 #: xpack/plugins/change_auth_plan/models.py:72 @@ -629,7 +610,7 @@ msgstr "节点" #: assets/forms/asset.py:48 assets/forms/asset.py:83 assets/models/asset.py:107 #: assets/models/cluster.py:19 assets/models/user.py:92 -#: assets/templates/assets/asset_detail.html:81 templates/_nav.html:24 +#: assets/templates/assets/asset_detail.html:80 templates/_nav.html:24 #: xpack/plugins/cloud/models.py:124 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:65 #: xpack/plugins/orgs/templates/orgs/org_list.html:18 @@ -647,7 +628,7 @@ msgstr "标签" #: assets/forms/asset.py:54 assets/forms/asset.py:89 assets/models/asset.py:102 #: assets/models/domain.py:26 assets/models/domain.py:52 -#: assets/templates/assets/asset_detail.html:85 +#: assets/templates/assets/asset_detail.html:84 #: assets/templates/assets/user_asset_list.html:173 #: xpack/plugins/orgs/templates/orgs/org_list.html:17 msgid "Domain" @@ -858,14 +839,14 @@ msgstr "主机名" msgid "Protocol" msgstr "协议" -#: assets/models/asset.py:101 assets/templates/assets/asset_detail.html:109 +#: assets/models/asset.py:101 assets/templates/assets/asset_detail.html:108 #: assets/templates/assets/user_asset_list.html:170 msgid "Platform" msgstr "系统平台" #: assets/models/asset.py:104 assets/models/cmd_filter.py:21 #: assets/models/domain.py:54 assets/models/label.py:22 -#: assets/templates/assets/asset_detail.html:117 +#: assets/templates/assets/asset_detail.html:116 #: assets/templates/assets/user_asset_list.html:174 msgid "Is active" msgstr "激活" @@ -874,19 +855,19 @@ msgstr "激活" msgid "Public IP" msgstr "公网IP" -#: assets/models/asset.py:111 assets/templates/assets/asset_detail.html:125 +#: assets/models/asset.py:111 assets/templates/assets/asset_detail.html:124 msgid "Asset number" msgstr "资产编号" -#: assets/models/asset.py:114 assets/templates/assets/asset_detail.html:89 +#: assets/models/asset.py:114 assets/templates/assets/asset_detail.html:88 msgid "Vendor" msgstr "制造商" -#: assets/models/asset.py:115 assets/templates/assets/asset_detail.html:93 +#: assets/models/asset.py:115 assets/templates/assets/asset_detail.html:92 msgid "Model" msgstr "型号" -#: assets/models/asset.py:116 assets/templates/assets/asset_detail.html:121 +#: assets/models/asset.py:116 assets/templates/assets/asset_detail.html:120 msgid "Serial number" msgstr "序列号" @@ -907,7 +888,7 @@ msgstr "CPU核数" msgid "CPU vcpus" msgstr "CPU总数" -#: assets/models/asset.py:122 assets/templates/assets/asset_detail.html:101 +#: assets/models/asset.py:122 assets/templates/assets/asset_detail.html:100 msgid "Memory" msgstr "内存" @@ -919,7 +900,7 @@ msgstr "硬盘大小" msgid "Disk info" msgstr "硬盘信息" -#: assets/models/asset.py:126 assets/templates/assets/asset_detail.html:113 +#: assets/models/asset.py:126 assets/templates/assets/asset_detail.html:112 #: assets/templates/assets/user_asset_list.html:171 msgid "OS" msgstr "操作系统" @@ -937,7 +918,7 @@ msgid "Hostname raw" msgstr "主机名原始" #: assets/models/asset.py:131 assets/templates/assets/asset_create.html:46 -#: assets/templates/assets/asset_detail.html:232 templates/_nav.html:26 +#: assets/templates/assets/asset_detail.html:231 templates/_nav.html:26 msgid "Labels" msgstr "标签管理" @@ -1182,6 +1163,29 @@ msgstr "自动登录" msgid "Manually login" msgstr "手动登录" +#: assets/models/user.py:135 +#: assets/templates/assets/_asset_group_bulk_update_modal.html:11 +#: assets/templates/assets/system_user_asset.html:22 +#: assets/templates/assets/system_user_detail.html:22 +#: assets/views/admin_user.py:30 assets/views/admin_user.py:49 +#: assets/views/admin_user.py:66 assets/views/admin_user.py:82 +#: assets/views/admin_user.py:107 assets/views/asset.py:52 +#: assets/views/asset.py:69 assets/views/asset.py:128 assets/views/asset.py:171 +#: assets/views/asset.py:199 assets/views/asset.py:226 +#: assets/views/cmd_filter.py:31 assets/views/cmd_filter.py:48 +#: assets/views/cmd_filter.py:65 assets/views/cmd_filter.py:82 +#: assets/views/cmd_filter.py:102 assets/views/cmd_filter.py:136 +#: assets/views/cmd_filter.py:170 assets/views/domain.py:30 +#: assets/views/domain.py:47 assets/views/domain.py:64 +#: assets/views/domain.py:78 assets/views/domain.py:104 +#: assets/views/domain.py:133 assets/views/domain.py:153 +#: assets/views/label.py:27 assets/views/label.py:45 assets/views/label.py:72 +#: assets/views/system_user.py:29 assets/views/system_user.py:46 +#: assets/views/system_user.py:63 assets/views/system_user.py:78 +#: templates/_nav.html:19 xpack/plugins/change_auth_plan/models.py:68 +msgid "Assets" +msgstr "资产管理" + #: assets/models/user.py:138 assets/templates/assets/_system_user.html:59 #: assets/templates/assets/system_user_detail.html:122 #: assets/templates/assets/system_user_update.html:10 @@ -1206,24 +1210,24 @@ msgstr "登录模式" msgid "%(value)s is not an even number" msgstr "%(value)s is not an even number" -#: assets/serializers/asset.py:26 assets/templates/assets/asset_create.html:24 +#: assets/serializers/asset.py:46 assets/templates/assets/asset_create.html:24 msgid "Protocols" msgstr "协议组" -#: assets/serializers/asset.py:52 +#: assets/serializers/asset.py:73 msgid "Hardware info" msgstr "硬件信息" -#: assets/serializers/asset.py:53 assets/serializers/asset_user.py:29 +#: assets/serializers/asset.py:74 assets/serializers/asset_user.py:29 #: assets/templates/assets/_asset_user_list.html:18 msgid "Connectivity" msgstr "连接" -#: assets/serializers/asset.py:54 orgs/mixins.py:223 +#: assets/serializers/asset.py:75 orgs/mixins.py:223 msgid "Org name" msgstr "组织名称" -#: assets/serializers/asset.py:70 +#: assets/serializers/asset.py:93 msgid "Protocol duplicate: {}" msgstr "协议重复: {}" @@ -1400,7 +1404,7 @@ msgid "Please input password" msgstr "请输入密码" #: assets/templates/assets/_asset_user_auth_update_modal.html:68 -#: assets/templates/assets/asset_detail.html:312 +#: assets/templates/assets/asset_detail.html:311 #: users/templates/users/user_detail.html:307 #: users/templates/users/user_detail.html:334 #: xpack/plugins/interface/views.py:35 @@ -1437,15 +1441,13 @@ msgid "Datetime" msgstr "日期" #: assets/templates/assets/_asset_user_list.html:61 -#, fuzzy -#| msgid "View auth" msgid "View" -msgstr "查看认证" +msgstr "查看" #: assets/templates/assets/_asset_user_list.html:63 #: assets/templates/assets/admin_user_assets.html:61 #: assets/templates/assets/asset_asset_user_list.html:57 -#: assets/templates/assets/asset_detail.html:183 +#: assets/templates/assets/asset_detail.html:182 #: assets/templates/assets/system_user_asset.html:63 #: assets/templates/assets/system_user_detail.html:151 msgid "Test" @@ -1535,7 +1537,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:180 +#: assets/templates/assets/asset_detail.html:179 msgid "Test connective" msgstr "测试可连接性" @@ -1551,7 +1553,7 @@ msgid "Select nodes" msgstr "选择节点" #: assets/templates/assets/admin_user_detail.html:100 -#: assets/templates/assets/asset_detail.html:212 +#: assets/templates/assets/asset_detail.html:211 #: assets/templates/assets/asset_list.html:682 #: assets/templates/assets/cmd_filter_detail.html:106 #: assets/templates/assets/system_user_asset.html:100 @@ -1649,7 +1651,7 @@ msgid "Asset users of" msgstr "资产用户" #: assets/templates/assets/asset_asset_user_list.html:47 -#: assets/templates/assets/asset_detail.html:149 +#: assets/templates/assets/asset_detail.html:148 #: terminal/templates/terminal/session_detail.html:81 #: users/templates/users/user_detail.html:138 #: users/templates/users/user_profile.html:146 @@ -1668,21 +1670,21 @@ msgstr "选择需要修改属性" msgid "Select all" msgstr "全选" -#: assets/templates/assets/asset_detail.html:97 +#: assets/templates/assets/asset_detail.html:96 msgid "CPU" msgstr "CPU" -#: assets/templates/assets/asset_detail.html:105 +#: assets/templates/assets/asset_detail.html:104 msgid "Disk" msgstr "硬盘" -#: assets/templates/assets/asset_detail.html:133 +#: assets/templates/assets/asset_detail.html:132 #: users/templates/users/user_detail.html:115 #: users/templates/users/user_profile.html:104 msgid "Date joined" msgstr "创建日期" -#: assets/templates/assets/asset_detail.html:155 +#: assets/templates/assets/asset_detail.html:154 #: assets/templates/assets/user_asset_list.html:46 #: perms/models/asset_permission.py:60 perms/models/base.py:38 #: perms/templates/perms/asset_permission_create_update.html:55 @@ -1698,11 +1700,11 @@ msgstr "创建日期" msgid "Active" msgstr "激活中" -#: assets/templates/assets/asset_detail.html:172 +#: assets/templates/assets/asset_detail.html:171 msgid "Refresh hardware" msgstr "更新硬件信息" -#: assets/templates/assets/asset_detail.html:175 +#: assets/templates/assets/asset_detail.html:174 msgid "Refresh" msgstr "刷新" @@ -2319,8 +2321,8 @@ msgid "Date" msgstr "日期" #: audits/views.py:85 audits/views.py:129 audits/views.py:166 -#: audits/views.py:211 audits/views.py:243 templates/_nav.html:87 -#: templates/_nav_audits.html:22 +#: audits/views.py:211 audits/views.py:243 ops/views/command.py:47 +#: templates/_nav.html:87 templates/_nav_audits.html:22 msgid "Audits" msgstr "日志审计" @@ -2986,7 +2988,7 @@ msgstr "更新任务内容: {}" #: ops/views/adhoc.py:45 ops/views/adhoc.py:71 ops/views/adhoc.py:85 #: ops/views/adhoc.py:99 ops/views/adhoc.py:113 ops/views/adhoc.py:127 -#: ops/views/adhoc.py:141 ops/views/command.py:47 ops/views/command.py:72 +#: ops/views/adhoc.py:141 ops/views/command.py:72 msgid "Ops" msgstr "作业中心" @@ -3002,7 +3004,7 @@ msgstr "执行历史" msgid "Command execution list" msgstr "命令执行列表" -#: ops/views/command.py:73 templates/_nav_user.html:22 +#: ops/views/command.py:73 templates/_nav_user.html:26 msgid "Command execution" msgstr "命令执行" @@ -3827,7 +3829,7 @@ msgstr "文档" msgid "Commercial support" msgstr "商业支持" -#: templates/_header_bar.html:89 templates/_nav_user.html:28 users/forms.py:139 +#: templates/_header_bar.html:89 templates/_nav_user.html:32 users/forms.py:139 #: users/templates/users/_user.html:43 #: users/templates/users/first_login.html:39 #: users/templates/users/user_password_update.html:40 @@ -3943,11 +3945,11 @@ msgstr "用户列表" msgid "Command filters" msgstr "命令过滤" -#: templates/_nav.html:33 -msgid "Applications" -msgstr "应用管理" - #: templates/_nav.html:55 templates/_nav_audits.html:11 +#: terminal/views/command.py:51 terminal/views/session.py:74 +#: terminal/views/session.py:92 terminal/views/session.py:116 +#: terminal/views/terminal.py:31 terminal/views/terminal.py:47 +#: terminal/views/terminal.py:60 msgid "Sessions" msgstr "会话管理" @@ -3956,6 +3958,7 @@ msgid "Session online" msgstr "在线会话" #: templates/_nav.html:59 templates/_nav_audits.html:15 +#: terminal/views/session.py:93 msgid "Session offline" msgstr "历史会话" @@ -3963,18 +3966,15 @@ msgstr "历史会话" msgid "Commands" msgstr "命令记录" -#: templates/_nav.html:63 templates/_nav_user.html:33 +#: templates/_nav.html:63 templates/_nav_user.html:37 msgid "Web terminal" msgstr "Web终端" -#: templates/_nav.html:68 templates/_nav_user.html:38 +#: templates/_nav.html:68 templates/_nav_user.html:42 msgid "File manager" msgstr "文件管理" -#: templates/_nav.html:72 terminal/views/command.py:51 -#: terminal/views/session.py:74 terminal/views/session.py:92 -#: terminal/views/session.py:116 terminal/views/terminal.py:31 -#: terminal/views/terminal.py:47 terminal/views/terminal.py:60 +#: templates/_nav.html:72 msgid "Terminal" msgstr "终端管理" @@ -3998,7 +3998,7 @@ msgstr "账户列表" msgid "Sync instance" msgstr "同步实例" -#: templates/_nav_user.html:9 +#: templates/_nav_user.html:11 msgid "My Applications" msgstr "我的应用" @@ -4356,10 +4356,6 @@ msgstr "信息" msgid "Session online list" msgstr "在线会话" -#: terminal/views/session.py:93 -msgid "Session offline list" -msgstr "离线会话" - #: terminal/views/terminal.py:32 msgid "Terminal list" msgstr "终端列表" @@ -5401,8 +5397,6 @@ msgid "Password rules" msgstr "密码规则" #: xpack/plugins/change_auth_plan/models.py:213 -#, fuzzy -#| msgid "For security, do not change root user's password" msgid "For security, do not change {} user's password" msgstr "为了安全,禁止更改 {} 用户的密码" @@ -5774,7 +5768,7 @@ msgid "Interface settings" msgstr "界面设置" #: xpack/plugins/interface/templates/interface/interface.html:15 -#: xpack/plugins/interface/views.py:25 +#: xpack/plugins/interface/views.py:24 xpack/plugins/interface/views.py:25 msgid "Interface setting" msgstr "界面设置" @@ -5797,10 +5791,6 @@ msgstr "恢复默认成功!" msgid "Restore default failed." msgstr "恢复默认失败!" -#: xpack/plugins/interface/views.py:24 -msgid "Interface" -msgstr "界面" - #: xpack/plugins/interface/views.py:51 msgid "It is already in the default setting state!" msgstr "当前已经是初始化状态!" @@ -5904,7 +5894,9 @@ msgstr "无效的许可证" msgid "Admin" msgstr "管理员" -#: xpack/plugins/orgs/meta.py:8 +#: xpack/plugins/orgs/meta.py:8 xpack/plugins/orgs/views.py:26 +#: xpack/plugins/orgs/views.py:43 xpack/plugins/orgs/views.py:60 +#: xpack/plugins/orgs/views.py:77 msgid "Organizations" msgstr "组织管理" @@ -5921,19 +5913,10 @@ msgstr "添加管理员" msgid "Create organization " msgstr "创建组织" -#: xpack/plugins/orgs/views.py:26 -msgid "Org" -msgstr "组织" - #: xpack/plugins/orgs/views.py:27 msgid "Org list" msgstr "组织列表" -#: xpack/plugins/orgs/views.py:43 xpack/plugins/orgs/views.py:60 -#: xpack/plugins/orgs/views.py:77 -msgid "Orgs" -msgstr "组织" - #: xpack/plugins/orgs/views.py:44 msgid "Create org" msgstr "创建组织" @@ -5942,8 +5925,8 @@ msgstr "创建组织" msgid "Update org" msgstr "更新组织" -#: xpack/plugins/vault/meta.py:11 xpack/plugins/vault/views.py:23 -#: xpack/plugins/vault/views.py:38 +#: xpack/plugins/vault/meta.py:11 xpack/plugins/vault/views.py:22 +#: xpack/plugins/vault/views.py:37 msgid "Vault" msgstr "密码匣子" @@ -5951,23 +5934,14 @@ msgstr "密码匣子" msgid "Import vault" msgstr "导入密码" -#: xpack/plugins/vault/views.py:24 +#: xpack/plugins/vault/views.py:23 msgid "vault list" msgstr "密码匣子" -#: xpack/plugins/vault/views.py:39 +#: xpack/plugins/vault/views.py:38 msgid "vault create" msgstr "创建" -#~ msgid "Update failed!" -#~ msgstr "更新失败" - -#~ msgid "Update auth" -#~ msgstr "更新认证" - -#~ msgid "Password version" -#~ msgstr "密码版本" - #~ msgid "User does not exist" #~ msgstr "用户不存在" diff --git a/apps/locale/zh/LC_MESSAGES/djangojs.mo b/apps/locale/zh/LC_MESSAGES/djangojs.mo index aab4a06e6..2d0fc71a4 100644 Binary files a/apps/locale/zh/LC_MESSAGES/djangojs.mo and b/apps/locale/zh/LC_MESSAGES/djangojs.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/djangojs.po b/apps/locale/zh/LC_MESSAGES/djangojs.po index 8e0ec5047..549f1cd45 100644 --- a/apps/locale/zh/LC_MESSAGES/djangojs.po +++ b/apps/locale/zh/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-27 15:53+0800\n" +"POT-Creation-Date: 2019-06-20 16:30+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,58 +17,58 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: static/js/jumpserver.js:249 +#: static/js/jumpserver.js:263 msgid "Update is successful!" msgstr "更新成功" -#: static/js/jumpserver.js:251 +#: static/js/jumpserver.js:265 msgid "An unknown error occurred while updating.." msgstr "更新时发生未知错误" -#: static/js/jumpserver.js:315 static/js/jumpserver.js:352 -#: static/js/jumpserver.js:355 +#: static/js/jumpserver.js:329 static/js/jumpserver.js:366 +#: static/js/jumpserver.js:369 msgid "Error" msgstr "错误" -#: static/js/jumpserver.js:315 +#: static/js/jumpserver.js:329 msgid "Being used by the asset, please unbind the asset first." msgstr "正在被资产使用中,请先解除资产绑定" -#: static/js/jumpserver.js:321 static/js/jumpserver.js:362 +#: static/js/jumpserver.js:335 static/js/jumpserver.js:376 msgid "Delete the success" msgstr "删除成功" -#: static/js/jumpserver.js:327 +#: static/js/jumpserver.js:341 msgid "Are you sure about deleting it?" msgstr "你确定删除吗 ?" -#: static/js/jumpserver.js:331 static/js/jumpserver.js:372 +#: static/js/jumpserver.js:345 static/js/jumpserver.js:386 msgid "Cancel" msgstr "取消" -#: static/js/jumpserver.js:333 static/js/jumpserver.js:374 +#: static/js/jumpserver.js:347 static/js/jumpserver.js:388 msgid "Confirm" msgstr "确认" -#: static/js/jumpserver.js:352 +#: static/js/jumpserver.js:366 msgid "" "The organization contains undeleted information. Please try again after " "deleting" msgstr "组织中包含未删除信息,请删除后重试" -#: static/js/jumpserver.js:355 +#: static/js/jumpserver.js:369 msgid "" "Do not perform this operation under this organization. Try again after " "switching to another organization" msgstr "请勿在此组织下执行此操作,切换到其他组织后重试" -#: static/js/jumpserver.js:368 +#: static/js/jumpserver.js:382 msgid "" "Please ensure that the following information in the organization has been " "deleted" msgstr "请确保组织内的以下信息已删除" -#: static/js/jumpserver.js:369 +#: static/js/jumpserver.js:383 msgid "" "User list、User group、Asset list、Domain list、Admin user、System user、" "Labels、Asset permission" @@ -76,76 +76,80 @@ msgstr "" "用户列表、用户组、资产列表、网域列表、管理用户、系统用户、标签管理、资产授权" "规则" -#: static/js/jumpserver.js:408 +#: static/js/jumpserver.js:422 msgid "Loading ..." msgstr "加载中 ..." -#: static/js/jumpserver.js:409 +#: static/js/jumpserver.js:423 msgid "Search" msgstr "搜索" -#: static/js/jumpserver.js:412 +#: static/js/jumpserver.js:426 #, javascript-format msgid "Selected item %d" msgstr "选中 %d 项" -#: static/js/jumpserver.js:416 +#: static/js/jumpserver.js:430 msgid "Per page _MENU_" msgstr "每页 _MENU_" -#: static/js/jumpserver.js:417 +#: static/js/jumpserver.js:431 msgid "" "Displays the results of items _START_ to _END_; A total of _TOTAL_ entries" msgstr "显示第 _START_ 至 _END_ 项结果; 总共 _TOTAL_ 项" -#: static/js/jumpserver.js:420 +#: static/js/jumpserver.js:434 msgid "No match" msgstr "没有匹配项" -#: static/js/jumpserver.js:421 +#: static/js/jumpserver.js:435 msgid "No record" msgstr "没有记录" -#: static/js/jumpserver.js:563 +#: static/js/jumpserver.js:577 msgid "Unknown error occur" msgstr "" -#: static/js/jumpserver.js:800 +#: static/js/jumpserver.js:816 msgid "Password minimum length {N} bits" msgstr "密码最小长度 {N} 位" -#: static/js/jumpserver.js:801 +#: static/js/jumpserver.js:817 msgid "Must contain capital letters" msgstr "必须包含大写字母" -#: static/js/jumpserver.js:802 +#: static/js/jumpserver.js:818 msgid "Must contain lowercase letters" msgstr "必须包含小写字母" -#: static/js/jumpserver.js:803 +#: static/js/jumpserver.js:819 msgid "Must contain numeric characters" msgstr "必须包含数字字符" -#: static/js/jumpserver.js:804 +#: static/js/jumpserver.js:820 msgid "Must contain special characters" msgstr "必须包含特殊字符" -#: static/js/jumpserver.js:976 +#: static/js/jumpserver.js:995 msgid "Export failed" msgstr "导出失败" -#: static/js/jumpserver.js:993 +#: static/js/jumpserver.js:1012 msgid "Import Success" msgstr "导入成功" -#: static/js/jumpserver.js:998 +#: static/js/jumpserver.js:1017 msgid "Update Success" msgstr "更新成功" -#: static/js/jumpserver.js:1028 +#: static/js/jumpserver.js:1018 +msgid "Count" +msgstr "数量" + +#: static/js/jumpserver.js:1047 msgid "Import failed" msgstr "导入失败" -#: static/js/jumpserver.js:1033 +#: static/js/jumpserver.js:1052 msgid "Update failed" msgstr "更新失败" diff --git a/apps/perms/mixins.py b/apps/perms/mixins.py index 88c851adc..f1d7fac1e 100644 --- a/apps/perms/mixins.py +++ b/apps/perms/mixins.py @@ -1,7 +1,6 @@ # ~*~ coding: utf-8 ~*~ # - from orgs.utils import set_to_root_org __all__ = [ @@ -116,4 +115,3 @@ class ChangeOrgIfNeedMixin(object): def get(self, request, *args, **kwargs): self.change_org_if_need(request, kwargs) return super().get(request, *args, **kwargs) - diff --git a/apps/settings/api.py b/apps/settings/api.py index d399d207c..37d63bef1 100644 --- a/apps/settings/api.py +++ b/apps/settings/api.py @@ -39,7 +39,7 @@ class MailTestingAPI(APIView): subject = "Test" message = "Test smtp setting" email_from = email_from or email_host_user - send_mail(subject, message, email_from, [email_host_user]) + send_mail(subject, message, email_from, [email_from]) except Exception as e: return Response({"error": str(e)}, status=401) diff --git a/apps/static/js/jumpserver.js b/apps/static/js/jumpserver.js index f86ca1344..5eac258f8 100644 --- a/apps/static/js/jumpserver.js +++ b/apps/static/js/jumpserver.js @@ -1015,7 +1015,7 @@ function APIImportData(props){ $('#updated_failed').html(''); $('#updated_failed_detail').html(''); $('#success_updated').html(gettext("Update Success")); - $('#success_updated_detail').html("Count" + ": " + data.length); + $('#success_updated_detail').html(gettext("Count") + ": " + data.length); } props.data_table.ajax.reload() diff --git a/apps/templates/_nav_user.html b/apps/templates/_nav_user.html index 5f77fb99e..c745c0cdc 100644 --- a/apps/templates/_nav_user.html +++ b/apps/templates/_nav_user.html @@ -4,6 +4,8 @@ {% trans 'My assets' %} + +{% if LICENSE_VALID %}
  • {% trans 'My Applications' %} @@ -16,6 +18,8 @@
  • +{% endif %} + {% if SECURITY_COMMAND_EXECUTION %}
  • diff --git a/apps/terminal/views/command.py b/apps/terminal/views/command.py index 222701db1..c1a5eb393 100644 --- a/apps/terminal/views/command.py +++ b/apps/terminal/views/command.py @@ -48,7 +48,7 @@ class CommandListView(DatetimeSearchMixin, PermissionsMixin, ListView): def get_context_data(self, **kwargs): context = { - 'app': _('Terminal'), + 'app': _('Sessions'), 'action': _('Command list'), 'user_list': utils.get_session_user_list(), 'asset_list': utils.get_session_asset_list(), diff --git a/apps/terminal/views/session.py b/apps/terminal/views/session.py index 369053a61..cf4484c06 100644 --- a/apps/terminal/views/session.py +++ b/apps/terminal/views/session.py @@ -71,7 +71,7 @@ class SessionOnlineListView(SessionListView): def get_context_data(self, **kwargs): context = { - 'app': _('Terminal'), + 'app': _('Sessions'), 'action': _('Session online list'), 'type': 'online', 'now': timezone.now(), @@ -89,8 +89,8 @@ class SessionOfflineListView(SessionListView): def get_context_data(self, **kwargs): context = { - 'app': _('Terminal'), - 'action': _('Session offline list'), + 'app': _('Sessions'), + 'action': _('Session offline'), 'now': timezone.now(), } kwargs.update(context) @@ -113,7 +113,7 @@ class SessionDetailView(SingleObjectMixin, PermissionsMixin, ListView): def get_context_data(self, **kwargs): context = { - 'app': _('Terminal'), + 'app': _('Sessions'), 'action': _('Session detail'), } kwargs.update(context) diff --git a/apps/terminal/views/terminal.py b/apps/terminal/views/terminal.py index e5d4658ec..5ddb9312e 100644 --- a/apps/terminal/views/terminal.py +++ b/apps/terminal/views/terminal.py @@ -28,7 +28,7 @@ class TerminalListView(PermissionsMixin, ListView): def get_context_data(self, **kwargs): context = super(TerminalListView, self).get_context_data(**kwargs) context.update({ - 'app': _('Terminal'), + 'app': _('Sessions'), 'action': _('Terminal list'), 'form': self.form_class() }) @@ -44,7 +44,7 @@ class TerminalUpdateView(PermissionsMixin, UpdateView): def get_context_data(self, **kwargs): context = super(TerminalUpdateView, self).get_context_data(**kwargs) - context.update({'app': _('Terminal'), 'action': _('Update terminal')}) + context.update({'app': _('Sessions'), 'action': _('Update terminal')}) return context @@ -57,7 +57,7 @@ class TerminalDetailView(PermissionsMixin, DetailView): def get_context_data(self, **kwargs): context = super(TerminalDetailView, self).get_context_data(**kwargs) context.update({ - 'app': _('Terminal'), + 'app': _('Sessions'), 'action': _('Terminal detail') }) return context