mirror of https://github.com/jumpserver/jumpserver
[Update] Merge it
commit
82b9c2519b
|
@ -44,4 +44,4 @@ class GatewayTestConnectionApi(SingleObjectMixin, APIView):
|
||||||
if ok:
|
if ok:
|
||||||
return Response("ok")
|
return Response("ok")
|
||||||
else:
|
else:
|
||||||
return Response({"failed": e}, status=404)
|
return Response({"error": e}, status=400)
|
||||||
|
|
|
@ -38,6 +38,9 @@ class AssetUserQuerySet(list):
|
||||||
if len(v) == 0:
|
if len(v) == 0:
|
||||||
return self
|
return self
|
||||||
if k.find("__in") >= 0:
|
if k.find("__in") >= 0:
|
||||||
|
_k = k.split('__')[0]
|
||||||
|
in_kwargs[_k] = v
|
||||||
|
else:
|
||||||
in_kwargs[k] = v
|
in_kwargs[k] = v
|
||||||
for k in in_kwargs:
|
for k in in_kwargs:
|
||||||
kwargs.pop(k)
|
kwargs.pop(k)
|
||||||
|
@ -45,17 +48,16 @@ class AssetUserQuerySet(list):
|
||||||
if len(in_kwargs) == 0:
|
if len(in_kwargs) == 0:
|
||||||
return self
|
return self
|
||||||
for i in self:
|
for i in self:
|
||||||
matched = True
|
matched = False
|
||||||
for k, v in in_kwargs.items():
|
for k, v in in_kwargs.items():
|
||||||
key = k.split('__')[0]
|
attr = getattr(i, k, None)
|
||||||
attr = getattr(i, key, None)
|
|
||||||
# 如果属性或者value中是uuid,则转换成string
|
# 如果属性或者value中是uuid,则转换成string
|
||||||
if isinstance(v[0], uuid.UUID):
|
if isinstance(v[0], uuid.UUID):
|
||||||
v = [str(i) for i in v]
|
v = [str(i) for i in v]
|
||||||
if isinstance(attr, uuid.UUID):
|
if isinstance(attr, uuid.UUID):
|
||||||
attr = str(attr)
|
attr = str(attr)
|
||||||
if attr not in v:
|
if v in attr:
|
||||||
matched = False
|
matched = True
|
||||||
if matched:
|
if matched:
|
||||||
queryset.append(i)
|
queryset.append(i)
|
||||||
return AssetUserQuerySet(queryset)
|
return AssetUserQuerySet(queryset)
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
import random
|
import random
|
||||||
|
import re
|
||||||
|
|
||||||
import paramiko
|
import paramiko
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
@ -63,6 +63,9 @@ class Gateway(AssetUser):
|
||||||
def test_connective(self, local_port=None):
|
def test_connective(self, local_port=None):
|
||||||
if local_port is None:
|
if local_port is None:
|
||||||
local_port = self.port
|
local_port = self.port
|
||||||
|
if not re.match(r'\w+$', self.password):
|
||||||
|
return False, _("Password should not contain special characters")
|
||||||
|
|
||||||
client = paramiko.SSHClient()
|
client = paramiko.SSHClient()
|
||||||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||||
proxy = paramiko.SSHClient()
|
proxy = paramiko.SSHClient()
|
||||||
|
|
|
@ -139,7 +139,7 @@ $(document).ready(function(){
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: JSON.stringify({'port': parseInt(data.port)}),
|
body: JSON.stringify({'port': parseInt(data.port)}),
|
||||||
success_message: "{% trans 'Can be connected' %}",
|
success_message: "{% trans 'Can be connected' %}",
|
||||||
fail_message: "{% trans 'The connection fails' %}"
|
{#fail_message: "{% trans 'The connection fails' %}"#}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
Binary file not shown.
|
@ -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-11-19 10:29+0800\n"
|
"POT-Creation-Date: 2019-11-20 12:02+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"
|
||||||
|
@ -144,7 +144,7 @@ msgstr "资产"
|
||||||
#: settings/templates/settings/terminal_setting.html:105 terminal/models.py:23
|
#: settings/templates/settings/terminal_setting.html:105 terminal/models.py:23
|
||||||
#: terminal/models.py:260 terminal/templates/terminal/terminal_detail.html:43
|
#: terminal/models.py:260 terminal/templates/terminal/terminal_detail.html:43
|
||||||
#: terminal/templates/terminal/terminal_list.html:29 users/forms.py:162
|
#: terminal/templates/terminal/terminal_list.html:29 users/forms.py:162
|
||||||
#: users/models/group.py:14 users/models/user.py:428
|
#: users/models/group.py:14 users/models/user.py:429
|
||||||
#: users/templates/users/_select_user_modal.html:13
|
#: users/templates/users/_select_user_modal.html:13
|
||||||
#: users/templates/users/user_detail.html:63
|
#: users/templates/users/user_detail.html:63
|
||||||
#: users/templates/users/user_group_detail.html:55
|
#: users/templates/users/user_group_detail.html:55
|
||||||
|
@ -198,7 +198,7 @@ msgstr "参数"
|
||||||
#: orgs/models.py:16 perms/models/base.py:54
|
#: orgs/models.py:16 perms/models/base.py:54
|
||||||
#: 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:469 users/serializers/group.py:32
|
#: users/models/user.py:470 users/serializers/group.py:32
|
||||||
#: users/templates/users/user_detail.html:111
|
#: users/templates/users/user_detail.html:111
|
||||||
#: xpack/plugins/change_auth_plan/models.py:109
|
#: xpack/plugins/change_auth_plan/models.py:109
|
||||||
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113
|
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113
|
||||||
|
@ -261,7 +261,7 @@ msgstr "创建日期"
|
||||||
#: settings/models.py:34 terminal/models.py:33
|
#: settings/models.py:34 terminal/models.py: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:15
|
#: tickets/templates/tickets/ticket_detail.html:104 users/models/group.py:15
|
||||||
#: users/models/user.py:461 users/templates/users/user_detail.html:129
|
#: users/models/user.py:462 users/templates/users/user_detail.html:129
|
||||||
#: users/templates/users/user_group_detail.html:67
|
#: users/templates/users/user_group_detail.html:67
|
||||||
#: users/templates/users/user_group_list.html:37
|
#: users/templates/users/user_group_list.html:37
|
||||||
#: users/templates/users/user_profile.html:138
|
#: users/templates/users/user_profile.html:138
|
||||||
|
@ -683,7 +683,7 @@ msgstr "选择资产"
|
||||||
msgid "Content should not be contain: {}"
|
msgid "Content should not be contain: {}"
|
||||||
msgstr "内容不能包含: {}"
|
msgstr "内容不能包含: {}"
|
||||||
|
|
||||||
#: assets/forms/domain.py:55
|
#: assets/forms/domain.py:55 assets/models/domain.py:67
|
||||||
msgid "Password should not contain special characters"
|
msgid "Password should not contain special characters"
|
||||||
msgstr "不能包含特殊字符"
|
msgstr "不能包含特殊字符"
|
||||||
|
|
||||||
|
@ -708,7 +708,7 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC"
|
||||||
#: perms/templates/perms/asset_permission_user.html:55
|
#: perms/templates/perms/asset_permission_user.html:55
|
||||||
#: perms/templates/perms/remote_app_permission_user.html:54
|
#: perms/templates/perms/remote_app_permission_user.html:54
|
||||||
#: settings/templates/settings/_ldap_list_users_modal.html:31 users/forms.py:14
|
#: settings/templates/settings/_ldap_list_users_modal.html:31 users/forms.py:14
|
||||||
#: users/forms.py:161 users/models/user.py:426
|
#: users/forms.py:161 users/models/user.py:427
|
||||||
#: users/templates/users/_select_user_modal.html:14
|
#: users/templates/users/_select_user_modal.html:14
|
||||||
#: 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
|
||||||
|
@ -749,7 +749,7 @@ msgstr "密码"
|
||||||
|
|
||||||
#: assets/forms/user.py:30 assets/serializers/asset_user.py:71
|
#: assets/forms/user.py:30 assets/serializers/asset_user.py:71
|
||||||
#: assets/templates/assets/_asset_user_auth_update_modal.html:27
|
#: assets/templates/assets/_asset_user_auth_update_modal.html:27
|
||||||
#: users/models/user.py:455
|
#: users/models/user.py:456
|
||||||
msgid "Private key"
|
msgid "Private key"
|
||||||
msgstr "ssh私钥"
|
msgstr "ssh私钥"
|
||||||
|
|
||||||
|
@ -964,7 +964,7 @@ msgstr "带宽"
|
||||||
msgid "Contact"
|
msgid "Contact"
|
||||||
msgstr "联系人"
|
msgstr "联系人"
|
||||||
|
|
||||||
#: assets/models/cluster.py:22 users/models/user.py:447
|
#: assets/models/cluster.py:22 users/models/user.py:448
|
||||||
#: users/templates/users/user_detail.html:76
|
#: users/templates/users/user_detail.html:76
|
||||||
msgid "Phone"
|
msgid "Phone"
|
||||||
msgstr "手机"
|
msgstr "手机"
|
||||||
|
@ -990,7 +990,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:567
|
#: users/models/user.py:568
|
||||||
msgid "System"
|
msgid "System"
|
||||||
msgstr "系统"
|
msgstr "系统"
|
||||||
|
|
||||||
|
@ -1133,7 +1133,7 @@ msgstr "默认资产组"
|
||||||
#: tickets/models/ticket.py:128 tickets/templates/tickets/ticket_detail.html:32
|
#: tickets/models/ticket.py:128 tickets/templates/tickets/ticket_detail.html:32
|
||||||
#: tickets/templates/tickets/ticket_list.html:34
|
#: tickets/templates/tickets/ticket_list.html:34
|
||||||
#: tickets/templates/tickets/ticket_list.html:100 users/forms.py:339
|
#: tickets/templates/tickets/ticket_list.html:100 users/forms.py:339
|
||||||
#: users/models/user.py:148 users/models/user.py:164 users/models/user.py:555
|
#: users/models/user.py:148 users/models/user.py:164 users/models/user.py:556
|
||||||
#: users/serializers/group.py:21
|
#: users/serializers/group.py:21
|
||||||
#: 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:250
|
#: users/templates/users/user_group_list.html:36 users/views/user.py:250
|
||||||
|
@ -1289,7 +1289,7 @@ msgid "Backend"
|
||||||
msgstr "后端"
|
msgstr "后端"
|
||||||
|
|
||||||
#: assets/serializers/asset_user.py:67 users/forms.py:282
|
#: assets/serializers/asset_user.py:67 users/forms.py:282
|
||||||
#: users/models/user.py:458 users/templates/users/first_login.html:42
|
#: users/models/user.py:459 users/templates/users/first_login.html:42
|
||||||
#: users/templates/users/user_password_update.html:49
|
#: users/templates/users/user_password_update.html:49
|
||||||
#: users/templates/users/user_profile.html:69
|
#: users/templates/users/user_profile.html:69
|
||||||
#: users/templates/users/user_profile_update.html:46
|
#: users/templates/users/user_profile_update.html:46
|
||||||
|
@ -2012,10 +2012,6 @@ msgstr "测试连接"
|
||||||
msgid "Can be connected"
|
msgid "Can be connected"
|
||||||
msgstr "可连接"
|
msgstr "可连接"
|
||||||
|
|
||||||
#: assets/templates/assets/domain_gateway_list.html:142
|
|
||||||
msgid "The connection fails"
|
|
||||||
msgstr "连接失败"
|
|
||||||
|
|
||||||
#: assets/templates/assets/domain_list.html:6
|
#: assets/templates/assets/domain_list.html:6
|
||||||
msgid ""
|
msgid ""
|
||||||
"The domain function is added to address the fact that some environments "
|
"The domain function is added to address the fact that some environments "
|
||||||
|
@ -2293,7 +2289,7 @@ msgstr "Agent"
|
||||||
|
|
||||||
#: audits/models.py:86 audits/templates/audits/login_log_list.html:62
|
#: audits/models.py:86 audits/templates/audits/login_log_list.html:62
|
||||||
#: authentication/templates/authentication/_mfa_confirm_modal.html:14
|
#: authentication/templates/authentication/_mfa_confirm_modal.html:14
|
||||||
#: users/forms.py:194 users/models/user.py:450
|
#: users/forms.py:194 users/models/user.py:451
|
||||||
#: users/templates/users/first_login.html:45
|
#: users/templates/users/first_login.html:45
|
||||||
msgid "MFA"
|
msgid "MFA"
|
||||||
msgstr "MFA"
|
msgstr "MFA"
|
||||||
|
@ -2807,7 +2803,7 @@ msgstr ""
|
||||||
|
|
||||||
#: jumpserver/views.py:233
|
#: jumpserver/views.py:233
|
||||||
msgid "Websocket server run on port: {}, you should proxy it on nginx"
|
msgid "Websocket server run on port: {}, you should proxy it on nginx"
|
||||||
msgstr ""
|
msgstr "Websocket 服务运行在端口: {}, 请检查nginx是否代理是否设置"
|
||||||
|
|
||||||
#: jumpserver/views.py:241
|
#: jumpserver/views.py:241
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -3198,7 +3194,7 @@ msgstr "提示:RDP 协议不支持单独控制上传或下载文件"
|
||||||
#: perms/templates/perms/asset_permission_list.html:211
|
#: perms/templates/perms/asset_permission_list.html:211
|
||||||
#: perms/templates/perms/remote_app_permission_list.html:16
|
#: perms/templates/perms/remote_app_permission_list.html:16
|
||||||
#: templates/_nav.html:21 users/forms.py:313 users/models/group.py:26
|
#: templates/_nav.html:21 users/forms.py:313 users/models/group.py:26
|
||||||
#: users/models/user.py:434 users/templates/users/_select_user_modal.html:16
|
#: users/models/user.py:435 users/templates/users/_select_user_modal.html:16
|
||||||
#: users/templates/users/user_detail.html:219
|
#: users/templates/users/user_detail.html:219
|
||||||
#: users/templates/users/user_list.html:38
|
#: users/templates/users/user_list.html:38
|
||||||
#: xpack/plugins/orgs/templates/orgs/org_list.html:16
|
#: xpack/plugins/orgs/templates/orgs/org_list.html:16
|
||||||
|
@ -3241,7 +3237,7 @@ msgstr "资产授权"
|
||||||
#: perms/models/base.py:53
|
#: perms/models/base.py:53
|
||||||
#: 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:466 users/templates/users/user_detail.html:107
|
#: users/models/user.py:467 users/templates/users/user_detail.html:107
|
||||||
#: users/templates/users/user_profile.html:120
|
#: users/templates/users/user_profile.html:120
|
||||||
msgid "Date expired"
|
msgid "Date expired"
|
||||||
msgstr "失效日期"
|
msgstr "失效日期"
|
||||||
|
@ -3816,7 +3812,7 @@ msgid "Refresh cache"
|
||||||
msgstr "刷新缓存"
|
msgstr "刷新缓存"
|
||||||
|
|
||||||
#: settings/templates/settings/_ldap_list_users_modal.html:33
|
#: settings/templates/settings/_ldap_list_users_modal.html:33
|
||||||
#: users/models/user.py:430 users/templates/users/user_detail.html:71
|
#: users/models/user.py:431 users/templates/users/user_detail.html:71
|
||||||
#: users/templates/users/user_profile.html:59
|
#: users/templates/users/user_profile.html:59
|
||||||
msgid "Email"
|
msgid "Email"
|
||||||
msgstr "邮件"
|
msgstr "邮件"
|
||||||
|
@ -4757,11 +4753,11 @@ msgstr "工单列表"
|
||||||
msgid "Ticket detail"
|
msgid "Ticket detail"
|
||||||
msgstr "工单详情"
|
msgstr "工单详情"
|
||||||
|
|
||||||
#: users/api/user.py:173
|
#: users/api/user.py:174
|
||||||
msgid "Could not reset self otp, use profile reset instead"
|
msgid "Could not reset self otp, use profile reset instead"
|
||||||
msgstr "不能再该页面重置MFA, 请去个人信息页面重置"
|
msgstr "不能再该页面重置MFA, 请去个人信息页面重置"
|
||||||
|
|
||||||
#: users/forms.py:47 users/models/user.py:438
|
#: users/forms.py:47 users/models/user.py:439
|
||||||
#: users/templates/users/_select_user_modal.html:15
|
#: users/templates/users/_select_user_modal.html:15
|
||||||
#: users/templates/users/user_detail.html:87
|
#: users/templates/users/user_detail.html:87
|
||||||
#: users/templates/users/user_list.html:37
|
#: users/templates/users/user_list.html:37
|
||||||
|
@ -4769,7 +4765,7 @@ msgstr "不能再该页面重置MFA, 请去个人信息页面重置"
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "角色"
|
msgstr "角色"
|
||||||
|
|
||||||
#: users/forms.py:51 users/models/user.py:473
|
#: users/forms.py:51 users/models/user.py:474
|
||||||
#: users/templates/users/user_detail.html:103
|
#: users/templates/users/user_detail.html:103
|
||||||
#: users/templates/users/user_list.html:39
|
#: users/templates/users/user_list.html:39
|
||||||
#: users/templates/users/user_profile.html:102
|
#: users/templates/users/user_profile.html:102
|
||||||
|
@ -4797,7 +4793,7 @@ msgstr "添加到用户组"
|
||||||
msgid "Public key should not be the same as your old one."
|
msgid "Public key should not be the same as your old one."
|
||||||
msgstr "不能和原来的密钥相同"
|
msgstr "不能和原来的密钥相同"
|
||||||
|
|
||||||
#: users/forms.py:110 users/forms.py:271 users/serializers/user.py:109
|
#: users/forms.py:110 users/forms.py:271 users/serializers/user.py:122
|
||||||
msgid "Not a valid ssh public key"
|
msgid "Not a valid ssh public key"
|
||||||
msgstr "ssh密钥不合法"
|
msgstr "ssh密钥不合法"
|
||||||
|
|
||||||
|
@ -4887,7 +4883,7 @@ msgstr "选择用户"
|
||||||
msgid "User auth from {}, go there change password"
|
msgid "User auth from {}, go there change password"
|
||||||
msgstr "用户认证源来自 {}, 请去相应系统修改密码"
|
msgstr "用户认证源来自 {}, 请去相应系统修改密码"
|
||||||
|
|
||||||
#: users/models/user.py:147 users/models/user.py:563
|
#: users/models/user.py:147 users/models/user.py:564
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "管理员"
|
msgstr "管理员"
|
||||||
|
|
||||||
|
@ -4912,23 +4908,23 @@ msgstr "组织审计员"
|
||||||
msgid "Force enable"
|
msgid "Force enable"
|
||||||
msgstr "强制启用"
|
msgstr "强制启用"
|
||||||
|
|
||||||
#: users/models/user.py:418
|
#: users/models/user.py:419
|
||||||
msgid "Local"
|
msgid "Local"
|
||||||
msgstr "数据库"
|
msgstr "数据库"
|
||||||
|
|
||||||
#: users/models/user.py:441
|
#: users/models/user.py:442
|
||||||
msgid "Avatar"
|
msgid "Avatar"
|
||||||
msgstr "头像"
|
msgstr "头像"
|
||||||
|
|
||||||
#: users/models/user.py:444 users/templates/users/user_detail.html:82
|
#: users/models/user.py:445 users/templates/users/user_detail.html:82
|
||||||
msgid "Wechat"
|
msgid "Wechat"
|
||||||
msgstr "微信"
|
msgstr "微信"
|
||||||
|
|
||||||
#: users/models/user.py:477
|
#: users/models/user.py:478
|
||||||
msgid "Date password last updated"
|
msgid "Date password last updated"
|
||||||
msgstr "最后更新密码日期"
|
msgstr "最后更新密码日期"
|
||||||
|
|
||||||
#: users/models/user.py:566
|
#: users/models/user.py:567
|
||||||
msgid "Administrator is the super user of system"
|
msgid "Administrator is the super user of system"
|
||||||
msgstr "Administrator是初始的超级管理员"
|
msgstr "Administrator是初始的超级管理员"
|
||||||
|
|
||||||
|
@ -4936,42 +4932,42 @@ msgstr "Administrator是初始的超级管理员"
|
||||||
msgid "Auditors cannot be join in the user group"
|
msgid "Auditors cannot be join in the user group"
|
||||||
msgstr "审计员不能被加入到用户组"
|
msgstr "审计员不能被加入到用户组"
|
||||||
|
|
||||||
#: users/serializers/user.py:39
|
#: users/serializers/user.py:35
|
||||||
msgid "Groups name"
|
|
||||||
msgstr "用户组名"
|
|
||||||
|
|
||||||
#: users/serializers/user.py:40
|
|
||||||
msgid "Source name"
|
|
||||||
msgstr "用户来源名"
|
|
||||||
|
|
||||||
#: users/serializers/user.py:41
|
|
||||||
msgid "Is first login"
|
msgid "Is first login"
|
||||||
msgstr "首次登录"
|
msgstr "首次登录"
|
||||||
|
|
||||||
#: users/serializers/user.py:42
|
#: users/serializers/user.py:36
|
||||||
msgid "Role name"
|
|
||||||
msgstr "角色名"
|
|
||||||
|
|
||||||
#: users/serializers/user.py:43
|
|
||||||
msgid "Is valid"
|
msgid "Is valid"
|
||||||
msgstr "账户是否有效"
|
msgstr "账户是否有效"
|
||||||
|
|
||||||
#: users/serializers/user.py:44
|
#: users/serializers/user.py:37
|
||||||
msgid "Is expired"
|
msgid "Is expired"
|
||||||
msgstr " 是否过期"
|
msgstr " 是否过期"
|
||||||
|
|
||||||
#: users/serializers/user.py:45
|
#: users/serializers/user.py:38
|
||||||
msgid "Avatar url"
|
msgid "Avatar url"
|
||||||
msgstr "头像路径"
|
msgstr "头像路径"
|
||||||
|
|
||||||
#: users/serializers/user.py:65
|
#: users/serializers/user.py:46
|
||||||
msgid "Role limit to {}"
|
msgid "Role limit to {}"
|
||||||
msgstr "角色只能为 {}"
|
msgstr "角色只能为 {}"
|
||||||
|
|
||||||
#: users/serializers/user.py:77
|
#: users/serializers/user.py:58
|
||||||
msgid "Password does not match security rules"
|
msgid "Password does not match security rules"
|
||||||
msgstr "密码不满足安全规则"
|
msgstr "密码不满足安全规则"
|
||||||
|
|
||||||
|
#: users/serializers/user.py:107
|
||||||
|
msgid "Groups name"
|
||||||
|
msgstr "用户组名"
|
||||||
|
|
||||||
|
#: users/serializers/user.py:108
|
||||||
|
msgid "Source name"
|
||||||
|
msgstr "用户来源名"
|
||||||
|
|
||||||
|
#: users/serializers/user.py:109
|
||||||
|
msgid "Role name"
|
||||||
|
msgstr "角色名"
|
||||||
|
|
||||||
#: users/serializers_v2/user.py:36
|
#: users/serializers_v2/user.py:36
|
||||||
msgid "name not unique"
|
msgid "name not unique"
|
||||||
msgstr "名称重复"
|
msgstr "名称重复"
|
||||||
|
@ -6431,6 +6427,9 @@ msgstr "密码匣子"
|
||||||
msgid "vault create"
|
msgid "vault create"
|
||||||
msgstr "创建"
|
msgstr "创建"
|
||||||
|
|
||||||
|
#~ msgid "The connection fails"
|
||||||
|
#~ msgstr "连接失败"
|
||||||
|
|
||||||
#~ msgid "Assigned ticket"
|
#~ msgid "Assigned ticket"
|
||||||
#~ msgstr "处理人"
|
#~ msgstr "处理人"
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
from rest_framework import viewsets, generics
|
from rest_framework import viewsets, generics
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
from common.permissions import IsSuperUser, WithBootstrapToken
|
from common.permissions import IsSuperUser, WithBootstrapToken
|
||||||
|
|
||||||
|
@ -17,6 +18,9 @@ class TerminalViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Terminal.objects.filter(is_deleted=False)
|
queryset = Terminal.objects.filter(is_deleted=False)
|
||||||
serializer_class = serializers.TerminalSerializer
|
serializer_class = serializers.TerminalSerializer
|
||||||
permission_classes = [IsSuperUser]
|
permission_classes = [IsSuperUser]
|
||||||
|
http_method_names = [
|
||||||
|
'get', 'put', 'patch', 'delete', 'head', 'options', 'trace'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class TerminalRegistrationApi(generics.CreateAPIView):
|
class TerminalRegistrationApi(generics.CreateAPIView):
|
||||||
|
@ -29,6 +33,9 @@ class TerminalRegistrationApi(generics.CreateAPIView):
|
||||||
serializer = serializers.TerminalSerializer(
|
serializer = serializers.TerminalSerializer(
|
||||||
data=data, context={'request': request}
|
data=data, context={'request': request}
|
||||||
)
|
)
|
||||||
|
if not settings.SECURITY_SERVICE_ACCOUNT_REGISTRATION:
|
||||||
|
data = {"error": "service account registration disabled"}
|
||||||
|
return Response(data=data, status=status.HTTP_400_BAD_REQUEST)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
terminal = serializer.save()
|
terminal = serializer.save()
|
||||||
sa_serializer = serializer.sa_serializer_class(instance=terminal.user)
|
sa_serializer = serializer.sa_serializer_class(instance=terminal.user)
|
||||||
|
|
|
@ -28,9 +28,6 @@ class TerminalSerializer(serializers.ModelSerializer):
|
||||||
valid = super().is_valid(raise_exception=raise_exception)
|
valid = super().is_valid(raise_exception=raise_exception)
|
||||||
if not valid:
|
if not valid:
|
||||||
return valid
|
return valid
|
||||||
if not settings.SECURITY_SERVICE_ACCOUNT_REGISTRATION:
|
|
||||||
error = {"error": "service account registration disabled"}
|
|
||||||
raise serializers.ValidationError(error)
|
|
||||||
data = {'name': self.validated_data.get('name')}
|
data = {'name': self.validated_data.get('name')}
|
||||||
kwargs = {'data': data}
|
kwargs = {'data': data}
|
||||||
if self.instance and self.instance.user:
|
if self.instance and self.instance.user:
|
||||||
|
|
16
jms
16
jms
|
@ -114,7 +114,7 @@ def check_pid(pid):
|
||||||
""" Check For the existence of a unix pid. """
|
""" Check For the existence of a unix pid. """
|
||||||
try:
|
try:
|
||||||
os.kill(pid, 0)
|
os.kill(pid, 0)
|
||||||
except OSError:
|
except (OSError, ProcessLookupError):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
@ -231,6 +231,9 @@ def get_start_worker_kwargs(queue, num):
|
||||||
|
|
||||||
if os.getuid() == 0:
|
if os.getuid() == 0:
|
||||||
os.environ.setdefault('C_FORCE_ROOT', '1')
|
os.environ.setdefault('C_FORCE_ROOT', '1')
|
||||||
|
server_hostname = os.environ.get("SERVER_HOSTNAME")
|
||||||
|
if not server_hostname:
|
||||||
|
server_hostname = '%h'
|
||||||
|
|
||||||
cmd = [
|
cmd = [
|
||||||
'celery', 'worker',
|
'celery', 'worker',
|
||||||
|
@ -238,7 +241,7 @@ def get_start_worker_kwargs(queue, num):
|
||||||
'-l', 'INFO',
|
'-l', 'INFO',
|
||||||
'-c', str(num),
|
'-c', str(num),
|
||||||
'-Q', queue,
|
'-Q', queue,
|
||||||
'-n', '{}@%h'.format(queue)
|
'-n', '{}@{}'.format(queue, server_hostname)
|
||||||
]
|
]
|
||||||
return {"cmd": cmd, "cwd": APPS_DIR}
|
return {"cmd": cmd, "cwd": APPS_DIR}
|
||||||
|
|
||||||
|
@ -437,6 +440,12 @@ def stop_service(srv, sig=15):
|
||||||
print("Stop service: {}".format(s), end='')
|
print("Stop service: {}".format(s), end='')
|
||||||
pid = get_pid(s)
|
pid = get_pid(s)
|
||||||
os.kill(pid, sig)
|
os.kill(pid, sig)
|
||||||
|
with LOCK:
|
||||||
|
process = processes.pop(s, None)
|
||||||
|
if process is None:
|
||||||
|
print("\033[31m No process found\033[0m")
|
||||||
|
continue
|
||||||
|
process.wait(1)
|
||||||
for i in range(STOP_TIMEOUT):
|
for i in range(STOP_TIMEOUT):
|
||||||
if i == STOP_TIMEOUT - 1:
|
if i == STOP_TIMEOUT - 1:
|
||||||
print("\033[31m Error\033[0m")
|
print("\033[31m Error\033[0m")
|
||||||
|
@ -447,9 +456,6 @@ def stop_service(srv, sig=15):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
with LOCK:
|
|
||||||
processes.pop(s, None)
|
|
||||||
|
|
||||||
if srv == "all":
|
if srv == "all":
|
||||||
stop_daemon_service()
|
stop_daemon_service()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue