Unverified Commit f9578f44 authored by BaiJiangJie's avatar BaiJiangJie Committed by GitHub

Merge pull request #3606 from jumpserver/dev

Dev
parents a27fb18a a37e1422
...@@ -5,10 +5,9 @@ ...@@ -5,10 +5,9 @@
{% block table_search %}{% endblock %} {% block table_search %}{% endblock %}
{% block table_container %} {% block table_container %}
<div class="btn-group uc pull-left m-r-5"> <div class="btn-group uc pull-left m-r-5">
<button class="btn btn-sm btn-primary"> <button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle">
{% trans "Create DatabaseApp" %} {% trans "Create DatabaseApp" %}
</button> <span class="caret"></span></button>
<button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle"><span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for key, value in type_choices %} {% for key, value in type_choices %}
<li><a class="" href="{% url 'applications:database-app-create' %}?type={{ key }}">{{ value }}</a></li> <li><a class="" href="{% url 'applications:database-app-create' %}?type={{ key }}">{{ value }}</a></li>
......
...@@ -7,10 +7,9 @@ ...@@ -7,10 +7,9 @@
{% block table_search %}{% endblock %} {% block table_search %}{% endblock %}
{% block table_container %} {% block table_container %}
<div class="btn-group uc pull-left m-r-5"> <div class="btn-group uc pull-left m-r-5">
<button class="btn btn-sm btn-primary"> <button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle">
{% trans "Create RemoteApp" %} {% trans "Create RemoteApp" %}
</button> <span class="caret"></span></button>
<button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle"><span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for key, value in type_choices %} {% for key, value in type_choices %}
<li><a class="" href="{% url 'applications:remote-app-create' %}?type={{ key }}">{{ value }}</a></li> <li><a class="" href="{% url 'applications:remote-app-create' %}?type={{ key }}">{{ value }}</a></li>
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from django.utils.translation import ugettext_lazy as _
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT = _(
'Cannot contain special characters: [ {} ]'
).format(" ".join(['/', '\\']))
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN = r"[/\\]"
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG = \
_("* The contains characters that are not allowed")
...@@ -7,7 +7,6 @@ from common.utils import get_logger ...@@ -7,7 +7,6 @@ from common.utils import get_logger
from orgs.mixins.forms import OrgModelForm from orgs.mixins.forms import OrgModelForm
from ..models import Asset from ..models import Asset
from ..const import GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT
logger = get_logger(__file__) logger = get_logger(__file__)
...@@ -82,7 +81,6 @@ class AssetCreateUpdateForm(OrgModelForm): ...@@ -82,7 +81,6 @@ class AssetCreateUpdateForm(OrgModelForm):
'nodes': _("Node"), 'nodes': _("Node"),
} }
help_texts = { help_texts = {
'hostname': GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT,
'admin_user': _( 'admin_user': _(
'root or other NOPASSWD sudo privilege user existed in asset,' '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' 'If asset is windows or other set any one, more see admin user left menu'
......
...@@ -6,7 +6,6 @@ from django.utils.translation import gettext_lazy as _ ...@@ -6,7 +6,6 @@ from django.utils.translation import gettext_lazy as _
from common.utils import validate_ssh_private_key, ssh_pubkey_gen, get_logger from common.utils import validate_ssh_private_key, ssh_pubkey_gen, get_logger
from orgs.mixins.forms import OrgModelForm from orgs.mixins.forms import OrgModelForm
from ..models import AdminUser, SystemUser from ..models import AdminUser, SystemUser
from ..const import GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT
logger = get_logger(__file__) logger = get_logger(__file__)
__all__ = [ __all__ = [
...@@ -99,7 +98,6 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm): ...@@ -99,7 +98,6 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm):
}), }),
} }
help_texts = { help_texts = {
'name': GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT,
'auto_push': _('Auto push system user to asset'), 'auto_push': _('Auto push system user to asset'),
'priority': _('1-100, High level will be using login asset as default, ' 'priority': _('1-100, High level will be using login asset as default, '
'if user was granted more than 2 system user'), 'if user was granted more than 2 system user'),
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
import io
import os import os
import uuid import uuid
from hashlib import md5 from hashlib import md5
...@@ -76,6 +77,14 @@ class AssetUser(OrgModelMixin): ...@@ -76,6 +77,14 @@ class AssetUser(OrgModelMixin):
i = '-'.join(str(self.id).split('-')[:3]) i = '-'.join(str(self.id).split('-')[:3])
return i return i
def get_private_key(self):
if not self.private_key_obj:
return None
string_io = io.StringIO()
self.private_key_obj.write_private_key(string_io)
private_key = string_io.getvalue()
return private_key
def get_related_assets(self): def get_related_assets(self):
assets = self.assets.all() assets = self.assets.all()
return assets return assets
......
...@@ -8,10 +8,6 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -8,10 +8,6 @@ from django.utils.translation import ugettext_lazy as _
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from ..models import Asset, Node, Label, Platform from ..models import Asset, Node, Label, Platform
from ..const import (
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN,
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
)
from .base import ConnectivitySerializer from .base import ConnectivitySerializer
__all__ = [ __all__ = [
...@@ -100,15 +96,6 @@ class AssetSerializer(BulkOrgResourceModelSerializer): ...@@ -100,15 +96,6 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
'org_name': {'label': _('Org name')} 'org_name': {'label': _('Org name')}
} }
@staticmethod
def validate_hostname(hostname):
pattern = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN
res = re.search(pattern, hostname)
if res is not None:
msg = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
raise serializers.ValidationError(msg)
return hostname
@classmethod @classmethod
def setup_eager_loading(cls, queryset): def setup_eager_loading(cls, queryset):
""" Perform necessary eager loading of data. """ """ Perform necessary eager loading of data. """
......
...@@ -9,10 +9,6 @@ from common.utils import ssh_pubkey_gen ...@@ -9,10 +9,6 @@ from common.utils import ssh_pubkey_gen
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from assets.models import Node from assets.models import Node
from ..models import SystemUser from ..models import SystemUser
from ..const import (
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN,
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
)
from .base import AuthSerializer, AuthSerializerMixin from .base import AuthSerializer, AuthSerializerMixin
__all__ = [ __all__ = [
...@@ -47,15 +43,6 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): ...@@ -47,15 +43,6 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
'created_by': {'read_only': True}, 'created_by': {'read_only': True},
} }
@staticmethod
def validate_name(name):
pattern = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN
res = re.search(pattern, name)
if res is not None:
msg = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
raise serializers.ValidationError(msg)
return name
def validate_auto_push(self, value): def validate_auto_push(self, value):
login_mode = self.initial_data.get("login_mode") login_mode = self.initial_data.get("login_mode")
protocol = self.initial_data.get("protocol") protocol = self.initial_data.get("protocol")
...@@ -136,6 +123,7 @@ class SystemUserAuthSerializer(AuthSerializer): ...@@ -136,6 +123,7 @@ class SystemUserAuthSerializer(AuthSerializer):
""" """
系统用户认证信息 系统用户认证信息
""" """
private_key = serializers.SerializerMethodField()
class Meta: class Meta:
model = SystemUser model = SystemUser
...@@ -144,6 +132,10 @@ class SystemUserAuthSerializer(AuthSerializer): ...@@ -144,6 +132,10 @@ class SystemUserAuthSerializer(AuthSerializer):
"login_mode", "password", "private_key", "login_mode", "password", "private_key",
] ]
@staticmethod
def get_private_key(obj):
return obj.get_private_key()
class SystemUserSimpleSerializer(serializers.ModelSerializer): class SystemUserSimpleSerializer(serializers.ModelSerializer):
""" """
......
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Jumpserver 0.3.3\n" "Project-Id-Version: Jumpserver 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-12-30 12:26+0800\n" "POT-Creation-Date: 2020-01-06 11:35+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: Jumpserver team<ibuler@qq.com>\n" "Language-Team: Jumpserver team<ibuler@qq.com>\n"
...@@ -23,12 +23,12 @@ msgstr "自定义" ...@@ -23,12 +23,12 @@ msgstr "自定义"
#: applications/forms/remote_app.py:44 applications/models/remote_app.py:23 #: applications/forms/remote_app.py:44 applications/models/remote_app.py:23
#: applications/templates/applications/remote_app_detail.html:52 #: applications/templates/applications/remote_app_detail.html:52
#: applications/templates/applications/remote_app_list.html:28 #: applications/templates/applications/remote_app_list.html:27
#: applications/templates/applications/user_remote_app_list.html:18 #: applications/templates/applications/user_remote_app_list.html:18
#: assets/forms/domain.py:15 assets/forms/label.py:13 #: assets/forms/domain.py:15 assets/forms/label.py:13
#: assets/models/asset.py:342 assets/models/authbook.py:24 #: assets/models/asset.py:342 assets/models/authbook.py:24
#: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:32 #: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:32
#: assets/serializers/asset_user.py:82 assets/serializers/system_user.py:45 #: assets/serializers/asset_user.py:82 assets/serializers/system_user.py:41
#: assets/templates/assets/admin_user_list.html:23 #: assets/templates/assets/admin_user_list.html:23
#: assets/templates/assets/asset_list.html:170 #: assets/templates/assets/asset_list.html:170
#: assets/templates/assets/domain_detail.html:55 #: assets/templates/assets/domain_detail.html:55
...@@ -103,13 +103,13 @@ msgstr "运行参数" ...@@ -103,13 +103,13 @@ msgstr "运行参数"
#: applications/models/database_app.py:18 applications/models/remote_app.py:21 #: applications/models/database_app.py:18 applications/models/remote_app.py:21
#: applications/templates/applications/database_app_detail.html:48 #: applications/templates/applications/database_app_detail.html:48
#: applications/templates/applications/database_app_list.html:24 #: applications/templates/applications/database_app_list.html:23
#: applications/templates/applications/remote_app_detail.html:48 #: applications/templates/applications/remote_app_detail.html:48
#: applications/templates/applications/remote_app_list.html:26 #: applications/templates/applications/remote_app_list.html:25
#: applications/templates/applications/user_database_app_list.html:16 #: applications/templates/applications/user_database_app_list.html:16
#: applications/templates/applications/user_remote_app_list.html:16 #: applications/templates/applications/user_remote_app_list.html:16
#: assets/forms/asset.py:21 assets/forms/domain.py:77 assets/forms/user.py:75 #: assets/forms/asset.py:20 assets/forms/domain.py:77 assets/forms/user.py:74
#: assets/forms/user.py:95 assets/models/asset.py:144 assets/models/base.py:27 #: assets/forms/user.py:94 assets/models/asset.py:144 assets/models/base.py:27
#: assets/models/cluster.py:18 assets/models/cmd_filter.py:21 #: assets/models/cluster.py:18 assets/models/cmd_filter.py:21
#: assets/models/domain.py:20 assets/models/group.py:20 #: assets/models/domain.py:20 assets/models/group.py:20
#: assets/models/label.py:18 assets/templates/assets/_node_detail_modal.html:27 #: assets/models/label.py:18 assets/templates/assets/_node_detail_modal.html:27
...@@ -141,7 +141,7 @@ msgstr "运行参数" ...@@ -141,7 +141,7 @@ msgstr "运行参数"
#: settings/models.py:26 #: settings/models.py:26
#: settings/templates/settings/_ldap_list_users_modal.html:32 #: settings/templates/settings/_ldap_list_users_modal.html:32
#: terminal/models.py:26 terminal/models.py:282 terminal/models.py:314 #: terminal/models.py:26 terminal/models.py:282 terminal/models.py:314
#: terminal/models.py:351 terminal/templates/terminal/base_storage_list.html:32 #: terminal/models.py:351 terminal/templates/terminal/base_storage_list.html:31
#: terminal/templates/terminal/terminal_detail.html:43 #: terminal/templates/terminal/terminal_detail.html:43
#: terminal/templates/terminal/terminal_list.html:30 users/forms/profile.py:20 #: terminal/templates/terminal/terminal_list.html:30 users/forms/profile.py:20
#: users/models/group.py:15 users/models/user.py:438 #: users/models/group.py:15 users/models/user.py:438
...@@ -176,14 +176,14 @@ msgstr "名称" ...@@ -176,14 +176,14 @@ msgstr "名称"
#: applications/models/database_app.py:22 #: applications/models/database_app.py:22
#: applications/templates/applications/database_app_detail.html:52 #: applications/templates/applications/database_app_detail.html:52
#: applications/templates/applications/database_app_list.html:25 #: applications/templates/applications/database_app_list.html:24
#: applications/templates/applications/user_database_app_list.html:17 #: applications/templates/applications/user_database_app_list.html:17
#: assets/models/cmd_filter.py:51 #: assets/models/cmd_filter.py:51
#: assets/templates/assets/cmd_filter_rule_list.html:53 #: assets/templates/assets/cmd_filter_rule_list.html:53
#: audits/templates/audits/login_log_list.html:58 #: audits/templates/audits/login_log_list.html:58
#: perms/templates/perms/remote_app_permission_remote_app.html:50 #: perms/templates/perms/remote_app_permission_remote_app.html:50
#: terminal/models.py:316 terminal/models.py:353 #: terminal/models.py:316 terminal/models.py:353
#: terminal/templates/terminal/base_storage_list.html:33 #: terminal/templates/terminal/base_storage_list.html:32
#: tickets/models/ticket.py:43 tickets/templates/tickets/ticket_detail.html:33 #: tickets/models/ticket.py:43 tickets/templates/tickets/ticket_detail.html:33
#: tickets/templates/tickets/ticket_list.html:35 #: tickets/templates/tickets/ticket_list.html:35
#: users/templates/users/user_granted_database_app.html:35 #: users/templates/users/user_granted_database_app.html:35
...@@ -192,7 +192,7 @@ msgstr "类型" ...@@ -192,7 +192,7 @@ msgstr "类型"
#: applications/models/database_app.py:25 #: applications/models/database_app.py:25
#: applications/templates/applications/database_app_detail.html:56 #: applications/templates/applications/database_app_detail.html:56
#: applications/templates/applications/database_app_list.html:26 #: applications/templates/applications/database_app_list.html:25
#: applications/templates/applications/user_database_app_list.html:18 #: applications/templates/applications/user_database_app_list.html:18
#: ops/models/adhoc.py:185 templates/index.html:91 #: ops/models/adhoc.py:185 templates/index.html:91
#: users/templates/users/user_granted_database_app.html:36 #: users/templates/users/user_granted_database_app.html:36
...@@ -201,8 +201,8 @@ msgstr "主机" ...@@ -201,8 +201,8 @@ msgstr "主机"
#: applications/models/database_app.py:27 #: applications/models/database_app.py:27
#: applications/templates/applications/database_app_detail.html:60 #: applications/templates/applications/database_app_detail.html:60
#: applications/templates/applications/database_app_list.html:27 #: applications/templates/applications/database_app_list.html:26
#: assets/forms/asset.py:25 assets/models/asset.py:190 #: assets/forms/asset.py:24 assets/models/asset.py:190
#: assets/models/domain.py:50 #: assets/models/domain.py:50
#: assets/templates/assets/domain_gateway_list.html:64 #: assets/templates/assets/domain_gateway_list.html:64
msgid "Port" msgid "Port"
...@@ -210,7 +210,7 @@ msgstr "端口" ...@@ -210,7 +210,7 @@ msgstr "端口"
#: applications/models/database_app.py:29 #: applications/models/database_app.py:29
#: applications/templates/applications/database_app_detail.html:64 #: applications/templates/applications/database_app_detail.html:64
#: applications/templates/applications/database_app_list.html:28 #: applications/templates/applications/database_app_list.html:27
#: applications/templates/applications/user_database_app_list.html:19 #: applications/templates/applications/user_database_app_list.html:19
#: users/templates/users/user_granted_database_app.html:37 #: users/templates/users/user_granted_database_app.html:37
msgid "Database" msgid "Database"
...@@ -220,9 +220,9 @@ msgstr "数据库" ...@@ -220,9 +220,9 @@ msgstr "数据库"
# msgstr "创建日期" # msgstr "创建日期"
#: applications/models/database_app.py:33 applications/models/remote_app.py:45 #: applications/models/database_app.py:33 applications/models/remote_app.py:45
#: applications/templates/applications/database_app_detail.html:76 #: applications/templates/applications/database_app_detail.html:76
#: applications/templates/applications/database_app_list.html:29 #: applications/templates/applications/database_app_list.html:28
#: applications/templates/applications/remote_app_detail.html:72 #: applications/templates/applications/remote_app_detail.html:72
#: applications/templates/applications/remote_app_list.html:29 #: applications/templates/applications/remote_app_list.html:28
#: applications/templates/applications/user_database_app_list.html:20 #: applications/templates/applications/user_database_app_list.html:20
#: applications/templates/applications/user_remote_app_list.html:19 #: applications/templates/applications/user_remote_app_list.html:19
#: assets/models/asset.py:149 assets/models/asset.py:225 #: assets/models/asset.py:149 assets/models/asset.py:225
...@@ -248,7 +248,7 @@ msgstr "数据库" ...@@ -248,7 +248,7 @@ msgstr "数据库"
#: perms/templates/perms/database_app_permission_detail.html:93 #: perms/templates/perms/database_app_permission_detail.html:93
#: perms/templates/perms/remote_app_permission_detail.html:89 #: perms/templates/perms/remote_app_permission_detail.html:89
#: settings/models.py:31 terminal/models.py:36 terminal/models.py:321 #: settings/models.py:31 terminal/models.py:36 terminal/models.py:321
#: terminal/models.py:358 terminal/templates/terminal/base_storage_list.html:34 #: terminal/models.py:358 terminal/templates/terminal/base_storage_list.html:33
#: terminal/templates/terminal/terminal_detail.html:63 #: terminal/templates/terminal/terminal_detail.html:63
#: tickets/templates/tickets/ticket_detail.html:104 users/models/group.py:16 #: tickets/templates/tickets/ticket_detail.html:104 users/models/group.py:16
#: users/models/user.py:471 users/templates/users/user_detail.html:115 #: users/models/user.py:471 users/templates/users/user_detail.html:115
...@@ -280,7 +280,7 @@ msgstr "备注" ...@@ -280,7 +280,7 @@ msgstr "备注"
#: perms/templates/perms/database_app_permission_detail.html:22 #: perms/templates/perms/database_app_permission_detail.html:22
#: perms/templates/perms/database_app_permission_list.html:17 #: perms/templates/perms/database_app_permission_list.html:17
#: perms/templates/perms/database_app_permission_user.html:23 #: perms/templates/perms/database_app_permission_user.html:23
#: templates/_nav.html:64 templates/_nav.html:83 templates/_nav_user.html:21 #: templates/_nav.html:66 templates/_nav.html:86 templates/_nav_user.html:22
#: users/templates/users/user_database_app_permission.html:39 #: users/templates/users/user_database_app_permission.html:39
#: users/templates/users/user_database_app_permission.html:64 #: users/templates/users/user_database_app_permission.html:64
msgid "DatabaseApp" msgid "DatabaseApp"
...@@ -288,7 +288,7 @@ msgstr "数据库应用" ...@@ -288,7 +288,7 @@ msgstr "数据库应用"
#: applications/models/remote_app.py:28 #: applications/models/remote_app.py:28
#: applications/templates/applications/remote_app_detail.html:56 #: applications/templates/applications/remote_app_detail.html:56
#: applications/templates/applications/remote_app_list.html:27 #: applications/templates/applications/remote_app_list.html:26
#: applications/templates/applications/user_remote_app_list.html:17 #: applications/templates/applications/user_remote_app_list.html:17
#: users/templates/users/user_granted_remote_app.html:35 #: users/templates/users/user_granted_remote_app.html:35
msgid "App type" msgid "App type"
...@@ -364,7 +364,7 @@ msgstr "创建日期" ...@@ -364,7 +364,7 @@ msgstr "创建日期"
#: perms/templates/perms/remote_app_permission_list.html:17 #: perms/templates/perms/remote_app_permission_list.html:17
#: perms/templates/perms/remote_app_permission_remote_app.html:22 #: perms/templates/perms/remote_app_permission_remote_app.html:22
#: perms/templates/perms/remote_app_permission_user.html:22 #: perms/templates/perms/remote_app_permission_user.html:22
#: templates/_nav.html:63 templates/_nav.html:80 templates/_nav_user.html:16 #: templates/_nav.html:64 templates/_nav.html:82 templates/_nav_user.html:16
#: users/templates/users/user_remote_app_permission.html:39 #: users/templates/users/user_remote_app_permission.html:39
#: users/templates/users/user_remote_app_permission.html:64 #: users/templates/users/user_remote_app_permission.html:64
msgid "RemoteApp" msgid "RemoteApp"
...@@ -484,9 +484,9 @@ msgid "Detail" ...@@ -484,9 +484,9 @@ msgid "Detail"
msgstr "详情" msgstr "详情"
#: applications/templates/applications/database_app_detail.html:16 #: applications/templates/applications/database_app_detail.html:16
#: applications/templates/applications/database_app_list.html:54 #: applications/templates/applications/database_app_list.html:53
#: applications/templates/applications/remote_app_detail.html:16 #: applications/templates/applications/remote_app_detail.html:16
#: applications/templates/applications/remote_app_list.html:60 #: applications/templates/applications/remote_app_list.html:59
#: assets/templates/assets/_asset_user_list.html:75 #: assets/templates/assets/_asset_user_list.html:75
#: assets/templates/assets/admin_user_detail.html:19 #: assets/templates/assets/admin_user_detail.html:19
#: assets/templates/assets/admin_user_list.html:46 #: assets/templates/assets/admin_user_list.html:46
...@@ -511,8 +511,8 @@ msgstr "详情" ...@@ -511,8 +511,8 @@ msgstr "详情"
#: perms/templates/perms/remote_app_permission_detail.html:25 #: perms/templates/perms/remote_app_permission_detail.html:25
#: perms/templates/perms/remote_app_permission_list.html:64 #: perms/templates/perms/remote_app_permission_list.html:64
#: templates/_csv_import_export.html:18 templates/_csv_update_modal.html:6 #: templates/_csv_import_export.html:18 templates/_csv_update_modal.html:6
#: terminal/templates/terminal/base_storage_list.html:64 #: terminal/templates/terminal/base_storage_list.html:63
#: terminal/templates/terminal/base_storage_list.html:71 #: terminal/templates/terminal/base_storage_list.html:70
#: terminal/templates/terminal/terminal_detail.html:16 #: terminal/templates/terminal/terminal_detail.html:16
#: terminal/templates/terminal/terminal_list.html:74 #: terminal/templates/terminal/terminal_list.html:74
#: users/templates/users/user_asset_permission.html:127 #: users/templates/users/user_asset_permission.html:127
...@@ -539,9 +539,9 @@ msgid "Update" ...@@ -539,9 +539,9 @@ msgid "Update"
msgstr "更新" msgstr "更新"
#: applications/templates/applications/database_app_detail.html:20 #: applications/templates/applications/database_app_detail.html:20
#: applications/templates/applications/database_app_list.html:55 #: applications/templates/applications/database_app_list.html:54
#: applications/templates/applications/remote_app_detail.html:20 #: applications/templates/applications/remote_app_detail.html:20
#: applications/templates/applications/remote_app_list.html:61 #: applications/templates/applications/remote_app_list.html:60
#: assets/templates/assets/admin_user_detail.html:23 #: assets/templates/assets/admin_user_detail.html:23
#: assets/templates/assets/admin_user_list.html:47 #: assets/templates/assets/admin_user_list.html:47
#: assets/templates/assets/asset_detail.html:28 #: assets/templates/assets/asset_detail.html:28
...@@ -565,8 +565,8 @@ msgstr "更新" ...@@ -565,8 +565,8 @@ msgstr "更新"
#: perms/templates/perms/database_app_permission_list.html:65 #: perms/templates/perms/database_app_permission_list.html:65
#: perms/templates/perms/remote_app_permission_detail.html:29 #: perms/templates/perms/remote_app_permission_detail.html:29
#: perms/templates/perms/remote_app_permission_list.html:65 #: perms/templates/perms/remote_app_permission_list.html:65
#: terminal/templates/terminal/base_storage_list.html:61 #: terminal/templates/terminal/base_storage_list.html:60
#: terminal/templates/terminal/base_storage_list.html:68 #: terminal/templates/terminal/base_storage_list.html:67
#: terminal/templates/terminal/terminal_list.html:76 #: terminal/templates/terminal/terminal_list.html:76
#: users/templates/users/user_asset_permission.html:128 #: users/templates/users/user_asset_permission.html:128
#: users/templates/users/user_database_app_permission.html:111 #: users/templates/users/user_database_app_permission.html:111
...@@ -593,8 +593,8 @@ msgstr "删除" ...@@ -593,8 +593,8 @@ msgstr "删除"
msgid "Create DatabaseApp" msgid "Create DatabaseApp"
msgstr "创建数据库应用" msgstr "创建数据库应用"
#: applications/templates/applications/database_app_list.html:30 #: applications/templates/applications/database_app_list.html:29
#: applications/templates/applications/remote_app_list.html:30 #: applications/templates/applications/remote_app_list.html:29
#: applications/templates/applications/user_database_app_list.html:21 #: applications/templates/applications/user_database_app_list.html:21
#: applications/templates/applications/user_remote_app_list.html:20 #: applications/templates/applications/user_remote_app_list.html:20
#: assets/models/cmd_filter.py:55 #: assets/models/cmd_filter.py:55
...@@ -623,7 +623,7 @@ msgstr "创建数据库应用" ...@@ -623,7 +623,7 @@ msgstr "创建数据库应用"
#: perms/templates/perms/database_app_permission_list.html:20 #: perms/templates/perms/database_app_permission_list.html:20
#: perms/templates/perms/database_app_permission_user.html:54 #: perms/templates/perms/database_app_permission_user.html:54
#: perms/templates/perms/remote_app_permission_list.html:20 #: perms/templates/perms/remote_app_permission_list.html:20
#: terminal/templates/terminal/base_storage_list.html:35 #: terminal/templates/terminal/base_storage_list.html:34
#: terminal/templates/terminal/session_list.html:34 #: terminal/templates/terminal/session_list.html:34
#: terminal/templates/terminal/terminal_list.html:37 #: terminal/templates/terminal/terminal_list.html:37
#: tickets/templates/tickets/ticket_list.html:108 #: tickets/templates/tickets/ticket_list.html:108
...@@ -724,15 +724,7 @@ msgstr "更新节点资产硬件信息: {}" ...@@ -724,15 +724,7 @@ msgstr "更新节点资产硬件信息: {}"
msgid "Test if the assets under the node are connectable: {}" msgid "Test if the assets under the node are connectable: {}"
msgstr "测试节点下资产是否可连接: {}" msgstr "测试节点下资产是否可连接: {}"
#: assets/const.py:8 #: assets/forms/asset.py:65 assets/models/asset.py:194
msgid "Cannot contain special characters: [ {} ]"
msgstr "不能包含特殊字符:[ {} ]"
#: assets/const.py:14
msgid "* The contains characters that are not allowed"
msgstr "* 包含不被允许的字符"
#: assets/forms/asset.py:66 assets/models/asset.py:194
#: assets/models/user.py:111 assets/templates/assets/asset_detail.html:186 #: assets/models/user.py:111 assets/templates/assets/asset_detail.html:186
#: assets/templates/assets/asset_detail.html:194 #: assets/templates/assets/asset_detail.html:194
#: assets/templates/assets/system_user_assets.html:87 #: assets/templates/assets/system_user_assets.html:87
...@@ -743,7 +735,7 @@ msgstr "* 包含不被允许的字符" ...@@ -743,7 +735,7 @@ msgstr "* 包含不被允许的字符"
msgid "Nodes" msgid "Nodes"
msgstr "节点" msgstr "节点"
#: assets/forms/asset.py:69 assets/models/asset.py:198 #: assets/forms/asset.py:68 assets/models/asset.py:198
#: assets/models/cluster.py:19 assets/models/user.py:67 #: assets/models/cluster.py:19 assets/models/user.py:67
#: assets/templates/assets/admin_user_list.html:62 #: assets/templates/assets/admin_user_list.html:62
#: assets/templates/assets/asset_detail.html:72 templates/_nav.html:44 #: assets/templates/assets/asset_detail.html:72 templates/_nav.html:44
...@@ -753,7 +745,7 @@ msgstr "节点" ...@@ -753,7 +745,7 @@ msgstr "节点"
msgid "Admin user" msgid "Admin user"
msgstr "管理用户" msgstr "管理用户"
#: assets/forms/asset.py:72 assets/forms/asset.py:115 #: assets/forms/asset.py:71 assets/forms/asset.py:113
#: assets/templates/assets/asset_create.html:48 #: assets/templates/assets/asset_create.html:48
#: assets/templates/assets/asset_create.html:50 #: assets/templates/assets/asset_create.html:50
#: assets/templates/assets/asset_list.html:13 #: assets/templates/assets/asset_list.html:13
...@@ -761,7 +753,7 @@ msgstr "管理用户" ...@@ -761,7 +753,7 @@ msgstr "管理用户"
msgid "Label" msgid "Label"
msgstr "标签" msgstr "标签"
#: assets/forms/asset.py:75 assets/models/asset.py:193 #: assets/forms/asset.py:74 assets/models/asset.py:193
#: assets/models/domain.py:26 assets/models/domain.py:52 #: assets/models/domain.py:26 assets/models/domain.py:52
#: assets/templates/assets/asset_detail.html:76 #: assets/templates/assets/asset_detail.html:76
#: assets/templates/assets/user_asset_list.html:80 #: assets/templates/assets/user_asset_list.html:80
...@@ -769,15 +761,15 @@ msgstr "标签" ...@@ -769,15 +761,15 @@ msgstr "标签"
msgid "Domain" msgid "Domain"
msgstr "网域" msgstr "网域"
#: assets/forms/asset.py:78 assets/models/asset.py:168 #: assets/forms/asset.py:77 assets/models/asset.py:168
#: assets/models/asset.py:192 assets/serializers/asset.py:70 #: assets/models/asset.py:192 assets/serializers/asset.py:66
#: assets/templates/assets/asset_detail.html:100 #: assets/templates/assets/asset_detail.html:100
#: assets/templates/assets/user_asset_list.html:78 #: assets/templates/assets/user_asset_list.html:78
msgid "Platform" msgid "Platform"
msgstr "系统平台" msgstr "系统平台"
#: assets/forms/asset.py:82 assets/forms/asset.py:118 assets/models/node.py:462 #: assets/forms/asset.py:81 assets/forms/asset.py:116 assets/models/node.py:462
#: assets/serializers/system_user.py:44 #: assets/serializers/system_user.py:40
#: assets/templates/assets/asset_create.html:42 #: assets/templates/assets/asset_create.html:42
#: perms/forms/asset_permission.py:92 perms/forms/asset_permission.py:99 #: perms/forms/asset_permission.py:92 perms/forms/asset_permission.py:99
#: perms/templates/perms/asset_permission_list.html:36 #: perms/templates/perms/asset_permission_list.html:36
...@@ -795,7 +787,7 @@ msgstr "系统平台" ...@@ -795,7 +787,7 @@ msgstr "系统平台"
msgid "Node" msgid "Node"
msgstr "节点" msgstr "节点"
#: assets/forms/asset.py:87 #: assets/forms/asset.py:85
msgid "" msgid ""
"root or other NOPASSWD sudo privilege user existed in asset,If asset is " "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" "windows or other set any one, more see admin user left menu"
...@@ -803,16 +795,16 @@ msgstr "" ...@@ -803,16 +795,16 @@ msgstr ""
"root或其他拥有NOPASSWD: ALL权限的用户, 如果是windows或其它硬件可以随意设置一" "root或其他拥有NOPASSWD: ALL权限的用户, 如果是windows或其它硬件可以随意设置一"
"个, 更多信息查看左侧 `管理用户` 菜单" "个, 更多信息查看左侧 `管理用户` 菜单"
#: assets/forms/asset.py:90 #: assets/forms/asset.py:88
msgid "Windows 2016 RDP protocol is different, If is window 2016, set it" msgid "Windows 2016 RDP protocol is different, If is window 2016, set it"
msgstr "Windows 2016的RDP协议与之前不同,如果是请设置" msgstr "Windows 2016的RDP协议与之前不同,如果是请设置"
#: assets/forms/asset.py:91 #: assets/forms/asset.py:89
msgid "" msgid ""
"If your have some network not connect with each other, you can set domain" "If your have some network not connect with each other, you can set domain"
msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,使用网域网关跳转登录" msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,使用网域网关跳转登录"
#: assets/forms/asset.py:98 assets/forms/asset.py:102 assets/forms/domain.py:17 #: assets/forms/asset.py:96 assets/forms/asset.py:100 assets/forms/domain.py:17
#: assets/forms/label.py:15 #: assets/forms/label.py:15
#: perms/templates/perms/asset_permission_asset.html:74 #: perms/templates/perms/asset_permission_asset.html:74
#: xpack/plugins/change_auth_plan/forms.py:64 #: xpack/plugins/change_auth_plan/forms.py:64
...@@ -832,7 +824,7 @@ msgstr "不能包含特殊字符" ...@@ -832,7 +824,7 @@ msgstr "不能包含特殊字符"
msgid "SSH gateway support proxy SSH,RDP,VNC" msgid "SSH gateway support proxy SSH,RDP,VNC"
msgstr "SSH网关,支持代理SSH,RDP和VNC" msgstr "SSH网关,支持代理SSH,RDP和VNC"
#: assets/forms/domain.py:78 assets/forms/user.py:76 assets/forms/user.py:96 #: assets/forms/domain.py:78 assets/forms/user.py:75 assets/forms/user.py:95
#: assets/models/base.py:28 assets/models/gathered_user.py:15 #: assets/models/base.py:28 assets/models/gathered_user.py:15
#: assets/templates/assets/_asset_user_auth_update_modal.html:15 #: assets/templates/assets/_asset_user_auth_update_modal.html:15
#: assets/templates/assets/_asset_user_auth_view_modal.html:21 #: assets/templates/assets/_asset_user_auth_view_modal.html:21
...@@ -892,11 +884,11 @@ msgstr "" ...@@ -892,11 +884,11 @@ msgstr ""
msgid "Base platform" msgid "Base platform"
msgstr "基础平台" msgstr "基础平台"
#: assets/forms/user.py:26 #: assets/forms/user.py:25
msgid "Password or private key passphrase" msgid "Password or private key passphrase"
msgstr "密码或密钥密码" msgstr "密码或密钥密码"
#: assets/forms/user.py:27 assets/models/base.py:29 #: assets/forms/user.py:26 assets/models/base.py:29
#: assets/serializers/asset_user.py:63 #: assets/serializers/asset_user.py:63
#: assets/templates/assets/_asset_user_auth_update_modal.html:21 #: assets/templates/assets/_asset_user_auth_update_modal.html:21
#: assets/templates/assets/_asset_user_auth_view_modal.html:27 #: assets/templates/assets/_asset_user_auth_view_modal.html:27
...@@ -914,31 +906,31 @@ msgstr "密码或密钥密码" ...@@ -914,31 +906,31 @@ msgstr "密码或密钥密码"
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
#: assets/forms/user.py:30 assets/serializers/asset_user.py:71 #: assets/forms/user.py:29 assets/serializers/asset_user.py:71
#: assets/templates/assets/_asset_user_auth_update_modal.html:27 #: assets/templates/assets/_asset_user_auth_update_modal.html:27
#: users/models/user.py:465 #: users/models/user.py:465
msgid "Private key" msgid "Private key"
msgstr "ssh私钥" msgstr "ssh私钥"
#: assets/forms/user.py:42 #: assets/forms/user.py:41
msgid "Invalid private key, Only support RSA/DSA format key" msgid "Invalid private key, Only support RSA/DSA format key"
msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥" msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥"
#: assets/forms/user.py:53 #: assets/forms/user.py:52
msgid "Password and private key file must be input one" msgid "Password and private key file must be input one"
msgstr "密码和私钥, 必须输入一个" msgstr "密码和私钥, 必须输入一个"
#: assets/forms/user.py:98 assets/models/cmd_filter.py:32 #: assets/forms/user.py:97 assets/models/cmd_filter.py:32
#: assets/models/user.py:119 assets/templates/assets/_system_user.html:62 #: assets/models/user.py:119 assets/templates/assets/_system_user.html:62
#: assets/templates/assets/system_user_detail.html:164 #: assets/templates/assets/system_user_detail.html:164
msgid "Command filter" msgid "Command filter"
msgstr "命令过滤器" msgstr "命令过滤器"
#: assets/forms/user.py:103 #: assets/forms/user.py:101
msgid "Auto push system user to asset" msgid "Auto push system user to asset"
msgstr "自动推送系统用户到资产" msgstr "自动推送系统用户到资产"
#: assets/forms/user.py:104 #: assets/forms/user.py:102
msgid "" msgid ""
"1-100, High level will be using login asset as default, if user was granted " "1-100, High level will be using login asset as default, if user was granted "
"more than 2 system user" "more than 2 system user"
...@@ -946,13 +938,13 @@ msgstr "" ...@@ -946,13 +938,13 @@ msgstr ""
"1-100, 1最低优先级,100最高优先级。授权多个用户时,高优先级的系统用户将会作为" "1-100, 1最低优先级,100最高优先级。授权多个用户时,高优先级的系统用户将会作为"
"默认登录用户" "默认登录用户"
#: assets/forms/user.py:106 #: assets/forms/user.py:104
msgid "" msgid ""
"If you choose manual login mode, you do not need to fill in the username and " "If you choose manual login mode, you do not need to fill in the username and "
"password." "password."
msgstr "如果选择手动登录模式,用户名和密码可以不填写" msgstr "如果选择手动登录模式,用户名和密码可以不填写"
#: assets/forms/user.py:108 #: assets/forms/user.py:106
msgid "Use comma split multi command, ex: /bin/whoami,/bin/ifconfig" msgid "Use comma split multi command, ex: /bin/whoami,/bin/ifconfig"
msgstr "使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig" msgstr "使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig"
...@@ -1019,7 +1011,7 @@ msgstr "主机名" ...@@ -1019,7 +1011,7 @@ msgstr "主机名"
msgid "Protocol" msgid "Protocol"
msgstr "协议" msgstr "协议"
#: assets/models/asset.py:191 assets/serializers/asset.py:72 #: assets/models/asset.py:191 assets/serializers/asset.py:68
#: assets/templates/assets/asset_create.html:24 #: assets/templates/assets/asset_create.html:24
#: assets/templates/assets/user_asset_list.html:77 #: assets/templates/assets/user_asset_list.html:77
#: perms/serializers/user_permission.py:59 #: perms/serializers/user_permission.py:59
...@@ -1058,7 +1050,6 @@ msgid "CPU model" ...@@ -1058,7 +1050,6 @@ msgid "CPU model"
msgstr "CPU型号" msgstr "CPU型号"
#: assets/models/asset.py:210 #: assets/models/asset.py:210
#: xpack/plugins/license/templates/license/license_detail.html:71
msgid "CPU count" msgid "CPU count"
msgstr "CPU数量" msgstr "CPU数量"
...@@ -1314,7 +1305,7 @@ msgstr "默认资产组" ...@@ -1314,7 +1305,7 @@ msgstr "默认资产组"
#: users/templates/users/user_group_list.html:15 #: users/templates/users/user_group_list.html:15
#: users/templates/users/user_remote_app_permission.html:37 #: users/templates/users/user_remote_app_permission.html:37
#: users/templates/users/user_remote_app_permission.html:58 #: users/templates/users/user_remote_app_permission.html:58
#: users/views/profile.py:68 xpack/plugins/orgs/forms.py:28 #: users/views/profile.py:70 xpack/plugins/orgs/forms.py:27
#: xpack/plugins/orgs/templates/orgs/org_detail.html:108 #: xpack/plugins/orgs/templates/orgs/org_detail.html:108
#: xpack/plugins/orgs/templates/orgs/org_list.html:15 #: xpack/plugins/orgs/templates/orgs/org_list.html:15
msgid "User" msgid "User"
...@@ -1449,29 +1440,28 @@ msgid "Reachable" ...@@ -1449,29 +1440,28 @@ msgid "Reachable"
msgstr "可连接" msgstr "可连接"
#: assets/models/utils.py:45 assets/tasks/const.py:86 audits/utils.py:30 #: assets/models/utils.py:45 assets/tasks/const.py:86 audits/utils.py:30
#: xpack/plugins/license/models.py:78
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
#: assets/serializers/asset.py:27 #: assets/serializers/asset.py:23
msgid "Protocol format should {}/{}" msgid "Protocol format should {}/{}"
msgstr "协议格式 {}/{}" msgstr "协议格式 {}/{}"
#: assets/serializers/asset.py:44 #: assets/serializers/asset.py:40
msgid "Protocol duplicate: {}" msgid "Protocol duplicate: {}"
msgstr "协议重复: {}" msgstr "协议重复: {}"
#: assets/serializers/asset.py:73 assets/serializers/asset.py:162 #: assets/serializers/asset.py:69 assets/serializers/asset.py:149
#: assets/serializers/asset_user.py:29 #: assets/serializers/asset_user.py:29
#: assets/templates/assets/_asset_user_list.html:23 #: assets/templates/assets/_asset_user_list.html:23
msgid "Connectivity" msgid "Connectivity"
msgstr "连接" msgstr "连接"
#: assets/serializers/asset.py:99 #: assets/serializers/asset.py:95
msgid "Hardware info" msgid "Hardware info"
msgstr "硬件信息" msgstr "硬件信息"
#: assets/serializers/asset.py:100 orgs/mixins/serializers.py:27 #: assets/serializers/asset.py:96 orgs/mixins/serializers.py:27
msgid "Org name" msgid "Org name"
msgstr "组织名称" msgstr "组织名称"
...@@ -1505,15 +1495,15 @@ msgstr "值" ...@@ -1505,15 +1495,15 @@ msgstr "值"
msgid "The same level node name cannot be the same" msgid "The same level node name cannot be the same"
msgstr "同级别节点名字不能重复" msgstr "同级别节点名字不能重复"
#: assets/serializers/system_user.py:46 #: assets/serializers/system_user.py:42
msgid "Login mode display" msgid "Login mode display"
msgstr "登录模式显示" msgstr "登录模式显示"
#: assets/serializers/system_user.py:90 #: assets/serializers/system_user.py:77
msgid "* Automatic login mode must fill in the username." msgid "* Automatic login mode must fill in the username."
msgstr "自动登录模式,必须填写用户名" msgstr "自动登录模式,必须填写用户名"
#: assets/serializers/system_user.py:101 #: assets/serializers/system_user.py:88
msgid "Password or private key required" msgid "Password or private key required"
msgstr "密码或密钥密码需要一个" msgstr "密码或密钥密码需要一个"
...@@ -1714,7 +1704,7 @@ msgstr "查看" ...@@ -1714,7 +1704,7 @@ msgstr "查看"
#: assets/templates/assets/asset_detail.html:174 #: assets/templates/assets/asset_detail.html:174
#: assets/templates/assets/system_user_assets.html:67 #: assets/templates/assets/system_user_assets.html:67
#: assets/templates/assets/system_user_detail.html:149 #: assets/templates/assets/system_user_detail.html:149
#: terminal/templates/terminal/base_storage_list.html:73 #: terminal/templates/terminal/base_storage_list.html:72
msgid "Test" msgid "Test"
msgstr "测试" msgstr "测试"
...@@ -1922,7 +1912,7 @@ msgstr "资产用户" ...@@ -1922,7 +1912,7 @@ msgstr "资产用户"
#: users/templates/users/user_profile.html:150 #: users/templates/users/user_profile.html:150
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:126 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:126
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:129 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:129
#: xpack/plugins/license/templates/license/license_detail.html:93 #: xpack/plugins/license/templates/license/license_detail.html:80
msgid "Quick modify" msgid "Quick modify"
msgstr "快速修改" msgstr "快速修改"
...@@ -2535,23 +2525,23 @@ msgid "Handlers" ...@@ -2535,23 +2525,23 @@ msgid "Handlers"
msgstr "操作者" msgstr "操作者"
#: audits/views.py:86 audits/views.py:130 audits/views.py:167 #: audits/views.py:86 audits/views.py:130 audits/views.py:167
#: audits/views.py:212 audits/views.py:244 templates/_nav.html:144 #: audits/views.py:212 audits/views.py:244 templates/_nav.html:146
msgid "Audits" msgid "Audits"
msgstr "日志审计" msgstr "日志审计"
#: audits/views.py:87 templates/_nav.html:148 #: audits/views.py:87 templates/_nav.html:150
msgid "FTP log" msgid "FTP log"
msgstr "FTP日志" msgstr "FTP日志"
#: audits/views.py:131 templates/_nav.html:149 #: audits/views.py:131 templates/_nav.html:151
msgid "Operate log" msgid "Operate log"
msgstr "操作日志" msgstr "操作日志"
#: audits/views.py:168 templates/_nav.html:150 #: audits/views.py:168 templates/_nav.html:152
msgid "Password change log" msgid "Password change log"
msgstr "改密日志" msgstr "改密日志"
#: audits/views.py:213 templates/_nav.html:147 #: audits/views.py:213 templates/_nav.html:149
msgid "Login log" msgid "Login log"
msgstr "登录日志" msgstr "登录日志"
...@@ -2654,8 +2644,8 @@ msgid "" ...@@ -2654,8 +2644,8 @@ msgid ""
"after {} minutes)" "after {} minutes)"
msgstr "账号已被锁定(请联系管理员解锁 或 {}分钟后重试)" msgstr "账号已被锁定(请联系管理员解锁 或 {}分钟后重试)"
#: authentication/errors.py:46 users/views/profile.py:204 #: authentication/errors.py:46 users/views/profile.py:202
#: users/views/profile.py:229 #: users/views/profile.py:238
msgid "MFA code invalid, or ntp sync server time" msgid "MFA code invalid, or ntp sync server time"
msgstr "MFA验证码不正确,或者服务器端时间不对" msgstr "MFA验证码不正确,或者服务器端时间不对"
...@@ -2827,15 +2817,15 @@ msgstr "请打开手机Google Authenticator应用,输入6位动态码" ...@@ -2827,15 +2817,15 @@ msgstr "请打开手机Google Authenticator应用,输入6位动态码"
#: authentication/templates/authentication/login_otp.html:65 #: authentication/templates/authentication/login_otp.html:65
#: users/templates/users/user_disable_mfa.html:23 #: users/templates/users/user_disable_mfa.html:23
#: users/templates/users/user_otp_enable_bind.html:26 #: users/templates/users/user_otp_enable_bind.html:25
msgid "Six figures" msgid "Six figures"
msgstr "6位数字" msgstr "6位数字"
#: authentication/templates/authentication/login_otp.html:67 #: authentication/templates/authentication/login_otp.html:67
#: users/templates/users/first_login.html:108 #: users/templates/users/first_login.html:108
#: users/templates/users/user_disable_mfa.html:26 #: users/templates/users/user_disable_mfa.html:26
#: users/templates/users/user_otp_enable_bind.html:29 #: users/templates/users/user_otp_enable_bind.html:28
#: users/templates/users/user_otp_enable_install_app.html:26 #: users/templates/users/user_otp_enable_install_app.html:25
#: users/templates/users/user_password_check.html:16 #: users/templates/users/user_password_check.html:16
msgid "Next" msgid "Next"
msgstr "下一步" msgstr "下一步"
...@@ -2861,7 +2851,7 @@ msgstr "欢迎回来,请输入用户名和密码登录" ...@@ -2861,7 +2851,7 @@ msgstr "欢迎回来,请输入用户名和密码登录"
msgid "Please enable cookies and try again." msgid "Please enable cookies and try again."
msgstr "设置你的浏览器支持cookie" msgstr "设置你的浏览器支持cookie"
#: authentication/views/login.py:158 #: authentication/views/login.py:159
msgid "" msgid ""
"Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n" "Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n"
" Don't close this page" " Don't close this page"
...@@ -2869,15 +2859,15 @@ msgstr "" ...@@ -2869,15 +2859,15 @@ msgstr ""
"等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n" "等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n"
" 不要关闭本页面" " 不要关闭本页面"
#: authentication/views/login.py:163 #: authentication/views/login.py:164
msgid "No ticket found" msgid "No ticket found"
msgstr "没有发现工单" msgstr "没有发现工单"
#: authentication/views/login.py:186 #: authentication/views/login.py:187
msgid "Logout success" msgid "Logout success"
msgstr "退出登录成功" msgstr "退出登录成功"
#: authentication/views/login.py:187 #: authentication/views/login.py:188
msgid "Logout success, return login page" msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面" msgstr "退出登录成功,返回到登录页面"
...@@ -3326,7 +3316,7 @@ msgstr "" ...@@ -3326,7 +3316,7 @@ msgstr ""
msgid "Ops" msgid "Ops"
msgstr "作业中心" msgstr "作业中心"
#: ops/views/adhoc.py:32 templates/_nav.html:122 #: ops/views/adhoc.py:32 templates/_nav.html:124
#: xpack/plugins/gathered_user/views.py:35 #: xpack/plugins/gathered_user/views.py:35
msgid "Task list" msgid "Task list"
msgstr "任务列表" msgstr "任务列表"
...@@ -3410,7 +3400,7 @@ msgstr "上传下载" ...@@ -3410,7 +3400,7 @@ msgstr "上传下载"
msgid "Actions" msgid "Actions"
msgstr "动作" msgstr "动作"
#: perms/models/asset_permission.py:87 templates/_nav.html:76 #: perms/models/asset_permission.py:87 templates/_nav.html:78
#: tickets/templates/tickets/ticket_list.html:22 #: tickets/templates/tickets/ticket_list.html:22
#: users/templates/users/_user_detail_nav_header.html:31 #: users/templates/users/_user_detail_nav_header.html:31
#: users/views/user.py:221 #: users/views/user.py:221
...@@ -3507,7 +3497,6 @@ msgstr "有效期" ...@@ -3507,7 +3497,6 @@ msgstr "有效期"
#: perms/templates/perms/asset_permission_detail.html:61 #: perms/templates/perms/asset_permission_detail.html:61
#: perms/templates/perms/database_app_permission_detail.html:61 #: perms/templates/perms/database_app_permission_detail.html:61
#: perms/templates/perms/remote_app_permission_detail.html:61 #: perms/templates/perms/remote_app_permission_detail.html:61
#: xpack/plugins/license/templates/license/license_detail.html:67
msgid "User count" msgid "User count"
msgstr "用户数量" msgstr "用户数量"
...@@ -3657,7 +3646,7 @@ msgstr "添加用户组" ...@@ -3657,7 +3646,7 @@ msgstr "添加用户组"
#: perms/views/remote_app_permission.py:66 #: perms/views/remote_app_permission.py:66
#: perms/views/remote_app_permission.py:84 #: perms/views/remote_app_permission.py:84
#: perms/views/remote_app_permission.py:116 #: perms/views/remote_app_permission.py:116
#: perms/views/remote_app_permission.py:149 templates/_nav.html:73 #: perms/views/remote_app_permission.py:149 templates/_nav.html:75
#: xpack/plugins/orgs/templates/orgs/org_list.html:22 #: xpack/plugins/orgs/templates/orgs/org_list.html:22
msgid "Perms" msgid "Perms"
msgstr "权限管理" msgstr "权限管理"
...@@ -4094,7 +4083,7 @@ msgstr "当前无勾选用户,请勾选你想要导入的用户" ...@@ -4094,7 +4083,7 @@ msgstr "当前无勾选用户,请勾选你想要导入的用户"
#: settings/templates/settings/_ldap_list_users_modal.html:172 #: settings/templates/settings/_ldap_list_users_modal.html:172
#: templates/_csv_import_export.html:13 templates/_csv_import_modal.html:5 #: templates/_csv_import_export.html:13 templates/_csv_import_modal.html:5
#: xpack/plugins/license/templates/license/license_detail.html:101 #: xpack/plugins/license/templates/license/license_detail.html:88
msgid "Import" msgid "Import"
msgstr "导入" msgstr "导入"
...@@ -4150,7 +4139,7 @@ msgstr "这里" ...@@ -4150,7 +4139,7 @@ msgstr "这里"
#: settings/views.py:19 settings/views.py:46 settings/views.py:73 #: settings/views.py:19 settings/views.py:46 settings/views.py:73
#: settings/views.py:105 settings/views.py:134 settings/views.py:161 #: settings/views.py:105 settings/views.py:134 settings/views.py:161
#: templates/_nav.html:185 #: templates/_nav.html:187
msgid "Settings" msgid "Settings"
msgstr "系统设置" msgstr "系统设置"
...@@ -4187,7 +4176,7 @@ msgstr "下载更新模版" ...@@ -4187,7 +4176,7 @@ msgstr "下载更新模版"
msgid "Help" msgid "Help"
msgstr "帮助" msgstr "帮助"
#: templates/_header_bar.html:19 templates/_without_nav_base.html:27 #: templates/_header_bar.html:19 templates/_without_nav_base.html:28
msgid "Docs" msgid "Docs"
msgstr "文档" msgstr "文档"
...@@ -4203,7 +4192,7 @@ msgstr "商业支持" ...@@ -4203,7 +4192,7 @@ msgstr "商业支持"
#: users/templates/users/user_profile.html:17 #: users/templates/users/user_profile.html:17
#: users/templates/users/user_profile_update.html:37 #: users/templates/users/user_profile_update.html:37
#: users/templates/users/user_profile_update.html:61 #: users/templates/users/user_profile_update.html:61
#: users/templates/users/user_pubkey_update.html:37 users/views/profile.py:49 #: users/templates/users/user_pubkey_update.html:37 users/views/profile.py:51
msgid "Profile" msgid "Profile"
msgstr "个人信息" msgstr "个人信息"
...@@ -4298,8 +4287,8 @@ msgstr "" ...@@ -4298,8 +4287,8 @@ msgstr ""
#: templates/_nav.html:17 users/views/group.py:28 users/views/group.py:45 #: templates/_nav.html:17 users/views/group.py:28 users/views/group.py:45
#: users/views/group.py:63 users/views/group.py:82 users/views/group.py:99 #: users/views/group.py:63 users/views/group.py:82 users/views/group.py:99
#: users/views/login.py:158 users/views/profile.py:88 #: users/views/login.py:158 users/views/profile.py:90
#: users/views/profile.py:123 users/views/user.py:50 users/views/user.py:67 #: users/views/profile.py:125 users/views/user.py:50 users/views/user.py:67
#: users/views/user.py:111 users/views/user.py:178 users/views/user.py:206 #: users/views/user.py:111 users/views/user.py:178 users/views/user.py:206
#: users/views/user.py:220 users/views/user.py:234 users/views/user.py:248 #: users/views/user.py:220 users/views/user.py:234 users/views/user.py:248
#: users/views/user.py:262 users/views/user.py:276 #: users/views/user.py:262 users/views/user.py:276
...@@ -4314,69 +4303,69 @@ msgstr "用户列表" ...@@ -4314,69 +4303,69 @@ msgstr "用户列表"
msgid "Command filters" msgid "Command filters"
msgstr "命令过滤" msgstr "命令过滤"
#: templates/_nav.html:95 terminal/views/command.py:21 #: templates/_nav.html:97 terminal/views/command.py:21
#: terminal/views/session.py:43 terminal/views/session.py:54 #: terminal/views/session.py:43 terminal/views/session.py:54
#: terminal/views/session.py:78 terminal/views/terminal.py:32 #: terminal/views/session.py:78 terminal/views/terminal.py:32
#: terminal/views/terminal.py:48 terminal/views/terminal.py:61 #: terminal/views/terminal.py:48 terminal/views/terminal.py:61
msgid "Sessions" msgid "Sessions"
msgstr "会话管理" msgstr "会话管理"
#: templates/_nav.html:98 #: templates/_nav.html:100
msgid "Session online" msgid "Session online"
msgstr "在线会话" msgstr "在线会话"
#: templates/_nav.html:99 terminal/views/session.py:55 #: templates/_nav.html:101 terminal/views/session.py:55
msgid "Session offline" msgid "Session offline"
msgstr "历史会话" msgstr "历史会话"
#: templates/_nav.html:100 #: templates/_nav.html:102
msgid "Commands" msgid "Commands"
msgstr "命令记录" msgstr "命令记录"
#: templates/_nav.html:103 templates/_nav_user.html:42 #: templates/_nav.html:105 templates/_nav_user.html:42
msgid "Web terminal" msgid "Web terminal"
msgstr "Web终端" msgstr "Web终端"
#: templates/_nav.html:104 templates/_nav_user.html:47 #: templates/_nav.html:106 templates/_nav_user.html:47
msgid "File manager" msgid "File manager"
msgstr "文件管理" msgstr "文件管理"
#: templates/_nav.html:108 terminal/views/storage.py:27 #: templates/_nav.html:110 terminal/views/storage.py:27
#: terminal/views/storage.py:42 terminal/views/storage.py:96 #: terminal/views/storage.py:42 terminal/views/storage.py:96
#: terminal/views/storage.py:120 terminal/views/storage.py:149 #: terminal/views/storage.py:120 terminal/views/storage.py:149
#: terminal/views/storage.py:175 #: terminal/views/storage.py:175
msgid "Terminal" msgid "Terminal"
msgstr "终端管理" msgstr "终端管理"
#: templates/_nav.html:119 #: templates/_nav.html:121
msgid "Job Center" msgid "Job Center"
msgstr "作业中心" msgstr "作业中心"
#: templates/_nav.html:123 templates/_nav.html:151 #: templates/_nav.html:125 templates/_nav.html:153
msgid "Batch command" msgid "Batch command"
msgstr "批量命令" msgstr "批量命令"
#: templates/_nav.html:125 #: templates/_nav.html:127
msgid "Task monitor" msgid "Task monitor"
msgstr "任务监控" msgstr "任务监控"
#: templates/_nav.html:135 tickets/views.py:19 tickets/views.py:37 #: templates/_nav.html:137 tickets/views.py:19 tickets/views.py:37
msgid "Tickets" msgid "Tickets"
msgstr "工单管理" msgstr "工单管理"
#: templates/_nav.html:161 #: templates/_nav.html:163
msgid "XPack" msgid "XPack"
msgstr "" msgstr ""
#: templates/_nav.html:169 xpack/plugins/cloud/views.py:28 #: templates/_nav.html:171 xpack/plugins/cloud/views.py:28
msgid "Account list" msgid "Account list"
msgstr "账户列表" msgstr "账户列表"
#: templates/_nav.html:170 #: templates/_nav.html:172
msgid "Sync instance" msgid "Sync instance"
msgstr "同步实例" msgstr "同步实例"
#: templates/_nav_user.html:11 #: templates/_nav_user.html:10
msgid "My Applications" msgid "My Applications"
msgstr "我的应用" msgstr "我的应用"
...@@ -4385,7 +4374,7 @@ msgid "" ...@@ -4385,7 +4374,7 @@ msgid ""
"Displays the results of items _START_ to _END_; A total of _TOTAL_ entries" "Displays the results of items _START_ to _END_; A total of _TOTAL_ entries"
msgstr "显示第 _START_ 至 _END_ 项结果; 总共 _TOTAL_ 项" msgstr "显示第 _START_ 至 _END_ 项结果; 总共 _TOTAL_ 项"
#: templates/_without_nav_base.html:25 #: templates/_without_nav_base.html:26
msgid "Home page" msgid "Home page"
msgstr "首页" msgstr "首页"
...@@ -5037,7 +5026,7 @@ msgid "Could not reset self otp, use profile reset instead" ...@@ -5037,7 +5026,7 @@ msgid "Could not reset self otp, use profile reset instead"
msgstr "不能再该页面重置MFA, 请去个人信息页面重置" msgstr "不能再该页面重置MFA, 请去个人信息页面重置"
#: users/forms/group.py:19 users/forms/user.py:143 users/forms/user.py:148 #: users/forms/group.py:19 users/forms/user.py:143 users/forms/user.py:148
#: xpack/plugins/orgs/forms.py:18 #: xpack/plugins/orgs/forms.py:17
msgid "Select users" msgid "Select users"
msgstr "选择用户" msgstr "选择用户"
...@@ -5138,7 +5127,7 @@ msgstr "复制用户公钥到这里" ...@@ -5138,7 +5127,7 @@ msgstr "复制用户公钥到这里"
msgid "Join user groups" msgid "Join user groups"
msgstr "添加到用户组" msgstr "添加到用户组"
#: users/forms/user.py:103 users/views/login.py:119 users/views/profile.py:105 #: users/forms/user.py:103 users/views/login.py:119 users/views/profile.py:107
msgid "* Your password does not meet the requirements" msgid "* Your password does not meet the requirements"
msgstr "* 您的密码不符合要求" msgstr "* 您的密码不符合要求"
...@@ -5162,7 +5151,7 @@ msgstr "密码策略" ...@@ -5162,7 +5151,7 @@ msgstr "密码策略"
msgid "Administrator" msgid "Administrator"
msgstr "管理员" msgstr "管理员"
#: users/models/user.py:145 xpack/plugins/orgs/forms.py:30 #: users/models/user.py:145 xpack/plugins/orgs/forms.py:29
#: xpack/plugins/orgs/templates/orgs/org_list.html:14 #: xpack/plugins/orgs/templates/orgs/org_list.html:14
msgid "Auditor" msgid "Auditor"
msgstr "审计员" msgstr "审计员"
...@@ -5595,7 +5584,7 @@ msgstr "Android手机下载" ...@@ -5595,7 +5584,7 @@ msgstr "Android手机下载"
msgid "iPhone downloads" msgid "iPhone downloads"
msgstr "iPhone手机下载" msgstr "iPhone手机下载"
#: users/templates/users/user_otp_enable_install_app.html:23 #: users/templates/users/user_otp_enable_install_app.html:22
msgid "" msgid ""
"After installation, click the next step to enter the binding page (if " "After installation, click the next step to enter the binding page (if "
"installed, go to the next step directly)." "installed, go to the next step directly)."
...@@ -5899,35 +5888,35 @@ msgstr "Token错误或失效" ...@@ -5899,35 +5888,35 @@ msgstr "Token错误或失效"
msgid "First login" msgid "First login"
msgstr "首次登录" msgstr "首次登录"
#: users/views/profile.py:69 #: users/views/profile.py:71
msgid "Profile setting" msgid "Profile setting"
msgstr "个人信息设置" msgstr "个人信息设置"
#: users/views/profile.py:89 #: users/views/profile.py:91
msgid "Password update" msgid "Password update"
msgstr "密码更新" msgstr "密码更新"
#: users/views/profile.py:124 #: users/views/profile.py:126
msgid "Public key update" msgid "Public key update"
msgstr "密钥更新" msgstr "密钥更新"
#: users/views/profile.py:152 #: users/views/profile.py:154
msgid "Password invalid" msgid "Password invalid"
msgstr "用户名或密码无效" msgstr "用户名或密码无效"
#: users/views/profile.py:256 #: users/views/profile.py:265
msgid "MFA enable success" msgid "MFA enable success"
msgstr "MFA 绑定成功" msgstr "MFA 绑定成功"
#: users/views/profile.py:257 #: users/views/profile.py:266
msgid "MFA enable success, return login page" msgid "MFA enable success, return login page"
msgstr "MFA 绑定成功,返回到登录页面" msgstr "MFA 绑定成功,返回到登录页面"
#: users/views/profile.py:259 #: users/views/profile.py:268
msgid "MFA disable success" msgid "MFA disable success"
msgstr "MFA 解绑成功" msgstr "MFA 解绑成功"
#: users/views/profile.py:260 #: users/views/profile.py:269
msgid "MFA disable success, return login page" msgid "MFA disable success, return login page"
msgstr "MFA 解绑成功,返回登录页面" msgstr "MFA 解绑成功,返回登录页面"
...@@ -6191,7 +6180,7 @@ msgstr "选择实例" ...@@ -6191,7 +6180,7 @@ msgstr "选择实例"
msgid "Select node" msgid "Select node"
msgstr "选择节点" msgstr "选择节点"
#: xpack/plugins/cloud/forms.py:82 xpack/plugins/orgs/forms.py:21 #: xpack/plugins/cloud/forms.py:82 xpack/plugins/orgs/forms.py:20
msgid "Select admins" msgid "Select admins"
msgstr "选择管理员" msgstr "选择管理员"
...@@ -6540,8 +6529,14 @@ msgstr "标准版" ...@@ -6540,8 +6529,14 @@ msgstr "标准版"
msgid "Enterprise edition" msgid "Enterprise edition"
msgstr "企业版" msgstr "企业版"
#: xpack/plugins/license/models.py:78
#, fuzzy
#| msgid "Enterprise edition"
msgid "Ultimate edition"
msgstr "企业版"
#: xpack/plugins/license/templates/license/_license_import_modal.html:4 #: xpack/plugins/license/templates/license/_license_import_modal.html:4
#: xpack/plugins/license/templates/license/license_detail.html:99 #: xpack/plugins/license/templates/license/license_detail.html:86
msgid "Import license" msgid "Import license"
msgstr "导入许可证" msgstr "导入许可证"
...@@ -6587,26 +6582,15 @@ msgstr "公司" ...@@ -6587,26 +6582,15 @@ msgstr "公司"
msgid "Expired" msgid "Expired"
msgstr "过期时间" msgstr "过期时间"
#: xpack/plugins/license/templates/license/license_detail.html:64 #: xpack/plugins/license/templates/license/license_detail.html:67
#: xpack/plugins/license/templates/license/license_detail.html:68
#: xpack/plugins/license/templates/license/license_detail.html:72
#: xpack/plugins/license/templates/license/license_detail.html:76
msgid "Unlimited"
msgstr "无限制"
#: xpack/plugins/license/templates/license/license_detail.html:75
msgid "Concurrent connections"
msgstr "并发连接"
#: xpack/plugins/license/templates/license/license_detail.html:80
msgid "Edition" msgid "Edition"
msgstr "版本" msgstr "版本"
#: xpack/plugins/license/templates/license/license_detail.html:106 #: xpack/plugins/license/templates/license/license_detail.html:93
msgid "Technology consulting" msgid "Technology consulting"
msgstr "技术咨询" msgstr "技术咨询"
#: xpack/plugins/license/templates/license/license_detail.html:109 #: xpack/plugins/license/templates/license/license_detail.html:96
msgid "Consult" msgid "Consult"
msgstr "咨询" msgstr "咨询"
...@@ -6618,11 +6602,11 @@ msgstr "许可证导入成功" ...@@ -6618,11 +6602,11 @@ msgstr "许可证导入成功"
msgid "License is invalid" msgid "License is invalid"
msgstr "无效的许可证" msgstr "无效的许可证"
#: xpack/plugins/orgs/forms.py:24 #: xpack/plugins/orgs/forms.py:23
msgid "Select auditor" msgid "Select auditor"
msgstr "选择审计员" msgstr "选择审计员"
#: xpack/plugins/orgs/forms.py:29 #: xpack/plugins/orgs/forms.py:28
#: xpack/plugins/orgs/templates/orgs/org_detail.html:71 #: xpack/plugins/orgs/templates/orgs/org_detail.html:71
#: xpack/plugins/orgs/templates/orgs/org_list.html:13 #: xpack/plugins/orgs/templates/orgs/org_list.html:13
msgid "Admin" msgid "Admin"
...@@ -6682,6 +6666,12 @@ msgstr "密码匣子" ...@@ -6682,6 +6666,12 @@ msgstr "密码匣子"
msgid "vault create" msgid "vault create"
msgstr "创建" msgstr "创建"
#~ msgid "Unlimited"
#~ msgstr "无限制"
#~ msgid "Concurrent connections"
#~ msgstr "并发连接"
#~ msgid "Update assets" #~ msgid "Update assets"
#~ msgstr "更新资产" #~ msgstr "更新资产"
......
...@@ -119,12 +119,6 @@ ...@@ -119,12 +119,6 @@
check: { check: {
enable: true enable: true
}, },
async: {
enable: true,
url: url,
autoParam: ["id=key", "name=n", "level=lv"],
type: 'get'
},
view: { view: {
dblClickExpand: false, dblClickExpand: false,
showLine: true showLine: true
......
...@@ -4,10 +4,6 @@ from rest_framework.serializers import ModelSerializer ...@@ -4,10 +4,6 @@ from rest_framework.serializers import ModelSerializer
from rest_framework import serializers from rest_framework import serializers
from users.models import User, UserGroup from users.models import User, UserGroup
from assets.models import Asset, Domain, AdminUser, SystemUser, Label from assets.models import Asset, Domain, AdminUser, SystemUser, Label
from assets.const import (
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN,
GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
)
from perms.models import AssetPermission from perms.models import AssetPermission
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from .utils import set_current_org, get_current_org from .utils import set_current_org, get_current_org
...@@ -22,15 +18,6 @@ class OrgSerializer(ModelSerializer): ...@@ -22,15 +18,6 @@ class OrgSerializer(ModelSerializer):
fields = '__all__' fields = '__all__'
read_only_fields = ['created_by', 'date_created'] read_only_fields = ['created_by', 'date_created']
@staticmethod
def validate_name(name):
pattern = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN
res = re.search(pattern, name)
if res is not None:
msg = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
raise serializers.ValidationError(msg)
return name
class OrgReadSerializer(ModelSerializer): class OrgReadSerializer(ModelSerializer):
admins = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True) admins = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True)
......
...@@ -1237,7 +1237,7 @@ function toSafeDateISOStr(s) { ...@@ -1237,7 +1237,7 @@ function toSafeDateISOStr(s) {
function toSafeLocalDateStr(d) { function toSafeLocalDateStr(d) {
var date = safeDate(d); var date = safeDate(d);
var date_s = date.toLocaleString(navigator.language, {hour12: false}); var date_s = date.toLocaleString(getUserLang(), {hour12: false});
return date_s.split("/").join('-') return date_s.split("/").join('-')
} }
...@@ -1257,7 +1257,7 @@ function getTimeUnits(u) { ...@@ -1257,7 +1257,7 @@ function getTimeUnits(u) {
"m": "分", "m": "分",
"s": "秒", "s": "秒",
}; };
if (navigator.language === "zh-CN") { if (getUserLang() === "zh-CN") {
return units[u] return units[u]
} }
return u return u
...@@ -1395,6 +1395,16 @@ function showCeleryTaskLog(taskId) { ...@@ -1395,6 +1395,16 @@ function showCeleryTaskLog(taskId) {
window.open(url, '', 'width=900,height=600') window.open(url, '', 'width=900,height=600')
} }
function getUserLang(){
let userLangZh = document.cookie.indexOf('django_language=zh');
if (userLangZh !== -1){
return 'zh-CN'
}
else{
return 'en-US'
}
}
function initDateRangePicker(selector, options) { function initDateRangePicker(selector, options) {
if (!options) { if (!options) {
options = {} options = {}
...@@ -1408,6 +1418,15 @@ function initDateRangePicker(selector, options) { ...@@ -1408,6 +1418,15 @@ function initDateRangePicker(selector, options) {
daysOfWeek: ["日", "一", "二", "三", "四", "五", "六"],//汉化处理 daysOfWeek: ["日", "一", "二", "三", "四", "五", "六"],//汉化处理
monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], monthNames: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
}; };
var enLocale = {
format: "YYYY-MM-DD HH:mm",
separator: " - ",
applyLabel: "Apply",
cancelLabel: "Cancel",
resetLabel: "Reset",
daysOfWeek: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
};
var defaultOption = { var defaultOption = {
singleDatePicker: true, singleDatePicker: true,
showDropdowns: true, showDropdowns: true,
...@@ -1415,10 +1434,13 @@ function initDateRangePicker(selector, options) { ...@@ -1415,10 +1434,13 @@ function initDateRangePicker(selector, options) {
timePicker24Hour: true, timePicker24Hour: true,
autoApply: true, autoApply: true,
}; };
var userLang = navigator.language || navigator.userLanguage; if (getUserLang() === 'zh-CN') {
if (userLang.indexOf('zh') !== -1) {
defaultOption.locale = zhLocale; defaultOption.locale = zhLocale;
} }
else{
// en-US
defaultOption.locale = enLocale;
}
options = Object.assign(defaultOption, options); options = Object.assign(defaultOption, options);
return $(selector).daterangepicker(options); return $(selector).daterangepicker(options);
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<script src="{% static "js/plugins/toastr/toastr.min.js" %}"></script> <script src="{% static "js/plugins/toastr/toastr.min.js" %}"></script>
<script src="{% static "js/inspinia.js" %}"></script> <script src="{% static "js/inspinia.js" %}"></script>
<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script> <script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
<script src="{% static "js/jumpserver.js" %}?v=6"></script> <script src="{% static "js/jumpserver.js" %}?v=7"></script>
<script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script> <script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script>
<script src="{% static 'js/plugins/select2/i18n/zh-CN.js' %}"></script> <script src="{% static 'js/plugins/select2/i18n/zh-CN.js' %}"></script>
<script> <script>
...@@ -18,9 +18,6 @@ $(document).ready(function(){ ...@@ -18,9 +18,6 @@ $(document).ready(function(){
if ($('.tooltip')[0]) { if ($('.tooltip')[0]) {
$('.tooltip').tooltip(); $('.tooltip').tooltip();
} }
var userLang = navigator.language || navigator.userLanguage; $.fn.select2.defaults.set('language', getUserLang())
if (userLang.indexOf('zh') !== -1) {
$.fn.select2.defaults.set('language', 'zh-CN')
}
}); });
</script> </script>
...@@ -54,13 +54,15 @@ ...@@ -54,13 +54,15 @@
{# Applications #} {# Applications #}
{% if request.user.can_admin_current_org and LICENSE_VALID %} {% if request.user.can_admin_current_org %}
<li id="applications"> <li id="applications">
<a> <a>
<i class="fa fa-th" style="width: 14px"></i> <span class="nav-label">{% trans 'Applications' %}</span><span class="fa arrow"></span> <i class="fa fa-th" style="width: 14px"></i> <span class="nav-label">{% trans 'Applications' %}</span><span class="fa arrow"></span>
</a> </a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
{% if LICENSE_VALID %}
<li id="remote-app"><a href="{% url 'applications:remote-app-list' %}">{% trans 'RemoteApp' %}</a></li> <li id="remote-app"><a href="{% url 'applications:remote-app-list' %}">{% trans 'RemoteApp' %}</a></li>
{% endif %}
<li id="database-app"><a href="{% url 'applications:database-app-list' %}">{% trans 'DatabaseApp' %}</a></li> <li id="database-app"><a href="{% url 'applications:database-app-list' %}">{% trans 'DatabaseApp' %}</a></li>
</ul> </ul>
</li> </li>
...@@ -79,10 +81,10 @@ ...@@ -79,10 +81,10 @@
<li id="remote-app-permission"> <li id="remote-app-permission">
<a href="{% url 'perms:remote-app-permission-list' %}">{% trans 'RemoteApp' %}</a> <a href="{% url 'perms:remote-app-permission-list' %}">{% trans 'RemoteApp' %}</a>
</li> </li>
{% endif %}
<li id="database-app-permission"> <li id="database-app-permission">
<a href="{% url 'perms:database-app-permission-list' %}">{% trans 'DatabaseApp' %}</a> <a href="{% url 'perms:database-app-permission-list' %}">{% trans 'DatabaseApp' %}</a>
</li> </li>
{% endif %}
</ul> </ul>
</li> </li>
{% endif %} {% endif %}
......
...@@ -5,17 +5,18 @@ ...@@ -5,17 +5,18 @@
</a> </a>
</li> </li>
{% if LICENSE_VALID %}
<li id="applications"> <li id="applications">
<a> <a>
<i class="fa fa-th" style="width: 14px"></i> <span class="nav-label">{% trans 'My Applications' %}</span><span class="fa arrow"></span> <i class="fa fa-th" style="width: 14px"></i> <span class="nav-label">{% trans 'My Applications' %}</span><span class="fa arrow"></span>
</a> </a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
{% if LICENSE_VALID %}
<li id="user-remote-app"> <li id="user-remote-app">
<a href="{% url 'applications:user-remote-app-list' %}"> <a href="{% url 'applications:user-remote-app-list' %}">
<i class="" style="width: 14px"></i><span class="nav-label">{% trans 'RemoteApp' %}</span><span class="label label-info pull-right"></span> <i class="" style="width: 14px"></i><span class="nav-label">{% trans 'RemoteApp' %}</span><span class="label label-info pull-right"></span>
</a> </a>
</li> </li>
{% endif %}
<li id="user-database-app"> <li id="user-database-app">
<a href="{% url 'applications:user-database-app-list' %}"> <a href="{% url 'applications:user-database-app-list' %}">
<i class="" style="width: 14px"></i><span class="nav-label">{% trans 'DatabaseApp' %}</span><span class="label label-info pull-right"></span> <i class="" style="width: 14px"></i><span class="nav-label">{% trans 'DatabaseApp' %}</span><span class="label label-info pull-right"></span>
...@@ -23,7 +24,6 @@ ...@@ -23,7 +24,6 @@
</li> </li>
</ul> </ul>
</li> </li>
{% endif %}
{% if SECURITY_COMMAND_EXECUTION %} {% if SECURITY_COMMAND_EXECUTION %}
<li id="ops"> <li id="ops">
......
...@@ -41,7 +41,7 @@ class Migration(migrations.Migration): ...@@ -41,7 +41,7 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='session', model_name='session',
name='asset', name='asset',
field=models.CharField(db_index=True, max_length=1024, field=models.CharField(db_index=True, max_length=128,
verbose_name='Asset'), verbose_name='Asset'),
), ),
migrations.AlterField( migrations.AlterField(
......
...@@ -175,7 +175,7 @@ class Session(OrgModelMixin): ...@@ -175,7 +175,7 @@ class Session(OrgModelMixin):
id = models.UUIDField(default=uuid.uuid4, primary_key=True) id = models.UUIDField(default=uuid.uuid4, primary_key=True)
user = models.CharField(max_length=128, verbose_name=_("User"), db_index=True) user = models.CharField(max_length=128, verbose_name=_("User"), db_index=True)
user_id = models.CharField(blank=True, default='', max_length=36, db_index=True) user_id = models.CharField(blank=True, default='', max_length=36, db_index=True)
asset = models.CharField(max_length=1024, verbose_name=_("Asset"), db_index=True) asset = models.CharField(max_length=128, verbose_name=_("Asset"), db_index=True)
asset_id = models.CharField(blank=True, default='', max_length=36, db_index=True) asset_id = models.CharField(blank=True, default='', max_length=36, db_index=True)
system_user = models.CharField(max_length=128, verbose_name=_("System user"), db_index=True) system_user = models.CharField(max_length=128, verbose_name=_("System user"), db_index=True)
system_user_id = models.CharField(blank=True, default='', max_length=36, db_index=True) system_user_id = models.CharField(blank=True, default='', max_length=36, db_index=True)
......
...@@ -13,10 +13,9 @@ ...@@ -13,10 +13,9 @@
<div id="my-tickets" class="tab-pane active"> <div id="my-tickets" class="tab-pane active">
<div class="panel-body"> <div class="panel-body">
<div class="btn-group uc pull-left m-r-5"> <div class="btn-group uc pull-left m-r-5">
<button class="btn btn-sm btn-primary"> <button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle">
{% block create_storage_info %}{% endblock %} {% block create_storage_info %}{% endblock %}
</button> <span class="caret"></span></button>
<button data-toggle="dropdown" class="btn btn-primary btn-sm dropdown-toggle"><span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for key, value in type_choices %} {% for key, value in type_choices %}
<li><a class="" href="{% block create_storage_url %}{% endblock %}?type={{ key }}">{{ value }}</a></li> <li><a class="" href="{% block create_storage_url %}{% endblock %}?type={{ key }}">{{ value }}</a></li>
......
...@@ -86,7 +86,7 @@ $(document).ready(function () { ...@@ -86,7 +86,7 @@ $(document).ready(function () {
forceParse: false, forceParse: false,
calendarWeeks: true, calendarWeeks: true,
autoclose: true, autoclose: true,
language: navigator.language || "en", language: getUserLang(),
}; };
dateFromRef.datepicker(options).on("changeDate", function () { dateFromRef.datepicker(options).on("changeDate", function () {
var value = $(this).val() + ' 0:0:0'; var value = $(this).val() + ' 0:0:0';
......
...@@ -193,7 +193,7 @@ $(document).ready(function() { ...@@ -193,7 +193,7 @@ $(document).ready(function() {
forceParse: false, forceParse: false,
calendarWeeks: true, calendarWeeks: true,
autoclose: true, autoclose: true,
language: navigator.language || "en", language: getUserLang(),
}; };
dateFromRef.datepicker(options).on("changeDate", function () { dateFromRef.datepicker(options).on("changeDate", function () {
if (!$(this).val()) { if (!$(this).val()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment