Unverified Commit bf5acf7e authored by 老广's avatar 老广 Committed by GitHub

[Update] 修复系统用户管理用户提及重置密码的bug (#2899)

* [Update] 修复系统用户管理用户提及重置密码的bug

* [Update]  去掉forms

* [Update] 修改翻译

* [Update] 去掉debug信息
parent 4c342467
...@@ -65,17 +65,7 @@ class PasswordAndKeyAuthForm(forms.ModelForm): ...@@ -65,17 +65,7 @@ class PasswordAndKeyAuthForm(forms.ModelForm):
class AdminUserForm(PasswordAndKeyAuthForm): class AdminUserForm(PasswordAndKeyAuthForm):
def save(self, commit=True): def save(self, commit=True):
# Because we define custom field, so we need rewrite :method: `save` raise forms.ValidationError("Use api to save")
admin_user = super().save(commit=commit)
password = self.cleaned_data.get('password', '') or None
private_key, public_key = super().gen_keys()
admin_user.set_auth(password=password, public_key=public_key, private_key=private_key)
return admin_user
def clean(self):
super().clean()
if not self.instance:
super().validate_password_key()
class Meta: class Meta:
model = AdminUser model = AdminUser
...@@ -91,51 +81,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm): ...@@ -91,51 +81,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm):
auto_generate_key = forms.BooleanField(initial=True, required=False) auto_generate_key = forms.BooleanField(initial=True, required=False)
def save(self, commit=True): def save(self, commit=True):
# Because we define custom field, so we need rewrite :method: `save` raise forms.ValidationError("Use api to save")
system_user = super().save()
password = self.cleaned_data.get('password', '') or None
login_mode = self.cleaned_data.get('login_mode', '') or None
protocol = self.cleaned_data.get('protocol') or None
auto_generate_key = self.cleaned_data.get('auto_generate_key', False)
private_key, public_key = super().gen_keys()
if login_mode == SystemUser.LOGIN_MANUAL or \
protocol in [SystemUser.PROTOCOL_TELNET,
SystemUser.PROTOCOL_VNC]:
system_user.auto_push = 0
system_user.save()
auto_generate_key = False
if auto_generate_key:
logger.info('Auto generate key and set system user auth')
if protocol == SystemUser.PROTOCOL_SSH:
system_user.auto_gen_auth()
elif protocol == SystemUser.PROTOCOL_RDP:
system_user.auto_gen_auth_password()
else:
system_user.set_auth(password=password, private_key=private_key,
public_key=public_key)
return system_user
def clean(self):
super().clean()
auto_generate = self.cleaned_data.get('auto_generate_key')
if not self.instance and not auto_generate:
super().validate_password_key()
def clean_username(self):
username = self.data.get('username')
login_mode = self.data.get('login_mode')
protocol = self.data.get('protocol')
if username:
return username
if login_mode == SystemUser.LOGIN_AUTO and \
protocol != SystemUser.PROTOCOL_VNC:
msg = _('* Automatic login mode must fill in the username.')
raise forms.ValidationError(msg)
return username
class Meta: class Meta:
model = SystemUser model = SystemUser
......
...@@ -197,6 +197,17 @@ class AssetUser(OrgModelMixin): ...@@ -197,6 +197,17 @@ class AssetUser(OrgModelMixin):
self.public_key = '' self.public_key = ''
self.save() self.save()
@staticmethod
def gen_password():
return str(uuid.uuid4())
@staticmethod
def gen_key(username):
private_key, public_key = ssh_key_gen(
username=username
)
return private_key, public_key
def auto_gen_auth(self): def auto_gen_auth(self):
password = str(uuid.uuid4()) password = str(uuid.uuid4())
private_key, public_key = ssh_key_gen( private_key, public_key = ssh_key_gen(
......
...@@ -8,10 +8,10 @@ from common.serializers import AdaptedBulkListSerializer ...@@ -8,10 +8,10 @@ from common.serializers import AdaptedBulkListSerializer
from ..models import Node, AdminUser from ..models import Node, AdminUser
from orgs.mixins import BulkOrgResourceModelSerializer from orgs.mixins import BulkOrgResourceModelSerializer
from .base import AuthSerializer from .base import AuthSerializer, AuthSerializerMixin
class AdminUserSerializer(BulkOrgResourceModelSerializer): class AdminUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
""" """
管理用户 管理用户
""" """
......
...@@ -4,12 +4,11 @@ ...@@ -4,12 +4,11 @@
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from rest_framework import serializers from rest_framework import serializers
from common.utils import validate_ssh_private_key
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from orgs.mixins import BulkOrgResourceModelSerializer from orgs.mixins import BulkOrgResourceModelSerializer
from ..models import AuthBook, Asset from ..models import AuthBook, Asset
from ..backends import AssetUserManager from ..backends import AssetUserManager
from .base import ConnectivitySerializer from .base import ConnectivitySerializer, AuthSerializerMixin
__all__ = [ __all__ = [
...@@ -24,7 +23,7 @@ class BasicAssetSerializer(serializers.ModelSerializer): ...@@ -24,7 +23,7 @@ class BasicAssetSerializer(serializers.ModelSerializer):
fields = ['hostname', 'ip'] fields = ['hostname', 'ip']
class AssetUserSerializer(BulkOrgResourceModelSerializer): class AssetUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
hostname = serializers.CharField(read_only=True, label=_("Hostname")) hostname = serializers.CharField(read_only=True, label=_("Hostname"))
ip = serializers.CharField(read_only=True, label=_("IP")) ip = serializers.CharField(read_only=True, label=_("IP"))
connectivity = ConnectivitySerializer(read_only=True, label=_("Connectivity")) connectivity = ConnectivitySerializer(read_only=True, label=_("Connectivity"))
...@@ -50,13 +49,6 @@ class AssetUserSerializer(BulkOrgResourceModelSerializer): ...@@ -50,13 +49,6 @@ class AssetUserSerializer(BulkOrgResourceModelSerializer):
'public_key': {'write_only': True}, 'public_key': {'write_only': True},
} }
def validate_private_key(self, key):
password = self.initial_data.get("password")
valid = validate_ssh_private_key(key, password)
if not valid:
raise serializers.ValidationError(_("private key invalid"))
return key
def create(self, validated_data): def create(self, validated_data):
if not validated_data.get("name") and validated_data.get("username"): if not validated_data.get("name") and validated_data.get("username"):
validated_data["name"] = validated_data["username"] validated_data["name"] = validated_data["username"]
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# #
from rest_framework import serializers from rest_framework import serializers
from common.utils import ssh_pubkey_gen from common.utils import ssh_pubkey_gen, validate_ssh_private_key
class AuthSerializer(serializers.ModelSerializer): class AuthSerializer(serializers.ModelSerializer):
...@@ -28,4 +28,38 @@ class AuthSerializer(serializers.ModelSerializer): ...@@ -28,4 +28,38 @@ class AuthSerializer(serializers.ModelSerializer):
class ConnectivitySerializer(serializers.Serializer): class ConnectivitySerializer(serializers.Serializer):
status = serializers.IntegerField() status = serializers.IntegerField()
datetime = serializers.DateTimeField() datetime = serializers.DateTimeField()
\ No newline at end of file
class AuthSerializerMixin:
def validate_password(self, password):
return password
def validate_private_key(self, private_key):
if not private_key:
return
password = self.initial_data.get("password")
valid = validate_ssh_private_key(private_key, password)
if not valid:
raise serializers.ValidationError(_("private key invalid"))
return private_key
def validate_public_key(self, public_key):
return public_key
@staticmethod
def clean_auth_fields(validated_data):
for field in ('password', 'private_key', 'public_key'):
value = validated_data.get(field)
if not value:
validated_data.pop(field, None)
# print(validated_data)
# raise serializers.ValidationError(">>>>>>")
def create(self, validated_data):
self.clean_auth_fields(validated_data)
return super().create(validated_data)
def update(self, instance, validated_data):
self.clean_auth_fields(validated_data)
return super().update(instance, validated_data)
...@@ -5,13 +5,14 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -5,13 +5,14 @@ from django.utils.translation import ugettext_lazy as _
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from orgs.mixins import BulkOrgResourceModelSerializer from orgs.mixins import BulkOrgResourceModelSerializer
from ..models import SystemUser from ..models import SystemUser
from .base import AuthSerializer from .base import AuthSerializer, AuthSerializerMixin
class SystemUserSerializer(BulkOrgResourceModelSerializer): class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
""" """
系统用户 系统用户
""" """
auto_generate_key = serializers.BooleanField(initial=True, required=False, write_only=True)
class Meta: class Meta:
model = SystemUser model = SystemUser
...@@ -20,7 +21,7 @@ class SystemUserSerializer(BulkOrgResourceModelSerializer): ...@@ -20,7 +21,7 @@ class SystemUserSerializer(BulkOrgResourceModelSerializer):
'id', 'name', 'username', 'password', 'public_key', 'private_key', 'id', 'name', 'username', 'password', 'public_key', 'private_key',
'login_mode', 'login_mode_display', 'priority', 'protocol', 'login_mode', 'login_mode_display', 'priority', 'protocol',
'auto_push', 'cmd_filters', 'sudo', 'shell', 'comment', 'nodes', 'auto_push', 'cmd_filters', 'sudo', 'shell', 'comment', 'nodes',
'assets_amount', 'connectivity_amount' 'assets_amount', 'connectivity_amount', 'auto_generate_key'
] ]
extra_kwargs = { extra_kwargs = {
'password': {"write_only": True}, 'password': {"write_only": True},
...@@ -32,6 +33,63 @@ class SystemUserSerializer(BulkOrgResourceModelSerializer): ...@@ -32,6 +33,63 @@ class SystemUserSerializer(BulkOrgResourceModelSerializer):
'created_by': {'read_only': True}, 'created_by': {'read_only': True},
} }
def validate_auto_push(self, value):
login_mode = self.initial_data.get("login_mode")
protocol = self.initial_data.get("protocol")
if login_mode == SystemUser.LOGIN_MANUAL or \
protocol in [SystemUser.PROTOCOL_TELNET,
SystemUser.PROTOCOL_VNC]:
value = False
return value
def validate_auto_generate_key(self, value):
login_mode = self.initial_data.get("login_mode")
protocol = self.initial_data.get("protocol")
if self.context["request"].method.lower() != "post":
value = False
elif self.instance:
value = False
elif login_mode == SystemUser.LOGIN_MANUAL:
value = False
elif protocol in [SystemUser.PROTOCOL_TELNET, SystemUser.PROTOCOL_VNC]:
value = False
return value
def validate_username(self, username):
if username:
return username
login_mode = self.validated_data.get("login_mode")
protocol = self.validated_data.get("protocol")
if login_mode == SystemUser.LOGIN_AUTO and \
protocol != SystemUser.PROTOCOL_VNC:
msg = _('* Automatic login mode must fill in the username.')
raise serializers.ValidationError(msg)
return username
def validate_password(self, password):
super().validate_password(password)
auto_gen_key = self.initial_data.get("auto_generate_key", False)
private_key = self.initial_data.get("private_key")
if not self.instance and not auto_gen_key and not password and not private_key:
raise serializers.ValidationError(_("Password or private key required"))
return password
def validate(self, attrs):
username = attrs.get("username", "manual")
protocol = attrs.get("protocol")
auto_gen_key = attrs.get("auto_generate_key", False)
if auto_gen_key:
password = SystemUser.gen_password()
attrs["password"] = password
if protocol == SystemUser.PROTOCOL_SSH:
private_key, public_key = SystemUser.gen_key(username)
attrs["private_key"] = private_key
attrs["public_key"] = public_key
attrs.pop("auto_generate_key", None)
return attrs
@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. """
...@@ -52,7 +110,6 @@ class SystemUserAuthSerializer(AuthSerializer): ...@@ -52,7 +110,6 @@ class SystemUserAuthSerializer(AuthSerializer):
] ]
class SystemUserSimpleSerializer(serializers.ModelSerializer): class SystemUserSimpleSerializer(serializers.ModelSerializer):
""" """
系统用户最基本信息的数据结构 系统用户最基本信息的数据结构
......
...@@ -218,6 +218,31 @@ $(document).ready(function () { ...@@ -218,6 +218,31 @@ $(document).ready(function () {
}) })
.on('change', protocol_id, function(){ .on('change', protocol_id, function(){
fieldDisplay(); fieldDisplay();
}).on("submit", "form", function (evt) {
evt.preventDefault();
{% block formUrl %}
var the_url = '{% url 'api-assets:system-user-list' %}';
var redirect_to = '{% url "assets:system-user-list" %}';
var method = "POST";
{% endblock %}
var form = $("form");
var data = form.serializeObject();
objectAttrsIsBool(data, ["auto_generate_key", "auto_push"]);
data["private_key"] = $("#id_private_key_file").data('file');
var props = {
url: the_url,
data: data,
method: method,
form: form,
redirect_to: redirect_to
};
formSubmit(props);
}).on('change', '#id_private_key_file', function () {
readFile($(this)).on("onload", function (evt, data) {
$(this).attr("data-file", data)
})
}) })
</script> </script>
......
...@@ -54,9 +54,38 @@ ...@@ -54,9 +54,38 @@
</div> </div>
{% endblock %} {% endblock %}
{% block custom_foot_js %} {% block custom_foot_js %}
<script> <script>
$(document).ready(function () { $(document).ready(function () {
$('.select2').select2(); $('.select2').select2();
}) })
</script> .on("submit", "form", function (evt) {
evt.preventDefault();
var the_url = '{% url 'api-assets:admin-user-list' %}';
var redirect_to = '{% url "assets:admin-user-list" %}';
var method = "POST";
{% if type == "update" %}
the_url = '{% url 'api-assets:admin-user-detail' pk=object.id %}';
redirect_to = '{% url "assets:admin-user-list" %}';
method = "PUT";
{% endif %}
var form = $("form");
var data = form.serializeObject();
data["private_key"] = $("#id_private_key_file").data('file');
var props = {
url: the_url,
data: data,
method: method,
form: form,
redirect_to: redirect_to
};
formSubmit(props);
})
.on('change', '#id_private_key_file', function () {
readFile($(this)).on("onload", function (evt, data) {
$(this).attr("data-file", data)
})
})
</script>
{% endblock %} {% endblock %}
\ No newline at end of file
...@@ -14,3 +14,9 @@ ...@@ -14,3 +14,9 @@
</div> </div>
{% endblock %} {% endblock %}
{% block formUrl %}
var the_url = '{% url 'api-assets:system-user-detail' pk=object.pk %}';
var redirect_to = '{% url "assets:system-user-list" %}';
var method = "PUT";
{% endblock %}
...@@ -47,7 +47,8 @@ class AdminUserCreateView(PermissionsMixin, ...@@ -47,7 +47,8 @@ class AdminUserCreateView(PermissionsMixin,
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = { context = {
'app': _('Assets'), 'app': _('Assets'),
'action': _('Create admin user') 'action': _('Create admin user'),
"type": "create"
} }
kwargs.update(context) kwargs.update(context)
return super().get_context_data(**kwargs) return super().get_context_data(**kwargs)
...@@ -65,6 +66,7 @@ class AdminUserUpdateView(PermissionsMixin, SuccessMessageMixin, UpdateView): ...@@ -65,6 +66,7 @@ class AdminUserUpdateView(PermissionsMixin, SuccessMessageMixin, UpdateView):
context = { context = {
'app': _('Assets'), 'app': _('Assets'),
'action': _('Update admin user'), 'action': _('Update admin user'),
"type": "update"
} }
kwargs.update(context) kwargs.update(context)
return super().get_context_data(**kwargs) return super().get_context_data(**kwargs)
......
No preview for this file type
...@@ -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-07-04 17:13+0800\n" "POT-Creation-Date: 2019-07-08 15:32+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"
...@@ -71,14 +71,14 @@ msgstr "目标地址" ...@@ -71,14 +71,14 @@ msgstr "目标地址"
msgid "Operating parameter" msgid "Operating parameter"
msgstr "运行参数" msgstr "运行参数"
#: applications/forms/remote_app.py:106 applications/models/remote_app.py:23 #: applications/forms/remote_app.py:104 applications/models/remote_app.py:23
#: applications/templates/applications/remote_app_detail.html:57 #: applications/templates/applications/remote_app_detail.html:57
#: applications/templates/applications/remote_app_list.html:22 #: applications/templates/applications/remote_app_list.html:22
#: 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:292 assets/models/authbook.py:24 #: assets/models/asset.py:286 assets/models/authbook.py:24
#: assets/serializers/admin_user.py:35 assets/serializers/asset_user.py:89 #: assets/serializers/admin_user.py:35 assets/serializers/asset_user.py:81
#: assets/serializers/system_user.py:29 #: assets/serializers/system_user.py:30
#: assets/templates/assets/admin_user_list.html:49 #: assets/templates/assets/admin_user_list.html:49
#: assets/templates/assets/domain_detail.html:60 #: assets/templates/assets/domain_detail.html:60
#: assets/templates/assets/domain_list.html:26 #: assets/templates/assets/domain_list.html:26
...@@ -86,7 +86,7 @@ msgstr "运行参数" ...@@ -86,7 +86,7 @@ msgstr "运行参数"
#: assets/templates/assets/system_user_list.html:55 audits/models.py:19 #: assets/templates/assets/system_user_list.html:55 audits/models.py:19
#: audits/templates/audits/ftp_log_list.html:41 #: audits/templates/audits/ftp_log_list.html:41
#: audits/templates/audits/ftp_log_list.html:71 #: audits/templates/audits/ftp_log_list.html:71
#: perms/forms/asset_permission.py:68 perms/models/asset_permission.py:68 #: perms/forms/asset_permission.py:68 perms/models/asset_permission.py:76
#: perms/templates/perms/asset_permission_create_update.html:45 #: perms/templates/perms/asset_permission_create_update.html:45
#: perms/templates/perms/asset_permission_list.html:48 #: perms/templates/perms/asset_permission_list.html:48
#: perms/templates/perms/asset_permission_list.html:117 #: perms/templates/perms/asset_permission_list.html:117
...@@ -95,7 +95,7 @@ msgstr "运行参数" ...@@ -95,7 +95,7 @@ msgstr "运行参数"
#: terminal/templates/terminal/command_list.html:66 #: terminal/templates/terminal/command_list.html:66
#: terminal/templates/terminal/session_list.html:28 #: terminal/templates/terminal/session_list.html:28
#: terminal/templates/terminal/session_list.html:72 #: terminal/templates/terminal/session_list.html:72
#: xpack/plugins/change_auth_plan/forms.py:115 #: xpack/plugins/change_auth_plan/forms.py:114
#: xpack/plugins/change_auth_plan/models.py:413 #: xpack/plugins/change_auth_plan/models.py:413
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:46 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:46
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:54 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:54
...@@ -108,15 +108,15 @@ msgstr "运行参数" ...@@ -108,15 +108,15 @@ msgstr "运行参数"
msgid "Asset" msgid "Asset"
msgstr "资产" msgstr "资产"
#: applications/forms/remote_app.py:109 applications/models/remote_app.py:27 #: applications/forms/remote_app.py:107 applications/models/remote_app.py:27
#: applications/templates/applications/remote_app_detail.html:61 #: applications/templates/applications/remote_app_detail.html:61
#: applications/templates/applications/remote_app_list.html:23 #: applications/templates/applications/remote_app_list.html:23
#: applications/templates/applications/user_remote_app_list.html:19 #: applications/templates/applications/user_remote_app_list.html:19
#: assets/models/user.py:160 assets/templates/assets/user_asset_list.html:172 #: assets/models/user.py:160 assets/templates/assets/user_asset_list.html:172
#: audits/models.py:20 audits/templates/audits/ftp_log_list.html:49 #: audits/models.py:20 audits/templates/audits/ftp_log_list.html:49
#: audits/templates/audits/ftp_log_list.html:72 #: audits/templates/audits/ftp_log_list.html:72
#: perms/forms/asset_permission.py:74 perms/models/asset_permission.py:70 #: perms/forms/asset_permission.py:74 perms/models/asset_permission.py:78
#: perms/models/asset_permission.py:95 #: perms/models/asset_permission.py:103
#: perms/templates/perms/asset_permission_detail.html:140 #: perms/templates/perms/asset_permission_detail.html:140
#: perms/templates/perms/asset_permission_list.html:50 #: perms/templates/perms/asset_permission_list.html:50
#: perms/templates/perms/asset_permission_list.html:71 #: perms/templates/perms/asset_permission_list.html:71
...@@ -134,11 +134,11 @@ msgstr "系统用户" ...@@ -134,11 +134,11 @@ msgstr "系统用户"
#: applications/templates/applications/remote_app_detail.html:53 #: applications/templates/applications/remote_app_detail.html:53
#: applications/templates/applications/remote_app_list.html:20 #: applications/templates/applications/remote_app_list.html:20
#: applications/templates/applications/user_remote_app_list.html:16 #: applications/templates/applications/user_remote_app_list.html:16
#: assets/forms/domain.py:73 assets/forms/user.py:84 assets/forms/user.py:148 #: assets/forms/asset.py:20 assets/forms/domain.py:73 assets/forms/user.py:74
#: assets/models/asset.py:64 assets/models/base.py:28 #: assets/forms/user.py:94 assets/models/base.py:28 assets/models/cluster.py:18
#: assets/models/cluster.py:18 assets/models/cmd_filter.py:20 #: assets/models/cmd_filter.py:20 assets/models/domain.py:20
#: assets/models/domain.py:20 assets/models/group.py:20 #: assets/models/group.py:20 assets/models/label.py:18
#: assets/models/label.py:18 assets/templates/assets/admin_user_detail.html:56 #: assets/templates/assets/admin_user_detail.html:56
#: assets/templates/assets/admin_user_list.html:47 #: assets/templates/assets/admin_user_list.html:47
#: assets/templates/assets/cmd_filter_detail.html:61 #: assets/templates/assets/cmd_filter_detail.html:61
#: assets/templates/assets/cmd_filter_list.html:24 #: assets/templates/assets/cmd_filter_list.html:24
...@@ -173,7 +173,7 @@ msgstr "系统用户" ...@@ -173,7 +173,7 @@ msgstr "系统用户"
#: users/templates/users/user_list.html:35 #: users/templates/users/user_list.html:35
#: users/templates/users/user_profile.html:51 #: users/templates/users/user_profile.html:51
#: users/templates/users/user_pubkey_update.html:53 #: users/templates/users/user_pubkey_update.html:53
#: xpack/plugins/change_auth_plan/forms.py:98 #: xpack/plugins/change_auth_plan/forms.py:97
#: xpack/plugins/change_auth_plan/models.py:61 #: xpack/plugins/change_auth_plan/models.py:61
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:61 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:61
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:12 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:12
...@@ -205,16 +205,16 @@ msgstr "参数" ...@@ -205,16 +205,16 @@ msgstr "参数"
#: applications/models/remote_app.py:43 #: applications/models/remote_app.py:43
#: applications/templates/applications/remote_app_detail.html:77 #: applications/templates/applications/remote_app_detail.html:77
#: assets/models/asset.py:124 assets/models/base.py:36 #: assets/models/asset.py:151 assets/models/base.py:36
#: assets/models/cluster.py:28 assets/models/cmd_filter.py:25 #: assets/models/cluster.py:28 assets/models/cmd_filter.py:25
#: assets/models/cmd_filter.py:58 assets/models/group.py:21 #: assets/models/cmd_filter.py:58 assets/models/group.py:21
#: assets/templates/assets/admin_user_detail.html:68 #: assets/templates/assets/admin_user_detail.html:68
#: assets/templates/assets/asset_detail.html:128 #: assets/templates/assets/asset_detail.html:124
#: assets/templates/assets/cmd_filter_detail.html:77 #: assets/templates/assets/cmd_filter_detail.html:77
#: assets/templates/assets/domain_detail.html:72 #: assets/templates/assets/domain_detail.html:72
#: assets/templates/assets/system_user_detail.html:100 #: assets/templates/assets/system_user_detail.html:100
#: ops/templates/ops/adhoc_detail.html:86 orgs/models.py:14 #: ops/templates/ops/adhoc_detail.html:86 orgs/models.py:14
#: perms/models/asset_permission.py:98 perms/models/base.py:41 #: perms/models/asset_permission.py:106 perms/models/base.py:41
#: perms/templates/perms/asset_permission_detail.html:98 #: perms/templates/perms/asset_permission_detail.html:98
#: perms/templates/perms/remote_app_permission_detail.html:90 #: perms/templates/perms/remote_app_permission_detail.html:90
#: users/models/user.py:105 users/serializers/v1.py:116 #: users/models/user.py:105 users/serializers/v1.py:116
...@@ -229,7 +229,7 @@ msgstr "创建者" ...@@ -229,7 +229,7 @@ msgstr "创建者"
# msgstr "创建者" # msgstr "创建者"
#: applications/models/remote_app.py:46 #: applications/models/remote_app.py:46
#: applications/templates/applications/remote_app_detail.html:73 #: applications/templates/applications/remote_app_detail.html:73
#: assets/models/asset.py:125 assets/models/base.py:34 #: assets/models/asset.py:152 assets/models/base.py:34
#: assets/models/cluster.py:26 assets/models/domain.py:23 #: assets/models/cluster.py:26 assets/models/domain.py:23
#: assets/models/group.py:22 assets/models/label.py:25 #: assets/models/group.py:22 assets/models/label.py:25
#: assets/templates/assets/admin_user_detail.html:64 #: assets/templates/assets/admin_user_detail.html:64
...@@ -237,7 +237,7 @@ msgstr "创建者" ...@@ -237,7 +237,7 @@ msgstr "创建者"
#: assets/templates/assets/domain_detail.html:68 #: assets/templates/assets/domain_detail.html:68
#: assets/templates/assets/system_user_detail.html:96 #: assets/templates/assets/system_user_detail.html:96
#: ops/templates/ops/adhoc_detail.html:90 ops/templates/ops/task_detail.html:64 #: ops/templates/ops/adhoc_detail.html:90 ops/templates/ops/task_detail.html:64
#: orgs/models.py:15 perms/models/asset_permission.py:99 #: orgs/models.py:15 perms/models/asset_permission.py:107
#: perms/models/base.py:42 #: perms/models/base.py:42
#: perms/templates/perms/asset_permission_detail.html:94 #: perms/templates/perms/asset_permission_detail.html:94
#: perms/templates/perms/remote_app_permission_detail.html:86 #: perms/templates/perms/remote_app_permission_detail.html:86
...@@ -257,13 +257,13 @@ msgstr "创建日期" ...@@ -257,13 +257,13 @@ msgstr "创建日期"
#: applications/templates/applications/remote_app_detail.html:81 #: applications/templates/applications/remote_app_detail.html:81
#: applications/templates/applications/remote_app_list.html:24 #: applications/templates/applications/remote_app_list.html:24
#: applications/templates/applications/user_remote_app_list.html:20 #: applications/templates/applications/user_remote_app_list.html:20
#: assets/models/asset.py:126 assets/models/base.py:33 #: assets/models/asset.py:153 assets/models/base.py:33
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:22 #: assets/models/cluster.py:29 assets/models/cmd_filter.py:22
#: assets/models/cmd_filter.py:55 assets/models/domain.py:21 #: assets/models/cmd_filter.py:55 assets/models/domain.py:21
#: assets/models/domain.py:53 assets/models/group.py:23 #: assets/models/domain.py:53 assets/models/group.py:23
#: assets/models/label.py:23 assets/templates/assets/admin_user_detail.html:72 #: assets/models/label.py:23 assets/templates/assets/admin_user_detail.html:72
#: assets/templates/assets/admin_user_list.html:53 #: assets/templates/assets/admin_user_list.html:53
#: assets/templates/assets/asset_detail.html:136 #: assets/templates/assets/asset_detail.html:132
#: assets/templates/assets/cmd_filter_detail.html:65 #: assets/templates/assets/cmd_filter_detail.html:65
#: assets/templates/assets/cmd_filter_list.html:27 #: assets/templates/assets/cmd_filter_list.html:27
#: assets/templates/assets/cmd_filter_rule_list.html:62 #: assets/templates/assets/cmd_filter_rule_list.html:62
...@@ -273,7 +273,7 @@ msgstr "创建日期" ...@@ -273,7 +273,7 @@ msgstr "创建日期"
#: assets/templates/assets/system_user_detail.html:104 #: assets/templates/assets/system_user_detail.html:104
#: assets/templates/assets/system_user_list.html:59 #: assets/templates/assets/system_user_list.html:59
#: assets/templates/assets/user_asset_list.html:175 ops/models/adhoc.py:43 #: assets/templates/assets/user_asset_list.html:175 ops/models/adhoc.py:43
#: orgs/models.py:16 perms/models/asset_permission.py:100 #: orgs/models.py:16 perms/models/asset_permission.py:108
#: perms/models/base.py:43 #: perms/models/base.py:43
#: perms/templates/perms/asset_permission_detail.html:102 #: perms/templates/perms/asset_permission_detail.html:102
#: perms/templates/perms/remote_app_permission_detail.html:94 #: perms/templates/perms/remote_app_permission_detail.html:94
...@@ -550,7 +550,7 @@ msgstr "动作" ...@@ -550,7 +550,7 @@ msgstr "动作"
#: applications/templates/applications/user_remote_app_list.html:57 #: applications/templates/applications/user_remote_app_list.html:57
#: assets/templates/assets/user_asset_list.html:100 #: assets/templates/assets/user_asset_list.html:100
#: perms/models/asset_permission.py:27 #: perms/models/asset_permission.py:28
msgid "Connect" msgid "Connect"
msgstr "连接" msgstr "连接"
...@@ -612,29 +612,37 @@ msgid "Reachable" ...@@ -612,29 +612,37 @@ msgid "Reachable"
msgstr "可连接" msgstr "可连接"
#: assets/const.py:79 assets/models/utils.py:45 authentication/utils.py:9 #: assets/const.py:79 assets/models/utils.py:45 authentication/utils.py:9
#: xpack/plugins/license/models.py:78 #: xpack/plugins/license/models.py:79
msgid "Unknown" msgid "Unknown"
msgstr "未知" msgstr "未知"
#: assets/forms/asset.py:51 assets/models/asset.py:95 assets/models/user.py:107 #: assets/forms/asset.py:24 assets/models/asset.py:117
#: assets/templates/assets/asset_detail.html:194 #: assets/models/domain.py:50
#: assets/templates/assets/asset_detail.html:202 #: assets/templates/assets/domain_gateway_list.html:69
#: assets/templates/assets/user_asset_list.html:168
#: settings/templates/settings/replay_storage_create.html:59
msgid "Port"
msgstr "端口"
#: assets/forms/asset.py:45 assets/models/asset.py:122
#: assets/models/user.py:107 assets/templates/assets/asset_detail.html:190
#: assets/templates/assets/asset_detail.html:198
#: assets/templates/assets/system_user_assets.html:83 #: assets/templates/assets/system_user_assets.html:83
#: perms/models/asset_permission.py:69 #: perms/models/asset_permission.py:77
#: xpack/plugins/change_auth_plan/models.py:72 #: xpack/plugins/change_auth_plan/models.py:72
msgid "Nodes" msgid "Nodes"
msgstr "节点" msgstr "节点"
#: assets/forms/asset.py:54 assets/forms/asset.py:89 assets/models/asset.py:99 #: assets/forms/asset.py:48 assets/forms/asset.py:83 assets/models/asset.py:126
#: assets/models/cluster.py:19 assets/models/user.py:65 #: assets/models/cluster.py:19 assets/models/user.py:65
#: assets/templates/assets/asset_detail.html:80 templates/_nav.html:24 #: assets/templates/assets/asset_detail.html:76 templates/_nav.html:24
#: xpack/plugins/cloud/models.py:124 #: xpack/plugins/cloud/models.py:124
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:65 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:65
#: xpack/plugins/orgs/templates/orgs/org_list.html:18 #: xpack/plugins/orgs/templates/orgs/org_list.html:18
msgid "Admin user" msgid "Admin user"
msgstr "管理用户" msgstr "管理用户"
#: assets/forms/asset.py:57 assets/forms/asset.py:92 assets/forms/asset.py:131 #: assets/forms/asset.py:51 assets/forms/asset.py:86 assets/forms/asset.py:125
#: 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:85 #: assets/templates/assets/asset_list.html:85
...@@ -643,23 +651,23 @@ msgstr "管理用户" ...@@ -643,23 +651,23 @@ msgstr "管理用户"
msgid "Label" msgid "Label"
msgstr "标签" msgstr "标签"
#: assets/forms/asset.py:60 assets/forms/asset.py:95 assets/models/asset.py:94 #: assets/forms/asset.py:54 assets/forms/asset.py:89 assets/models/asset.py:121
#: 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:84 #: assets/templates/assets/asset_detail.html:80
#: assets/templates/assets/user_asset_list.html:173 #: assets/templates/assets/user_asset_list.html:173
#: xpack/plugins/orgs/templates/orgs/org_list.html:17 #: xpack/plugins/orgs/templates/orgs/org_list.html:17
msgid "Domain" msgid "Domain"
msgstr "网域" msgstr "网域"
#: assets/forms/asset.py:64 assets/forms/asset.py:86 assets/forms/asset.py:99 #: assets/forms/asset.py:58 assets/forms/asset.py:80 assets/forms/asset.py:93
#: assets/forms/asset.py:134 assets/models/node.py:249 #: assets/forms/asset.py:128 assets/models/node.py:255
#: assets/templates/assets/asset_create.html:42 #: assets/templates/assets/asset_create.html:42
#: perms/forms/asset_permission.py:71 perms/forms/asset_permission.py:79 #: perms/forms/asset_permission.py:71 perms/forms/asset_permission.py:78
#: perms/models/asset_permission.py:93 #: perms/models/asset_permission.py:101
#: perms/templates/perms/asset_permission_list.html:49 #: perms/templates/perms/asset_permission_list.html:49
#: perms/templates/perms/asset_permission_list.html:70 #: perms/templates/perms/asset_permission_list.html:70
#: perms/templates/perms/asset_permission_list.html:120 #: perms/templates/perms/asset_permission_list.html:120
#: xpack/plugins/change_auth_plan/forms.py:116 #: xpack/plugins/change_auth_plan/forms.py:115
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:55 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:55
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:15 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:15
#: xpack/plugins/cloud/models.py:123 #: xpack/plugins/cloud/models.py:123
...@@ -668,7 +676,7 @@ msgstr "网域" ...@@ -668,7 +676,7 @@ msgstr "网域"
msgid "Node" msgid "Node"
msgstr "节点" msgstr "节点"
#: assets/forms/asset.py:68 assets/forms/asset.py:103 #: assets/forms/asset.py:62 assets/forms/asset.py:97
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"
...@@ -676,19 +684,19 @@ msgstr "" ...@@ -676,19 +684,19 @@ msgstr ""
"root或其他拥有NOPASSWD: ALL权限的用户, 如果是windows或其它硬件可以随意设置一" "root或其他拥有NOPASSWD: ALL权限的用户, 如果是windows或其它硬件可以随意设置一"
"个, 更多信息查看左侧 `管理用户` 菜单" "个, 更多信息查看左侧 `管理用户` 菜单"
#: assets/forms/asset.py:71 assets/forms/asset.py:106 #: assets/forms/asset.py:65 assets/forms/asset.py:100
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:72 assets/forms/asset.py:107 #: assets/forms/asset.py:66 assets/forms/asset.py:101
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:114 assets/forms/asset.py:118 #: assets/forms/asset.py:108 assets/forms/asset.py:112
#: assets/forms/domain.py:17 assets/forms/label.py:15 #: assets/forms/domain.py:17 assets/forms/label.py:15
#: perms/templates/perms/asset_permission_asset.html:88 #: perms/templates/perms/asset_permission_asset.html:88
#: xpack/plugins/change_auth_plan/forms.py:106 #: xpack/plugins/change_auth_plan/forms.py:105
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:84 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:84
msgid "Select assets" msgid "Select assets"
msgstr "选择资产" msgstr "选择资产"
...@@ -705,7 +713,7 @@ msgstr "不能包含特殊字符" ...@@ -705,7 +713,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:74 assets/forms/user.py:85 assets/forms/user.py:149 #: assets/forms/domain.py:74 assets/forms/user.py:75 assets/forms/user.py:95
#: assets/models/base.py:29 #: assets/models/base.py:29
#: 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
...@@ -726,7 +734,7 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC" ...@@ -726,7 +734,7 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC"
#: users/templates/users/user_detail.html:67 #: users/templates/users/user_detail.html:67
#: users/templates/users/user_list.html:36 #: users/templates/users/user_list.html:36
#: users/templates/users/user_profile.html:47 #: users/templates/users/user_profile.html:47
#: xpack/plugins/change_auth_plan/forms.py:100 #: xpack/plugins/change_auth_plan/forms.py:99
#: xpack/plugins/change_auth_plan/models.py:63 #: xpack/plugins/change_auth_plan/models.py:63
#: xpack/plugins/change_auth_plan/models.py:409 #: xpack/plugins/change_auth_plan/models.py:409
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:65 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:65
...@@ -741,7 +749,7 @@ msgid "Password or private key passphrase" ...@@ -741,7 +749,7 @@ msgid "Password or private key passphrase"
msgstr "密码或密钥密码" msgstr "密码或密钥密码"
#: assets/forms/user.py:26 assets/models/base.py:30 #: assets/forms/user.py:26 assets/models/base.py:30
#: assets/serializers/asset_user.py:70 #: assets/serializers/asset_user.py:62
#: 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
#: authentication/forms.py:13 #: authentication/forms.py:13
...@@ -759,7 +767,7 @@ msgstr "密码或密钥密码" ...@@ -759,7 +767,7 @@ msgstr "密码或密钥密码"
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
#: assets/forms/user.py:29 assets/serializers/asset_user.py:78 #: assets/forms/user.py:29 assets/serializers/asset_user.py:70
#: assets/templates/assets/_asset_user_auth_update_modal.html:27 #: assets/templates/assets/_asset_user_auth_update_modal.html:27
#: users/models/user.py:91 #: users/models/user.py:91
msgid "Private key" msgid "Private key"
...@@ -773,21 +781,17 @@ msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥" ...@@ -773,21 +781,17 @@ msgstr "不合法的密钥,仅支持RSA/DSA格式的密钥"
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:136 #: assets/forms/user.py:97 assets/models/cmd_filter.py:31
msgid "* Automatic login mode must fill in the username."
msgstr "自动登录模式,必须填写用户名"
#: assets/forms/user.py:151 assets/models/cmd_filter.py:31
#: assets/models/user.py:115 assets/templates/assets/_system_user.html:66 #: assets/models/user.py:115 assets/templates/assets/_system_user.html:66
#: assets/templates/assets/system_user_detail.html:165 #: assets/templates/assets/system_user_detail.html:165
msgid "Command filter" msgid "Command filter"
msgstr "命令过滤器" msgstr "命令过滤器"
#: assets/forms/user.py:155 #: 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:156 #: 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"
...@@ -795,26 +799,18 @@ msgstr "" ...@@ -795,26 +799,18 @@ msgstr ""
"1-100, 1最低优先级,100最高优先级。授权多个用户时,高优先级的系统用户将会作为" "1-100, 1最低优先级,100最高优先级。授权多个用户时,高优先级的系统用户将会作为"
"默认登录用户" "默认登录用户"
#: assets/forms/user.py:158 #: 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:160 #: 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"
#: assets/models/asset.py:65 assets/models/asset.py:90 #: assets/models/asset.py:112 assets/models/domain.py:49
#: assets/models/domain.py:50 #: assets/serializers/asset_user.py:28
#: assets/templates/assets/domain_gateway_list.html:69
#: assets/templates/assets/user_asset_list.html:168
#: settings/templates/settings/replay_storage_create.html:59
msgid "Port"
msgstr "端口"
#: assets/models/asset.py:85 assets/models/domain.py:49
#: assets/serializers/asset_user.py:29
#: assets/templates/assets/_asset_list_modal.html:46 #: assets/templates/assets/_asset_list_modal.html:46
#: assets/templates/assets/_asset_user_list.html:15 #: assets/templates/assets/_asset_user_list.html:15
#: assets/templates/assets/asset_detail.html:64 #: assets/templates/assets/asset_detail.html:64
...@@ -830,7 +826,7 @@ msgstr "端口" ...@@ -830,7 +826,7 @@ msgstr "端口"
msgid "IP" msgid "IP"
msgstr "IP" msgstr "IP"
#: assets/models/asset.py:86 assets/serializers/asset_user.py:28 #: assets/models/asset.py:113 assets/serializers/asset_user.py:27
#: assets/templates/assets/_asset_list_modal.html:45 #: assets/templates/assets/_asset_list_modal.html:45
#: assets/templates/assets/_asset_user_auth_update_modal.html:9 #: assets/templates/assets/_asset_user_auth_update_modal.html:9
#: assets/templates/assets/_asset_user_auth_view_modal.html:15 #: assets/templates/assets/_asset_user_auth_view_modal.html:15
...@@ -847,9 +843,8 @@ msgstr "IP" ...@@ -847,9 +843,8 @@ msgstr "IP"
msgid "Hostname" msgid "Hostname"
msgstr "主机名" msgstr "主机名"
#: assets/models/asset.py:89 assets/models/asset.py:92 #: assets/models/asset.py:116 assets/models/domain.py:51
#: assets/models/domain.py:51 assets/models/user.py:110 #: assets/models/user.py:110 assets/templates/assets/asset_detail.html:72
#: assets/templates/assets/asset_detail.html:72
#: assets/templates/assets/domain_gateway_list.html:70 #: assets/templates/assets/domain_gateway_list.html:70
#: assets/templates/assets/system_user_detail.html:70 #: assets/templates/assets/system_user_detail.html:70
#: assets/templates/assets/system_user_list.html:53 #: assets/templates/assets/system_user_list.html:53
...@@ -859,86 +854,91 @@ msgstr "主机名" ...@@ -859,86 +854,91 @@ msgstr "主机名"
msgid "Protocol" msgid "Protocol"
msgstr "协议" msgstr "协议"
#: assets/models/asset.py:93 assets/templates/assets/asset_detail.html:108 #: assets/models/asset.py:119 assets/serializers/asset.py:63
#: assets/templates/assets/asset_create.html:24
msgid "Protocols"
msgstr "协议组"
#: assets/models/asset.py:120 assets/templates/assets/asset_detail.html:104
#: assets/templates/assets/user_asset_list.html:170 #: assets/templates/assets/user_asset_list.html:170
msgid "Platform" msgid "Platform"
msgstr "系统平台" msgstr "系统平台"
#: assets/models/asset.py:96 assets/models/cmd_filter.py:21 #: assets/models/asset.py:123 assets/models/cmd_filter.py:21
#: assets/models/domain.py:54 assets/models/label.py:22 #: assets/models/domain.py:54 assets/models/label.py:22
#: assets/templates/assets/asset_detail.html:116 #: assets/templates/assets/asset_detail.html:112
#: assets/templates/assets/user_asset_list.html:174 #: assets/templates/assets/user_asset_list.html:174
msgid "Is active" msgid "Is active"
msgstr "激活" msgstr "激活"
#: assets/models/asset.py:102 assets/templates/assets/asset_detail.html:68 #: assets/models/asset.py:129 assets/templates/assets/asset_detail.html:68
msgid "Public IP" msgid "Public IP"
msgstr "公网IP" msgstr "公网IP"
#: assets/models/asset.py:103 assets/templates/assets/asset_detail.html:124 #: assets/models/asset.py:130 assets/templates/assets/asset_detail.html:120
msgid "Asset number" msgid "Asset number"
msgstr "资产编号" msgstr "资产编号"
#: assets/models/asset.py:106 assets/templates/assets/asset_detail.html:88 #: assets/models/asset.py:133 assets/templates/assets/asset_detail.html:84
msgid "Vendor" msgid "Vendor"
msgstr "制造商" msgstr "制造商"
#: assets/models/asset.py:107 assets/templates/assets/asset_detail.html:92 #: assets/models/asset.py:134 assets/templates/assets/asset_detail.html:88
msgid "Model" msgid "Model"
msgstr "型号" msgstr "型号"
#: assets/models/asset.py:108 assets/templates/assets/asset_detail.html:120 #: assets/models/asset.py:135 assets/templates/assets/asset_detail.html:116
msgid "Serial number" msgid "Serial number"
msgstr "序列号" msgstr "序列号"
#: assets/models/asset.py:110 #: assets/models/asset.py:137
msgid "CPU model" msgid "CPU model"
msgstr "CPU型号" msgstr "CPU型号"
#: assets/models/asset.py:111 #: assets/models/asset.py:138
#: xpack/plugins/license/templates/license/license_detail.html:80 #: xpack/plugins/license/templates/license/license_detail.html:80
msgid "CPU count" msgid "CPU count"
msgstr "CPU数量" msgstr "CPU数量"
#: assets/models/asset.py:112 #: assets/models/asset.py:139
msgid "CPU cores" msgid "CPU cores"
msgstr "CPU核数" msgstr "CPU核数"
#: assets/models/asset.py:113 #: assets/models/asset.py:140
msgid "CPU vcpus" msgid "CPU vcpus"
msgstr "CPU总数" msgstr "CPU总数"
#: assets/models/asset.py:114 assets/templates/assets/asset_detail.html:100 #: assets/models/asset.py:141 assets/templates/assets/asset_detail.html:96
msgid "Memory" msgid "Memory"
msgstr "内存" msgstr "内存"
#: assets/models/asset.py:115 #: assets/models/asset.py:142
msgid "Disk total" msgid "Disk total"
msgstr "硬盘大小" msgstr "硬盘大小"
#: assets/models/asset.py:116 #: assets/models/asset.py:143
msgid "Disk info" msgid "Disk info"
msgstr "硬盘信息" msgstr "硬盘信息"
#: assets/models/asset.py:118 assets/templates/assets/asset_detail.html:112 #: assets/models/asset.py:145 assets/templates/assets/asset_detail.html:108
#: assets/templates/assets/user_asset_list.html:171 #: assets/templates/assets/user_asset_list.html:171
msgid "OS" msgid "OS"
msgstr "操作系统" msgstr "操作系统"
#: assets/models/asset.py:119 #: assets/models/asset.py:146
msgid "OS version" msgid "OS version"
msgstr "系统版本" msgstr "系统版本"
#: assets/models/asset.py:120 #: assets/models/asset.py:147
msgid "OS arch" msgid "OS arch"
msgstr "系统架构" msgstr "系统架构"
#: assets/models/asset.py:121 #: assets/models/asset.py:148
msgid "Hostname raw" msgid "Hostname raw"
msgstr "主机名原始" msgstr "主机名原始"
#: assets/models/asset.py:123 assets/templates/assets/asset_create.html:46 #: assets/models/asset.py:150 assets/templates/assets/asset_create.html:46
#: assets/templates/assets/asset_detail.html:231 templates/_nav.html:26 #: assets/templates/assets/asset_detail.html:227 templates/_nav.html:26
msgid "Labels" msgid "Labels"
msgstr "标签管理" msgstr "标签管理"
...@@ -1008,7 +1008,7 @@ msgid "Default" ...@@ -1008,7 +1008,7 @@ msgid "Default"
msgstr "默认" msgstr "默认"
#: assets/models/cluster.py:36 assets/models/label.py:14 #: assets/models/cluster.py:36 assets/models/label.py:14
#: users/models/user.py:443 #: users/models/user.py:453
msgid "System" msgid "System"
msgstr "系统" msgstr "系统"
...@@ -1127,7 +1127,7 @@ msgstr "默认资产组" ...@@ -1127,7 +1127,7 @@ msgstr "默认资产组"
#: terminal/templates/terminal/command_list.html:65 #: terminal/templates/terminal/command_list.html:65
#: terminal/templates/terminal/session_list.html:27 #: terminal/templates/terminal/session_list.html:27
#: terminal/templates/terminal/session_list.html:71 users/forms.py:316 #: terminal/templates/terminal/session_list.html:71 users/forms.py:316
#: users/models/user.py:38 users/models/user.py:431 users/serializers/v1.py:105 #: users/models/user.py:38 users/models/user.py:441 users/serializers/v1.py:105
#: users/templates/users/user_group_detail.html:78 #: users/templates/users/user_group_detail.html:78
#: users/templates/users/user_group_list.html:36 users/views/user.py:251 #: users/templates/users/user_group_list.html:36 users/views/user.py:251
#: xpack/plugins/orgs/forms.py:26 #: xpack/plugins/orgs/forms.py:26
...@@ -1136,7 +1136,7 @@ msgstr "默认资产组" ...@@ -1136,7 +1136,7 @@ msgstr "默认资产组"
msgid "User" msgid "User"
msgstr "用户" msgstr "用户"
#: assets/models/label.py:19 assets/models/node.py:241 #: assets/models/label.py:19 assets/models/node.py:246
#: assets/templates/assets/label_list.html:15 settings/models.py:30 #: assets/templates/assets/label_list.html:15 settings/models.py:30
msgid "Value" msgid "Value"
msgstr "值" msgstr "值"
...@@ -1145,11 +1145,11 @@ msgstr "值" ...@@ -1145,11 +1145,11 @@ msgstr "值"
msgid "Category" msgid "Category"
msgstr "分类" msgstr "分类"
#: assets/models/node.py:240 #: assets/models/node.py:245
msgid "Key" msgid "Key"
msgstr "键" msgstr "键"
#: assets/models/node.py:297 #: assets/models/node.py:303
msgid "New node" msgid "New node"
msgstr "新节点" msgstr "新节点"
...@@ -1166,10 +1166,10 @@ msgstr "手动登录" ...@@ -1166,10 +1166,10 @@ msgstr "手动登录"
#: assets/templates/assets/system_user_assets.html:22 #: assets/templates/assets/system_user_assets.html:22
#: assets/templates/assets/system_user_detail.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:30 assets/views/admin_user.py:49
#: assets/views/admin_user.py:66 assets/views/admin_user.py:82 #: assets/views/admin_user.py:67 assets/views/admin_user.py:84
#: assets/views/admin_user.py:107 assets/views/asset.py:52 #: assets/views/admin_user.py:109 assets/views/asset.py:40
#: assets/views/asset.py:69 assets/views/asset.py:128 assets/views/asset.py:171 #: assets/views/asset.py:57 assets/views/asset.py:106 assets/views/asset.py:133
#: assets/views/asset.py:199 assets/views/asset.py:231 #: assets/views/asset.py:173 assets/views/asset.py:203
#: assets/views/cmd_filter.py:31 assets/views/cmd_filter.py:48 #: 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:65 assets/views/cmd_filter.py:82
#: assets/views/cmd_filter.py:102 assets/views/cmd_filter.py:136 #: assets/views/cmd_filter.py:102 assets/views/cmd_filter.py:136
...@@ -1208,37 +1208,33 @@ msgstr "登录模式" ...@@ -1208,37 +1208,33 @@ msgstr "登录模式"
msgid "%(value)s is not an even number" msgid "%(value)s is not an even number"
msgstr "%(value)s is not an even number" msgstr "%(value)s is not an even number"
#: assets/serializers/admin_user.py:36 assets/serializers/asset.py:46 #: assets/serializers/admin_user.py:36 assets/serializers/asset.py:64
#: assets/serializers/asset_user.py:30 assets/serializers/system_user.py:30 #: assets/serializers/asset_user.py:29 assets/serializers/system_user.py:31
#: assets/templates/assets/_asset_user_list.html:18 #: assets/templates/assets/_asset_user_list.html:18
msgid "Connectivity" msgid "Connectivity"
msgstr "连接" msgstr "连接"
#: assets/serializers/asset.py:44 assets/templates/assets/asset_create.html:24 #: assets/serializers/asset.py:21
msgid "Protocols" msgid "Protocol format should {}/{}"
msgstr "协议组" msgstr ""
#: assets/serializers/asset.py:38
msgid "Protocol duplicate: {}"
msgstr "协议重复: {}"
#: assets/serializers/asset.py:72 #: assets/serializers/asset.py:90
msgid "Hardware info" msgid "Hardware info"
msgstr "硬件信息" msgstr "硬件信息"
#: assets/serializers/asset.py:73 orgs/mixins/serializers.py:26 #: assets/serializers/asset.py:91 orgs/mixins/serializers.py:26
msgid "Org name" msgid "Org name"
msgstr "组织名称" msgstr "组织名称"
#: assets/serializers/asset.py:91 #: assets/serializers/asset_user.py:31
msgid "Protocol duplicate: {}"
msgstr "协议重复: {}"
#: assets/serializers/asset_user.py:32
msgid "Backend" msgid "Backend"
msgstr "后端" msgstr "后端"
#: assets/serializers/asset_user.py:57 #: assets/serializers/asset_user.py:66 users/forms.py:263
msgid "private key invalid"
msgstr "密钥不合法"
#: assets/serializers/asset_user.py:74 users/forms.py:263
#: users/models/user.py:94 users/templates/users/first_login.html:42 #: users/models/user.py:94 users/templates/users/first_login.html:42
#: users/templates/users/user_password_update.html:46 #: users/templates/users/user_password_update.html:46
#: users/templates/users/user_profile.html:68 #: users/templates/users/user_profile.html:68
...@@ -1247,14 +1243,26 @@ msgstr "密钥不合法" ...@@ -1247,14 +1243,26 @@ msgstr "密钥不合法"
msgid "Public key" msgid "Public key"
msgstr "ssh公钥" msgstr "ssh公钥"
#: assets/serializers/base.py:44
msgid "private key invalid"
msgstr "密钥不合法"
#: assets/serializers/node.py:33 #: assets/serializers/node.py:33
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:31 #: assets/serializers/system_user.py:32
msgid "Login mode display" msgid "Login mode display"
msgstr "登录模式显示" msgstr "登录模式显示"
#: assets/serializers/system_user.py:67
msgid "* Automatic login mode must fill in the username."
msgstr "自动登录模式,必须填写用户名"
#: assets/serializers/system_user.py:76
msgid "Password or private key required"
msgstr "密码或密钥密码需要一个"
#: assets/tasks.py:33 #: assets/tasks.py:33
msgid "Asset has been disabled, skipped: {}" msgid "Asset has been disabled, skipped: {}"
msgstr "资产或许不支持ansible, 跳过: {}" msgstr "资产或许不支持ansible, 跳过: {}"
...@@ -1334,7 +1342,7 @@ msgstr "推送系统用户到入资产: {}" ...@@ -1334,7 +1342,7 @@ msgstr "推送系统用户到入资产: {}"
msgid "Push system users to asset: {} => {}" msgid "Push system users to asset: {} => {}"
msgstr "推送系统用户到入资产: {} => {}" msgstr "推送系统用户到入资产: {} => {}"
#: assets/tasks.py:602 #: assets/tasks.py:603
msgid "Test asset user connectivity: {}" msgid "Test asset user connectivity: {}"
msgstr "测试资产用户可连接性: {}" msgstr "测试资产用户可连接性: {}"
...@@ -1343,7 +1351,7 @@ msgid "Import admin user" ...@@ -1343,7 +1351,7 @@ msgid "Import admin user"
msgstr "导入管理用户" msgstr "导入管理用户"
#: assets/templates/assets/_admin_user_update_modal.html:4 #: assets/templates/assets/_admin_user_update_modal.html:4
#: assets/views/admin_user.py:67 #: assets/views/admin_user.py:68
msgid "Update admin user" msgid "Update admin user"
msgstr "更新管理用户" msgstr "更新管理用户"
...@@ -1379,7 +1387,7 @@ msgstr "启用MFA" ...@@ -1379,7 +1387,7 @@ msgstr "启用MFA"
msgid "Import assets" msgid "Import assets"
msgstr "导入资产" msgstr "导入资产"
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:53 #: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:41
#: templates/_nav.html:22 xpack/plugins/change_auth_plan/views.py:116 #: templates/_nav.html:22 xpack/plugins/change_auth_plan/views.py:116
msgid "Asset list" msgid "Asset list"
msgstr "资产列表" msgstr "资产列表"
...@@ -1393,12 +1401,12 @@ msgid "Update asset user auth" ...@@ -1393,12 +1401,12 @@ msgid "Update asset user auth"
msgstr "更新资产用户认证信息" msgstr "更新资产用户认证信息"
#: assets/templates/assets/_asset_user_auth_update_modal.html:23 #: assets/templates/assets/_asset_user_auth_update_modal.html:23
#: xpack/plugins/change_auth_plan/forms.py:102 #: xpack/plugins/change_auth_plan/forms.py:101
msgid "Please input password" msgid "Please input password"
msgstr "请输入密码" msgstr "请输入密码"
#: assets/templates/assets/_asset_user_auth_update_modal.html:68 #: assets/templates/assets/_asset_user_auth_update_modal.html:68
#: assets/templates/assets/asset_detail.html:311 #: assets/templates/assets/asset_detail.html:307
#: users/templates/users/user_detail.html:307 #: users/templates/users/user_detail.html:307
#: users/templates/users/user_detail.html:334 #: users/templates/users/user_detail.html:334
#: xpack/plugins/interface/views.py:35 #: xpack/plugins/interface/views.py:35
...@@ -1446,7 +1454,7 @@ msgstr "查看" ...@@ -1446,7 +1454,7 @@ msgstr "查看"
#: assets/templates/assets/_asset_user_list.html:71 #: assets/templates/assets/_asset_user_list.html:71
#: assets/templates/assets/admin_user_assets.html:61 #: assets/templates/assets/admin_user_assets.html:61
#: assets/templates/assets/asset_asset_user_list.html:57 #: assets/templates/assets/asset_asset_user_list.html:57
#: assets/templates/assets/asset_detail.html:182 #: assets/templates/assets/asset_detail.html:178
#: assets/templates/assets/system_user_assets.html:63 #: assets/templates/assets/system_user_assets.html:63
#: assets/templates/assets/system_user_detail.html:151 #: assets/templates/assets/system_user_detail.html:151
msgid "Test" msgid "Test"
...@@ -1539,7 +1547,7 @@ msgstr "更新系统用户" ...@@ -1539,7 +1547,7 @@ msgstr "更新系统用户"
#: assets/templates/assets/_user_asset_detail_modal.html:11 #: assets/templates/assets/_user_asset_detail_modal.html:11
#: assets/templates/assets/asset_asset_user_list.html:13 #: assets/templates/assets/asset_asset_user_list.html:13
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:232 #: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:204
msgid "Asset detail" msgid "Asset detail"
msgstr "资产详情" msgstr "资产详情"
...@@ -1564,7 +1572,7 @@ msgstr "快速更新" ...@@ -1564,7 +1572,7 @@ msgstr "快速更新"
#: assets/templates/assets/admin_user_assets.html:58 #: assets/templates/assets/admin_user_assets.html:58
#: assets/templates/assets/asset_asset_user_list.html:54 #: assets/templates/assets/asset_asset_user_list.html:54
#: assets/templates/assets/asset_detail.html:179 #: assets/templates/assets/asset_detail.html:175
msgid "Test connective" msgid "Test connective"
msgstr "测试可连接性" msgstr "测试可连接性"
...@@ -1574,13 +1582,13 @@ msgstr "替换资产的管理员" ...@@ -1574,13 +1582,13 @@ msgstr "替换资产的管理员"
#: assets/templates/assets/admin_user_detail.html:91 #: assets/templates/assets/admin_user_detail.html:91
#: perms/templates/perms/asset_permission_asset.html:116 #: perms/templates/perms/asset_permission_asset.html:116
#: xpack/plugins/change_auth_plan/forms.py:110 #: xpack/plugins/change_auth_plan/forms.py:109
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:112 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:112
msgid "Select nodes" msgid "Select nodes"
msgstr "选择节点" msgstr "选择节点"
#: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/admin_user_detail.html:100
#: assets/templates/assets/asset_detail.html:211 #: assets/templates/assets/asset_detail.html:207
#: assets/templates/assets/asset_list.html:396 #: assets/templates/assets/asset_list.html:396
#: assets/templates/assets/cmd_filter_detail.html:106 #: assets/templates/assets/cmd_filter_detail.html:106
#: assets/templates/assets/system_user_assets.html:100 #: assets/templates/assets/system_user_assets.html:100
...@@ -1663,12 +1671,12 @@ msgstr "比例" ...@@ -1663,12 +1671,12 @@ msgstr "比例"
#: users/templates/users/user_group_list.html:194 #: users/templates/users/user_group_list.html:194
#: users/templates/users/user_list.html:158 #: users/templates/users/user_list.html:158
#: users/templates/users/user_list.html:190 #: users/templates/users/user_list.html:190
#: xpack/plugins/vault/templates/vault/vault.html:223 #: xpack/plugins/vault/templates/vault/vault.html:224
msgid "Please select file" msgid "Please select file"
msgstr "选择文件" msgstr "选择文件"
#: assets/templates/assets/asset_asset_user_list.html:16 #: assets/templates/assets/asset_asset_user_list.html:16
#: assets/templates/assets/asset_detail.html:23 assets/views/asset.py:70 #: assets/templates/assets/asset_detail.html:23 assets/views/asset.py:58
msgid "Asset user list" msgid "Asset user list"
msgstr "资产用户列表" msgstr "资产用户列表"
...@@ -1677,7 +1685,7 @@ msgid "Asset users of" ...@@ -1677,7 +1685,7 @@ msgid "Asset users of"
msgstr "资产用户" msgstr "资产用户"
#: assets/templates/assets/asset_asset_user_list.html:47 #: assets/templates/assets/asset_asset_user_list.html:47
#: assets/templates/assets/asset_detail.html:148 #: assets/templates/assets/asset_detail.html:144
#: terminal/templates/terminal/session_detail.html:81 #: terminal/templates/terminal/session_detail.html:81
#: users/templates/users/user_detail.html:138 #: users/templates/users/user_detail.html:138
#: users/templates/users/user_profile.html:146 #: users/templates/users/user_profile.html:146
...@@ -1696,23 +1704,23 @@ msgstr "选择需要修改属性" ...@@ -1696,23 +1704,23 @@ msgstr "选择需要修改属性"
msgid "Select all" msgid "Select all"
msgstr "全选" msgstr "全选"
#: assets/templates/assets/asset_detail.html:96 #: assets/templates/assets/asset_detail.html:92
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
#: assets/templates/assets/asset_detail.html:104 #: assets/templates/assets/asset_detail.html:100
msgid "Disk" msgid "Disk"
msgstr "硬盘" msgstr "硬盘"
#: assets/templates/assets/asset_detail.html:132 #: assets/templates/assets/asset_detail.html:128
#: users/templates/users/user_detail.html:115 #: users/templates/users/user_detail.html:115
#: users/templates/users/user_profile.html:104 #: users/templates/users/user_profile.html:104
msgid "Date joined" msgid "Date joined"
msgstr "创建日期" msgstr "创建日期"
#: assets/templates/assets/asset_detail.html:154 #: assets/templates/assets/asset_detail.html:150
#: assets/templates/assets/user_asset_list.html:46 #: assets/templates/assets/user_asset_list.html:46
#: perms/models/asset_permission.py:96 perms/models/base.py:38 #: perms/models/asset_permission.py:104 perms/models/base.py:38
#: perms/templates/perms/asset_permission_create_update.html:55 #: perms/templates/perms/asset_permission_create_update.html:55
#: perms/templates/perms/asset_permission_detail.html:120 #: perms/templates/perms/asset_permission_detail.html:120
#: perms/templates/perms/remote_app_permission_create_update.html:54 #: perms/templates/perms/remote_app_permission_create_update.html:54
...@@ -1726,11 +1734,11 @@ msgstr "创建日期" ...@@ -1726,11 +1734,11 @@ msgstr "创建日期"
msgid "Active" msgid "Active"
msgstr "激活中" msgstr "激活中"
#: assets/templates/assets/asset_detail.html:171 #: assets/templates/assets/asset_detail.html:167
msgid "Refresh hardware" msgid "Refresh hardware"
msgstr "更新硬件信息" msgstr "更新硬件信息"
#: assets/templates/assets/asset_detail.html:174 #: assets/templates/assets/asset_detail.html:170
msgid "Refresh" msgid "Refresh"
msgstr "刷新" msgstr "刷新"
...@@ -1743,7 +1751,7 @@ msgstr "" ...@@ -1743,7 +1751,7 @@ msgstr ""
"左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的," "左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的,"
"右侧是属于该节点下的资产" "右侧是属于该节点下的资产"
#: assets/templates/assets/asset_list.html:61 assets/views/asset.py:129 #: assets/templates/assets/asset_list.html:61 assets/views/asset.py:107
msgid "Create asset" msgid "Create asset"
msgstr "创建资产" msgstr "创建资产"
...@@ -2038,26 +2046,26 @@ msgstr "系统用户删除失败" ...@@ -2038,26 +2046,26 @@ msgstr "系统用户删除失败"
msgid "Admin user list" msgid "Admin user list"
msgstr "管理用户列表" msgstr "管理用户列表"
#: assets/views/admin_user.py:83 assets/views/admin_user.py:108 #: assets/views/admin_user.py:85 assets/views/admin_user.py:110
msgid "Admin user detail" msgid "Admin user detail"
msgstr "管理用户详情" msgstr "管理用户详情"
#: assets/views/asset.py:82 templates/_nav_user.html:4 #: assets/views/asset.py:70 templates/_nav_user.html:4
msgid "My assets" msgid "My assets"
msgstr "我的资产" msgstr "我的资产"
#: assets/views/asset.py:144 #: assets/views/asset.py:134
msgid "Update asset"
msgstr "更新资产"
#: assets/views/asset.py:146
msgid "Bulk update asset success" msgid "Bulk update asset success"
msgstr "批量更新资产成功" msgstr "批量更新资产成功"
#: assets/views/asset.py:172 #: assets/views/asset.py:174
msgid "Bulk update asset" msgid "Bulk update asset"
msgstr "批量更新资产" msgstr "批量更新资产"
#: assets/views/asset.py:200
msgid "Update asset"
msgstr "更新资产"
#: assets/views/cmd_filter.py:32 #: assets/views/cmd_filter.py:32
msgid "Command filter list" msgid "Command filter list"
msgstr "命令过滤器列表" msgstr "命令过滤器列表"
...@@ -2437,7 +2445,7 @@ msgstr "代码错误" ...@@ -2437,7 +2445,7 @@ msgstr "代码错误"
#: authentication/templates/authentication/login.html:27 #: authentication/templates/authentication/login.html:27
#: authentication/templates/authentication/login_otp.html:27 #: authentication/templates/authentication/login_otp.html:27
#: users/templates/users/reset_password.html:25 #: users/templates/users/reset_password.html:25
#: xpack/plugins/interface/models.py:36 #: xpack/plugins/interface/models.py:39
msgid "Welcome to the Jumpserver open source fortress" msgid "Welcome to the Jumpserver open source fortress"
msgstr "欢迎使用Jumpserver开源堡垒机" msgstr "欢迎使用Jumpserver开源堡垒机"
...@@ -2973,7 +2981,7 @@ msgstr "更新任务内容: {}" ...@@ -2973,7 +2981,7 @@ msgstr "更新任务内容: {}"
#: ops/views/adhoc.py:45 ops/views/adhoc.py:71 ops/views/adhoc.py:85 #: 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: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:47 ops/views/command.py:77
msgid "Ops" msgid "Ops"
msgstr "作业中心" msgstr "作业中心"
...@@ -2989,7 +2997,7 @@ msgstr "执行历史" ...@@ -2989,7 +2997,7 @@ msgstr "执行历史"
msgid "Command execution list" msgid "Command execution list"
msgstr "命令执行列表" msgstr "命令执行列表"
#: ops/views/command.py:73 templates/_nav_user.html:26 #: ops/views/command.py:78 templates/_nav_user.html:26
msgid "Command execution" msgid "Command execution"
msgstr "命令执行" msgstr "命令执行"
...@@ -2998,7 +3006,7 @@ msgid "Organization" ...@@ -2998,7 +3006,7 @@ msgid "Organization"
msgstr "组织" msgstr "组织"
#: perms/forms/asset_permission.py:65 perms/forms/remote_app_permission.py:34 #: perms/forms/asset_permission.py:65 perms/forms/remote_app_permission.py:34
#: perms/models/asset_permission.py:94 perms/models/base.py:37 #: perms/models/asset_permission.py:102 perms/models/base.py:37
#: perms/templates/perms/asset_permission_list.html:47 #: perms/templates/perms/asset_permission_list.html:47
#: perms/templates/perms/asset_permission_list.html:67 #: perms/templates/perms/asset_permission_list.html:67
#: perms/templates/perms/asset_permission_list.html:114 #: perms/templates/perms/asset_permission_list.html:114
...@@ -3011,46 +3019,46 @@ msgstr "组织" ...@@ -3011,46 +3019,46 @@ msgstr "组织"
msgid "User group" msgid "User group"
msgstr "用户组" msgstr "用户组"
#: perms/forms/asset_permission.py:82 #: perms/forms/asset_permission.py:81
msgid "" msgid ""
"Tips: The RDP protocol does not support separate controls for uploading or " "Tips: The RDP protocol does not support separate controls for uploading or "
"downloading files" "downloading files"
msgstr "提示:RDP 协议不支持单独控制上传或下载文件" msgstr "提示:RDP 协议不支持单独控制上传或下载文件"
#: perms/forms/asset_permission.py:92 perms/forms/remote_app_permission.py:47 #: perms/forms/asset_permission.py:91 perms/forms/remote_app_permission.py:47
msgid "User or group at least one required" msgid "User or group at least one required"
msgstr "用户和用户组至少选一个" msgstr "用户和用户组至少选一个"
#: perms/forms/asset_permission.py:101 #: perms/forms/asset_permission.py:100
msgid "Asset or group at least one required" msgid "Asset or group at least one required"
msgstr "资产和节点至少选一个" msgstr "资产和节点至少选一个"
#: perms/models/asset_permission.py:26 settings/forms.py:143 #: perms/models/asset_permission.py:27 settings/forms.py:143
msgid "All" msgid "All"
msgstr "全部" msgstr "全部"
#: perms/models/asset_permission.py:28 #: perms/models/asset_permission.py:29
msgid "Upload file" msgid "Upload file"
msgstr "上传文件" msgstr "上传文件"
#: perms/models/asset_permission.py:29 #: perms/models/asset_permission.py:30
msgid "Download file" msgid "Download file"
msgstr "下载文件" msgstr "下载文件"
#: perms/models/asset_permission.py:30 #: perms/models/asset_permission.py:31
msgid "Upload download" msgid "Upload download"
msgstr "上传下载" msgstr "上传下载"
#: perms/models/asset_permission.py:72 #: perms/models/asset_permission.py:80
msgid "Actions" msgid "Actions"
msgstr "动作" msgstr "动作"
#: perms/models/asset_permission.py:76 perms/models/asset_permission.py:106 #: perms/models/asset_permission.py:84 perms/models/asset_permission.py:114
#: templates/_nav.html:44 #: templates/_nav.html:44
msgid "Asset permission" msgid "Asset permission"
msgstr "资产授权" msgstr "资产授权"
#: perms/models/asset_permission.py:97 perms/models/base.py:40 #: perms/models/asset_permission.py:105 perms/models/base.py:40
#: perms/templates/perms/asset_permission_detail.html:90 #: perms/templates/perms/asset_permission_detail.html:90
#: perms/templates/perms/remote_app_permission_detail.html:82 #: perms/templates/perms/remote_app_permission_detail.html:82
#: users/models/user.py:102 users/templates/users/user_detail.html:107 #: users/models/user.py:102 users/templates/users/user_detail.html:107
...@@ -4373,11 +4381,11 @@ msgid "" ...@@ -4373,11 +4381,11 @@ msgid ""
"You should use your ssh client tools connect terminal: {} <br /> <br />{}" "You should use your ssh client tools connect terminal: {} <br /> <br />{}"
msgstr "你可以使用ssh客户端工具连接终端" msgstr "你可以使用ssh客户端工具连接终端"
#: users/api/user.py:93 #: users/api/user.py:97
msgid "You do not have permission." msgid "You do not have permission."
msgstr "你没有权限" msgstr "你没有权限"
#: users/api/user.py:186 #: users/api/user.py:190
msgid "Could not reset self otp, use profile reset instead" msgid "Could not reset self otp, use profile reset instead"
msgstr "不能再该页面重置MFA, 请去个人信息页面重置" msgstr "不能再该页面重置MFA, 请去个人信息页面重置"
...@@ -4494,7 +4502,7 @@ msgstr "复制你的公钥到这里" ...@@ -4494,7 +4502,7 @@ msgstr "复制你的公钥到这里"
msgid "Select users" msgid "Select users"
msgstr "选择用户" msgstr "选择用户"
#: users/models/user.py:37 users/models/user.py:439 #: users/models/user.py:37 users/models/user.py:449
msgid "Administrator" msgid "Administrator"
msgstr "管理员" msgstr "管理员"
...@@ -4544,7 +4552,7 @@ msgstr "最后更新密码日期" ...@@ -4544,7 +4552,7 @@ msgstr "最后更新密码日期"
msgid "User auth from {}, go there change password" msgid "User auth from {}, go there change password"
msgstr "用户认证源来自 {}, 请去相应系统修改密码" msgstr "用户认证源来自 {}, 请去相应系统修改密码"
#: users/models/user.py:442 #: users/models/user.py:452
msgid "Administrator is the super user of system" msgid "Administrator is the super user of system"
msgstr "Administrator是初始的超级管理员" msgstr "Administrator是初始的超级管理员"
...@@ -5305,26 +5313,25 @@ msgid "Password length" ...@@ -5305,26 +5313,25 @@ msgid "Password length"
msgstr "密码长度" msgstr "密码长度"
#: xpack/plugins/change_auth_plan/forms.py:45 #: xpack/plugins/change_auth_plan/forms.py:45
#: xpack/plugins/change_auth_plan/models.py:213 msgid "* For security, please do not change root user's password"
msgid "* For security, do not change {} user's password" msgstr "* 为了安全,请不要更改root用户的密码"
msgstr "* 为了安全,禁止更改 {} 用户的密码"
#: xpack/plugins/change_auth_plan/forms.py:55 #: xpack/plugins/change_auth_plan/forms.py:54
msgid "* Please enter custom password" msgid "* Please enter custom password"
msgstr "* 请输入自定义密码" msgstr "* 请输入自定义密码"
#: xpack/plugins/change_auth_plan/forms.py:64 #: xpack/plugins/change_auth_plan/forms.py:63
msgid "* Please enter a valid crontab expression" msgid "* Please enter a valid crontab expression"
msgstr "* 请输入有效的 crontab 表达式" msgstr "* 请输入有效的 crontab 表达式"
#: xpack/plugins/change_auth_plan/forms.py:117 #: xpack/plugins/change_auth_plan/forms.py:116
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:60 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:60
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:81 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:81
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:17 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:17
msgid "Periodic perform" msgid "Periodic perform"
msgstr "定时执行" msgstr "定时执行"
#: xpack/plugins/change_auth_plan/forms.py:121 #: xpack/plugins/change_auth_plan/forms.py:120
msgid "" msgid ""
"Tips: The username of the user on the asset to be modified. if the user " "Tips: The username of the user on the asset to be modified. if the user "
"exists, change the password; If the user does not exist, create the user." "exists, change the password; If the user does not exist, create the user."
...@@ -5332,11 +5339,11 @@ msgstr "" ...@@ -5332,11 +5339,11 @@ msgstr ""
"提示:用户名为将要修改的资产上的用户的用户名。如果用户存在,则修改密码;如果" "提示:用户名为将要修改的资产上的用户的用户名。如果用户存在,则修改密码;如果"
"用户不存在,则创建用户。" "用户不存在,则创建用户。"
#: xpack/plugins/change_auth_plan/forms.py:125 #: xpack/plugins/change_auth_plan/forms.py:124
msgid "Tips: (Units: hour)" msgid "Tips: (Units: hour)"
msgstr "提示:(单位: 时)" msgstr "提示:(单位: 时)"
#: xpack/plugins/change_auth_plan/forms.py:126 #: xpack/plugins/change_auth_plan/forms.py:125
msgid "" msgid ""
"eg: Every Sunday 03:05 run <5 3 * * 0> <br> Tips: Using 5 digits linux " "eg: Every Sunday 03:05 run <5 3 * * 0> <br> Tips: Using 5 digits linux "
"crontab expressions <min hour day month week> (<a href='https://tool.lu/" "crontab expressions <min hour day month week> (<a href='https://tool.lu/"
...@@ -5389,6 +5396,10 @@ msgstr "定期执行" ...@@ -5389,6 +5396,10 @@ msgstr "定期执行"
msgid "Password rules" msgid "Password rules"
msgstr "密码规则" msgstr "密码规则"
#: xpack/plugins/change_auth_plan/models.py:213
msgid "For security, do not change {} user's password"
msgstr "* 为了安全,禁止更改 {} 用户的密码"
#: xpack/plugins/change_auth_plan/models.py:217 #: xpack/plugins/change_auth_plan/models.py:217
msgid "Assets is empty, please add the asset" msgid "Assets is empty, please add the asset"
msgstr "资产为空,请添加资产" msgstr "资产为空,请添加资产"
...@@ -5757,7 +5768,7 @@ msgid "Interface settings" ...@@ -5757,7 +5768,7 @@ msgid "Interface settings"
msgstr "界面设置" msgstr "界面设置"
#: xpack/plugins/interface/templates/interface/interface.html:15 #: xpack/plugins/interface/templates/interface/interface.html:15
#: xpack/plugins/interface/views.py:24 xpack/plugins/interface/views.py:25 #: xpack/plugins/interface/views.py:25
msgid "Interface setting" msgid "Interface setting"
msgstr "界面设置" msgstr "界面设置"
...@@ -5780,22 +5791,26 @@ msgstr "恢复默认成功!" ...@@ -5780,22 +5791,26 @@ msgstr "恢复默认成功!"
msgid "Restore default failed." msgid "Restore default failed."
msgstr "恢复默认失败!" msgstr "恢复默认失败!"
#: xpack/plugins/interface/views.py:24
msgid "Interface"
msgstr "界面"
#: xpack/plugins/interface/views.py:51 #: xpack/plugins/interface/views.py:51
msgid "It is already in the default setting state!" msgid "It is already in the default setting state!"
msgstr "当前已经是初始化状态!" msgstr "当前已经是初始化状态!"
#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:94 #: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:98
#: xpack/plugins/license/templates/license/license_detail.html:50 #: xpack/plugins/license/templates/license/license_detail.html:50
#: xpack/plugins/license/templates/license/license_detail.html:55 #: xpack/plugins/license/templates/license/license_detail.html:55
#: xpack/plugins/license/views.py:32 #: xpack/plugins/license/views.py:32
msgid "License" msgid "License"
msgstr "许可证" msgstr "许可证"
#: xpack/plugins/license/models.py:74 #: xpack/plugins/license/models.py:75
msgid "Standard edition" msgid "Standard edition"
msgstr "标准版" msgstr "标准版"
#: xpack/plugins/license/models.py:76 #: xpack/plugins/license/models.py:77
msgid "Enterprise edition" msgid "Enterprise edition"
msgstr "企业版" msgstr "企业版"
...@@ -5883,9 +5898,7 @@ msgstr "无效的许可证" ...@@ -5883,9 +5898,7 @@ msgstr "无效的许可证"
msgid "Admin" msgid "Admin"
msgstr "管理员" msgstr "管理员"
#: xpack/plugins/orgs/meta.py:8 xpack/plugins/orgs/views.py:26 #: xpack/plugins/orgs/meta.py:8
#: xpack/plugins/orgs/views.py:43 xpack/plugins/orgs/views.py:60
#: xpack/plugins/orgs/views.py:77
msgid "Organizations" msgid "Organizations"
msgstr "组织管理" msgstr "组织管理"
...@@ -5902,6 +5915,11 @@ msgstr "添加管理员" ...@@ -5902,6 +5915,11 @@ msgstr "添加管理员"
msgid "Create organization " msgid "Create organization "
msgstr "创建组织" msgstr "创建组织"
#: 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 "Orgs"
msgstr "组织管理"
#: xpack/plugins/orgs/views.py:27 #: xpack/plugins/orgs/views.py:27
msgid "Org list" msgid "Org list"
msgstr "组织列表" msgstr "组织列表"
...@@ -5914,8 +5932,8 @@ msgstr "创建组织" ...@@ -5914,8 +5932,8 @@ msgstr "创建组织"
msgid "Update org" msgid "Update org"
msgstr "更新组织" msgstr "更新组织"
#: xpack/plugins/vault/meta.py:11 xpack/plugins/vault/views.py:22 #: xpack/plugins/vault/meta.py:11 xpack/plugins/vault/views.py:23
#: xpack/plugins/vault/views.py:37 #: xpack/plugins/vault/views.py:38
msgid "Vault" msgid "Vault"
msgstr "密码匣子" msgstr "密码匣子"
...@@ -5923,19 +5941,16 @@ msgstr "密码匣子" ...@@ -5923,19 +5941,16 @@ msgstr "密码匣子"
msgid "Import vault" msgid "Import vault"
msgstr "导入密码" msgstr "导入密码"
#: xpack/plugins/vault/views.py:23 #: xpack/plugins/vault/views.py:24
msgid "vault list" msgid "vault list"
msgstr "密码匣子" msgstr "密码匣子"
#: xpack/plugins/vault/views.py:38 #: xpack/plugins/vault/views.py:39
msgid "vault create" msgid "vault create"
msgstr "创建" msgstr "创建"
#~ msgid "* For security, please do not change root user's password" #~ msgid "Org"
#~ msgstr "* 为了安全,请不要更改root用户的密码" #~ msgstr "组织"
#~ msgid "Interface"
#~ msgstr "界面"
#~ msgid "already exists" #~ msgid "already exists"
#~ msgstr "已经存在" #~ msgstr "已经存在"
......
...@@ -1156,4 +1156,22 @@ function timeOffset(a, b) { ...@@ -1156,4 +1156,22 @@ function timeOffset(a, b) {
return seconds.toFixed(1) + " " + getTimeUnits("s") return seconds.toFixed(1) + " " + getTimeUnits("s")
} }
return "" return ""
} }
\ No newline at end of file
function readFile(ref) {
var files = ref.prop('files');
var hasFile = files && files.length > 0;
if (hasFile) {
var reader = new FileReader();//新建一个FileReader
console.log(typeof files[0]);
reader.readAsText(files[0], "UTF-8");//读取文件
reader.onload = function(evt){ //读取完文件之后会回来这里
ref.trigger("onload", evt.target.result);
};
} else {
ref.trigger("onload", null);
}
return ref
}
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