mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-06-27 15:27:11 +00:00
Bugfix (#2350)
* [Update] 权限页面增加过滤规则 * [Update] 修改terminal注册,更新以后使用api完成 * [Update] 修改terminal注册,更新以后使用api完成 * [Update] 修改更新注册逻辑
This commit is contained in:
parent
176052e8e9
commit
2a0e68c58f
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-01-15 17:56+0800\n"
|
"POT-Creation-Date: 2019-01-16 17:58+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"
|
||||||
@ -67,8 +67,8 @@ msgstr "网域"
|
|||||||
#: assets/templates/assets/asset_update.html:35 perms/forms.py:45
|
#: assets/templates/assets/asset_update.html:35 perms/forms.py:45
|
||||||
#: perms/forms.py:52 perms/models.py:85
|
#: perms/forms.py:52 perms/models.py:85
|
||||||
#: perms/templates/perms/asset_permission_list.html:57
|
#: perms/templates/perms/asset_permission_list.html:57
|
||||||
#: perms/templates/perms/asset_permission_list.html:77
|
#: perms/templates/perms/asset_permission_list.html:78
|
||||||
#: perms/templates/perms/asset_permission_list.html:126
|
#: perms/templates/perms/asset_permission_list.html:128
|
||||||
#: xpack/plugins/cloud/models.py:123
|
#: xpack/plugins/cloud/models.py:123
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:63
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:63
|
||||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:66
|
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:66
|
||||||
@ -119,7 +119,7 @@ msgstr "端口"
|
|||||||
#: perms/models.py:31
|
#: perms/models.py:31
|
||||||
#: 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:56
|
#: perms/templates/perms/asset_permission_list.html:56
|
||||||
#: perms/templates/perms/asset_permission_list.html:123
|
#: perms/templates/perms/asset_permission_list.html:125
|
||||||
#: terminal/backends/command/models.py:13 terminal/models.py:143
|
#: terminal/backends/command/models.py:13 terminal/models.py:143
|
||||||
#: terminal/templates/terminal/command_list.html:40
|
#: terminal/templates/terminal/command_list.html:40
|
||||||
#: terminal/templates/terminal/command_list.html:73
|
#: terminal/templates/terminal/command_list.html:73
|
||||||
@ -185,7 +185,7 @@ msgstr "名称"
|
|||||||
#: assets/templates/assets/system_user_detail.html:62
|
#: assets/templates/assets/system_user_detail.html:62
|
||||||
#: assets/templates/assets/system_user_list.html:30
|
#: assets/templates/assets/system_user_list.html:30
|
||||||
#: audits/templates/audits/login_log_list.html:49
|
#: audits/templates/audits/login_log_list.html:49
|
||||||
#: perms/templates/perms/asset_permission_list.html:76
|
#: perms/templates/perms/asset_permission_list.html:74
|
||||||
#: perms/templates/perms/asset_permission_user.html:55 users/forms.py:15
|
#: perms/templates/perms/asset_permission_user.html:55 users/forms.py:15
|
||||||
#: users/forms.py:33 users/models/authentication.py:77 users/models/user.py:53
|
#: users/forms.py:33 users/models/authentication.py:77 users/models/user.py:53
|
||||||
#: users/templates/users/_select_user_modal.html:14
|
#: users/templates/users/_select_user_modal.html:14
|
||||||
@ -277,7 +277,7 @@ msgstr "IP"
|
|||||||
#: assets/templates/assets/user_asset_list.html:45
|
#: assets/templates/assets/user_asset_list.html:45
|
||||||
#: assets/templates/assets/user_asset_list.html:150 common/forms.py:130
|
#: assets/templates/assets/user_asset_list.html:150 common/forms.py:130
|
||||||
#: perms/templates/perms/asset_permission_asset.html:54
|
#: perms/templates/perms/asset_permission_asset.html:54
|
||||||
#: perms/templates/perms/asset_permission_list.html:75
|
#: perms/templates/perms/asset_permission_list.html:77
|
||||||
#: users/templates/users/user_granted_asset.html:44
|
#: users/templates/users/user_granted_asset.html:44
|
||||||
#: users/templates/users/user_group_granted_asset.html:44
|
#: users/templates/users/user_group_granted_asset.html:44
|
||||||
msgid "Hostname"
|
msgid "Hostname"
|
||||||
@ -637,7 +637,7 @@ msgstr "默认资产组"
|
|||||||
#: perms/models.py:29
|
#: perms/models.py:29
|
||||||
#: perms/templates/perms/asset_permission_create_update.html:41
|
#: perms/templates/perms/asset_permission_create_update.html:41
|
||||||
#: perms/templates/perms/asset_permission_list.html:54
|
#: perms/templates/perms/asset_permission_list.html:54
|
||||||
#: perms/templates/perms/asset_permission_list.html:117 templates/index.html:87
|
#: perms/templates/perms/asset_permission_list.html:119 templates/index.html:87
|
||||||
#: terminal/backends/command/models.py:12 terminal/models.py:142
|
#: terminal/backends/command/models.py:12 terminal/models.py:142
|
||||||
#: terminal/templates/terminal/command_list.html:32
|
#: terminal/templates/terminal/command_list.html:32
|
||||||
#: terminal/templates/terminal/command_list.html:72
|
#: terminal/templates/terminal/command_list.html:72
|
||||||
@ -724,7 +724,8 @@ msgstr "登录模式"
|
|||||||
#: perms/models.py:33 perms/models.py:87
|
#: perms/models.py:33 perms/models.py:87
|
||||||
#: perms/templates/perms/asset_permission_detail.html:140
|
#: perms/templates/perms/asset_permission_detail.html:140
|
||||||
#: perms/templates/perms/asset_permission_list.html:58
|
#: perms/templates/perms/asset_permission_list.html:58
|
||||||
#: perms/templates/perms/asset_permission_list.html:129 templates/_nav.html:25
|
#: perms/templates/perms/asset_permission_list.html:79
|
||||||
|
#: perms/templates/perms/asset_permission_list.html:131 templates/_nav.html:25
|
||||||
#: terminal/backends/command/models.py:14 terminal/models.py:144
|
#: terminal/backends/command/models.py:14 terminal/models.py:144
|
||||||
#: terminal/templates/terminal/command_list.html:48
|
#: terminal/templates/terminal/command_list.html:48
|
||||||
#: terminal/templates/terminal/command_list.html:74
|
#: terminal/templates/terminal/command_list.html:74
|
||||||
@ -884,7 +885,7 @@ msgstr "自动生成密钥"
|
|||||||
#: assets/templates/assets/asset_update.html:64
|
#: assets/templates/assets/asset_update.html:64
|
||||||
#: assets/templates/assets/gateway_create_update.html:53
|
#: assets/templates/assets/gateway_create_update.html:53
|
||||||
#: perms/templates/perms/asset_permission_create_update.html:50
|
#: perms/templates/perms/asset_permission_create_update.html:50
|
||||||
#: terminal/templates/terminal/terminal_update.html:42
|
#: terminal/templates/terminal/terminal_update.html:40
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr "其它"
|
msgstr "其它"
|
||||||
|
|
||||||
@ -906,7 +907,7 @@ msgstr "其它"
|
|||||||
#: common/templates/common/security_setting.html:70
|
#: common/templates/common/security_setting.html:70
|
||||||
#: common/templates/common/terminal_setting.html:68
|
#: common/templates/common/terminal_setting.html:68
|
||||||
#: perms/templates/perms/asset_permission_create_update.html:80
|
#: perms/templates/perms/asset_permission_create_update.html:80
|
||||||
#: terminal/templates/terminal/terminal_update.html:47
|
#: terminal/templates/terminal/terminal_update.html:45
|
||||||
#: users/templates/users/_user.html:50
|
#: users/templates/users/_user.html:50
|
||||||
#: users/templates/users/user_bulk_update.html:23
|
#: users/templates/users/user_bulk_update.html:23
|
||||||
#: users/templates/users/user_detail.html:176
|
#: users/templates/users/user_detail.html:176
|
||||||
@ -941,7 +942,7 @@ msgstr "重置"
|
|||||||
#: perms/templates/perms/asset_permission_create_update.html:81
|
#: perms/templates/perms/asset_permission_create_update.html:81
|
||||||
#: terminal/templates/terminal/command_list.html:103
|
#: terminal/templates/terminal/command_list.html:103
|
||||||
#: terminal/templates/terminal/session_list.html:127
|
#: terminal/templates/terminal/session_list.html:127
|
||||||
#: terminal/templates/terminal/terminal_update.html:48
|
#: terminal/templates/terminal/terminal_update.html:46
|
||||||
#: users/templates/users/_user.html:51
|
#: users/templates/users/_user.html:51
|
||||||
#: users/templates/users/forgot_password.html:45
|
#: users/templates/users/forgot_password.html:45
|
||||||
#: users/templates/users/user_bulk_update.html:24
|
#: users/templates/users/user_bulk_update.html:24
|
||||||
@ -1025,7 +1026,7 @@ msgstr "测试"
|
|||||||
#: assets/templates/assets/system_user_detail.html:26
|
#: assets/templates/assets/system_user_detail.html:26
|
||||||
#: assets/templates/assets/system_user_list.html:92 audits/models.py:32
|
#: assets/templates/assets/system_user_list.html:92 audits/models.py:32
|
||||||
#: perms/templates/perms/asset_permission_detail.html:30
|
#: perms/templates/perms/asset_permission_detail.html:30
|
||||||
#: perms/templates/perms/asset_permission_list.html:175
|
#: perms/templates/perms/asset_permission_list.html:177
|
||||||
#: terminal/templates/terminal/terminal_detail.html:16
|
#: terminal/templates/terminal/terminal_detail.html:16
|
||||||
#: terminal/templates/terminal/terminal_list.html:71
|
#: terminal/templates/terminal/terminal_list.html:71
|
||||||
#: users/templates/users/user_detail.html:25
|
#: users/templates/users/user_detail.html:25
|
||||||
@ -1060,7 +1061,7 @@ msgstr "更新"
|
|||||||
#: common/templates/common/terminal_setting.html:112
|
#: common/templates/common/terminal_setting.html:112
|
||||||
#: ops/templates/ops/task_list.html:72
|
#: ops/templates/ops/task_list.html:72
|
||||||
#: perms/templates/perms/asset_permission_detail.html:34
|
#: perms/templates/perms/asset_permission_detail.html:34
|
||||||
#: perms/templates/perms/asset_permission_list.html:176
|
#: perms/templates/perms/asset_permission_list.html:178
|
||||||
#: terminal/templates/terminal/terminal_list.html:73
|
#: terminal/templates/terminal/terminal_list.html:73
|
||||||
#: users/templates/users/user_detail.html:30
|
#: users/templates/users/user_detail.html:30
|
||||||
#: users/templates/users/user_group_detail.html:32
|
#: users/templates/users/user_group_detail.html:32
|
||||||
@ -1173,7 +1174,6 @@ msgstr "快速修改"
|
|||||||
#: perms/models.py:88
|
#: perms/models.py:88
|
||||||
#: perms/templates/perms/asset_permission_create_update.html:52
|
#: perms/templates/perms/asset_permission_create_update.html:52
|
||||||
#: perms/templates/perms/asset_permission_detail.html:120
|
#: perms/templates/perms/asset_permission_detail.html:120
|
||||||
#: perms/templates/perms/asset_permission_list.html:73
|
|
||||||
#: terminal/templates/terminal/terminal_list.html:34
|
#: terminal/templates/terminal/terminal_list.html:34
|
||||||
#: users/templates/users/_select_user_modal.html:18
|
#: users/templates/users/_select_user_modal.html:18
|
||||||
#: users/templates/users/user_detail.html:144
|
#: users/templates/users/user_detail.html:144
|
||||||
@ -2572,7 +2572,8 @@ msgstr "组织管理"
|
|||||||
|
|
||||||
#: perms/forms.py:39 perms/models.py:30 perms/models.py:86
|
#: perms/forms.py:39 perms/models.py:30 perms/models.py:86
|
||||||
#: perms/templates/perms/asset_permission_list.html:55
|
#: perms/templates/perms/asset_permission_list.html:55
|
||||||
#: perms/templates/perms/asset_permission_list.html:120 templates/_nav.html:14
|
#: perms/templates/perms/asset_permission_list.html:75
|
||||||
|
#: perms/templates/perms/asset_permission_list.html:122 templates/_nav.html:14
|
||||||
#: users/forms.py:273 users/models/group.py:26 users/models/user.py:61
|
#: users/forms.py:273 users/models/group.py:26 users/models/user.py:61
|
||||||
#: users/templates/users/_select_user_modal.html:16
|
#: users/templates/users/_select_user_modal.html:16
|
||||||
#: users/templates/users/user_detail.html:213
|
#: users/templates/users/user_detail.html:213
|
||||||
@ -2658,6 +2659,7 @@ msgid "Create permission"
|
|||||||
msgstr "创建授权规则"
|
msgstr "创建授权规则"
|
||||||
|
|
||||||
#: perms/templates/perms/asset_permission_list.html:59
|
#: perms/templates/perms/asset_permission_list.html:59
|
||||||
|
#: perms/templates/perms/asset_permission_list.html:73
|
||||||
#: users/templates/users/user_list.html:28 xpack/plugins/cloud/models.py:53
|
#: users/templates/users/user_list.html:28 xpack/plugins/cloud/models.py:53
|
||||||
#: xpack/plugins/cloud/templates/cloud/account_detail.html:60
|
#: xpack/plugins/cloud/templates/cloud/account_detail.html:60
|
||||||
#: xpack/plugins/cloud/templates/cloud/account_list.html:14
|
#: xpack/plugins/cloud/templates/cloud/account_list.html:14
|
||||||
@ -3545,6 +3547,10 @@ msgstr "用户认证源来自 {}, 请去相应系统修改密码"
|
|||||||
msgid "Administrator is the super user of system"
|
msgid "Administrator is the super user of system"
|
||||||
msgstr "Administrator是初始的超级管理员"
|
msgstr "Administrator是初始的超级管理员"
|
||||||
|
|
||||||
|
#: users/serializers/v2.py:40
|
||||||
|
msgid "name not unique"
|
||||||
|
msgstr "名称重复"
|
||||||
|
|
||||||
#: users/templates/users/_base_otp.html:27
|
#: users/templates/users/_base_otp.html:27
|
||||||
msgid "Home page"
|
msgid "Home page"
|
||||||
msgstr "首页"
|
msgstr "首页"
|
||||||
|
@ -161,6 +161,87 @@ function activeNav() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formSubmit(props) {
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"form": $("form"),
|
||||||
|
"url": "",
|
||||||
|
"method": "POST",
|
||||||
|
"redirect_to": "",
|
||||||
|
"success": function(data, textStatue, jqXHR){},
|
||||||
|
"error": function(jqXHR, textStatus, errorThrown) {}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
props = props || {};
|
||||||
|
var data = props.data || props.form.serializeObject();
|
||||||
|
var redirect_to = props.redirect_to;
|
||||||
|
$.ajax({
|
||||||
|
url: props.url,
|
||||||
|
type: props.method || 'POST',
|
||||||
|
data: JSON.stringify(data),
|
||||||
|
contentType: props.content_type || "application/json; charset=utf-8",
|
||||||
|
dataType: props.data_type || "json"
|
||||||
|
}).done(function (data, textState, jqXHR) {
|
||||||
|
if (redirect_to) {
|
||||||
|
location.href = redirect_to;
|
||||||
|
} else if (typeof props.success === 'function') {
|
||||||
|
return props.success(data, textState, jqXHR);
|
||||||
|
}
|
||||||
|
}).fail(function(jqXHR, textStatus, errorThrown) {
|
||||||
|
if (typeof props.error === 'function') {
|
||||||
|
return props.error(jqXHR, textStatus, errorThrown)
|
||||||
|
}
|
||||||
|
if (!props.form) {
|
||||||
|
alert(jqXHR.responseText);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (jqXHR.status === 400) {
|
||||||
|
var errors = jqXHR.responseJSON;
|
||||||
|
var noneFieldErrorRef = props.form.children('.alert-danger');
|
||||||
|
if (noneFieldErrorRef.length !== 1) {
|
||||||
|
props.form.prepend('<div class="alert alert-danger" style="display: none"></div>');
|
||||||
|
noneFieldErrorRef = props.form.children('.alert-danger');
|
||||||
|
}
|
||||||
|
var noneFieldErrorMsg = "";
|
||||||
|
noneFieldErrorRef.css("display", "none");
|
||||||
|
noneFieldErrorRef.html("");
|
||||||
|
props.form.find(".help-block.error").html("");
|
||||||
|
props.form.find(".form-group.has-error").removeClass("has-error");
|
||||||
|
|
||||||
|
if (typeof errors !== "object") {
|
||||||
|
noneFieldErrorMsg = errors;
|
||||||
|
if (noneFieldErrorRef.length === 1) {
|
||||||
|
noneFieldErrorRef.css('display', 'block');
|
||||||
|
noneFieldErrorRef.html(noneFieldErrorMsg);
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$.each(errors, function (k, v) {
|
||||||
|
var fieldRef = props.form.find('input[name="' + k + '"]');
|
||||||
|
var formGroupRef = fieldRef.parents('.form-group');
|
||||||
|
var parentRef = fieldRef.parent();
|
||||||
|
var helpBlockRef = parentRef.children('.help-block.error');
|
||||||
|
if (helpBlockRef.length === 0) {
|
||||||
|
parentRef.append('<div class="help-block error"></div>');
|
||||||
|
helpBlockRef = parentRef.children('.help-block.error');
|
||||||
|
}
|
||||||
|
if (fieldRef.length === 1 && formGroupRef.length === 1) {
|
||||||
|
formGroupRef.addClass('has-error');
|
||||||
|
var help_msg = v.join("<br/>") ;
|
||||||
|
helpBlockRef.html(help_msg);
|
||||||
|
} else {
|
||||||
|
noneFieldErrorMsg += v + '<br/>';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (noneFieldErrorRef.length === 1 && noneFieldErrorMsg !== '') {
|
||||||
|
noneFieldErrorRef.css('display', 'block');
|
||||||
|
noneFieldErrorRef.html(noneFieldErrorMsg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function APIUpdateAttr(props) {
|
function APIUpdateAttr(props) {
|
||||||
// props = {url: .., body: , success: , error: , method: ,}
|
// props = {url: .., body: , success: , error: , method: ,}
|
||||||
props = props || {};
|
props = props || {};
|
||||||
@ -195,9 +276,6 @@ function APIUpdateAttr(props) {
|
|||||||
}).fail(function(jqXHR, textStatus, errorThrown) {
|
}).fail(function(jqXHR, textStatus, errorThrown) {
|
||||||
if (flash_message) {
|
if (flash_message) {
|
||||||
var msg = "";
|
var msg = "";
|
||||||
console.log(jqXHR);
|
|
||||||
console.log(textStatus);
|
|
||||||
console.log(errorThrown);
|
|
||||||
if (user_fail_message) {
|
if (user_fail_message) {
|
||||||
msg = user_fail_message;
|
msg = user_fail_message;
|
||||||
} else if (jqXHR.responseJSON) {
|
} else if (jqXHR.responseJSON) {
|
||||||
@ -213,6 +291,7 @@ function APIUpdateAttr(props) {
|
|||||||
toastr.error(msg);
|
toastr.error(msg);
|
||||||
}
|
}
|
||||||
if (typeof props.error === 'function') {
|
if (typeof props.error === 'function') {
|
||||||
|
console.log(jqXHR);
|
||||||
return props.error(jqXHR.responseText, jqXHR.status);
|
return props.error(jqXHR.responseText, jqXHR.status);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets, generics
|
||||||
|
from rest_framework import status
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from common.permissions import IsSuperUser, WithBootstrapToken
|
from common.permissions import IsSuperUser, WithBootstrapToken
|
||||||
|
|
||||||
|
|
||||||
from ...models import Terminal
|
from ...models import Terminal
|
||||||
from ...serializers import v2 as serializers
|
from ...serializers import v2 as serializers
|
||||||
|
|
||||||
__all__ = ['TerminalViewSet', 'TerminalRegistrationViewSet']
|
__all__ = ['TerminalViewSet', 'TerminalRegistrationApi']
|
||||||
|
|
||||||
|
|
||||||
class TerminalViewSet(viewsets.ModelViewSet):
|
class TerminalViewSet(viewsets.ModelViewSet):
|
||||||
@ -15,8 +19,19 @@ class TerminalViewSet(viewsets.ModelViewSet):
|
|||||||
permission_classes = [IsSuperUser]
|
permission_classes = [IsSuperUser]
|
||||||
|
|
||||||
|
|
||||||
class TerminalRegistrationViewSet(viewsets.ModelViewSet):
|
class TerminalRegistrationApi(generics.CreateAPIView):
|
||||||
queryset = Terminal.objects.filter(is_deleted=False)
|
|
||||||
serializer_class = serializers.TerminalRegistrationSerializer
|
serializer_class = serializers.TerminalRegistrationSerializer
|
||||||
permission_classes = [WithBootstrapToken]
|
permission_classes = [WithBootstrapToken]
|
||||||
http_method_names = ['post']
|
http_method_names = ['post']
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
data = request.data
|
||||||
|
serializer = serializers.TerminalSerializer(
|
||||||
|
data=data, context={'request': request}
|
||||||
|
)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
terminal = serializer.save()
|
||||||
|
sa_serializer = serializer.sa_serializer_class(instance=terminal.user)
|
||||||
|
data['service_account'] = sa_serializer.data
|
||||||
|
return Response(data, status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
@ -39,5 +39,3 @@ class TerminalForm(forms.ModelForm):
|
|||||||
'name', 'remote_addr', 'comment',
|
'name', 'remote_addr', 'comment',
|
||||||
'command_storage', 'replay_storage',
|
'command_storage', 'replay_storage',
|
||||||
]
|
]
|
||||||
help_texts = {
|
|
||||||
}
|
|
||||||
|
@ -31,8 +31,6 @@ class TerminalSerializer(serializers.ModelSerializer):
|
|||||||
return cache.get(key)
|
return cache.get(key)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SessionSerializer(BulkSerializerMixin, serializers.ModelSerializer):
|
class SessionSerializer(BulkSerializerMixin, serializers.ModelSerializer):
|
||||||
command_amount = serializers.SerializerMethodField()
|
command_amount = serializers.SerializerMethodField()
|
||||||
command_store = get_multi_command_storage()
|
command_store = get_multi_command_storage()
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from common.utils import get_request_ip
|
from common.utils import get_request_ip
|
||||||
from users.serializers.v2 import ServiceAccountRegistrationSerializer
|
from users.serializers.v2 import ServiceAccountSerializer
|
||||||
from ..models import Terminal
|
from ..models import Terminal
|
||||||
|
|
||||||
|
|
||||||
@ -11,36 +11,48 @@ __all__ = ['TerminalSerializer', 'TerminalRegistrationSerializer']
|
|||||||
|
|
||||||
|
|
||||||
class TerminalSerializer(serializers.ModelSerializer):
|
class TerminalSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
sa_serializer_class = ServiceAccountSerializer
|
||||||
model = Terminal
|
sa_serializer = None
|
||||||
fields = [
|
|
||||||
'id', 'name', 'remote_addr', 'comment',
|
|
||||||
]
|
|
||||||
read_only_fields = ['id', 'remote_addr']
|
|
||||||
|
|
||||||
|
|
||||||
class TerminalRegistrationSerializer(serializers.ModelSerializer):
|
|
||||||
service_account = ServiceAccountRegistrationSerializer(read_only=True)
|
|
||||||
service_account_serializer = None
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Terminal
|
model = Terminal
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'name', 'remote_addr', 'comment', 'service_account'
|
'id', 'name', 'remote_addr', 'command_storage',
|
||||||
|
'replay_storage', 'user', 'is_accepted', 'is_deleted',
|
||||||
|
'date_created', 'comment'
|
||||||
]
|
]
|
||||||
read_only_fields = ['id', 'remote_addr', 'service_account']
|
read_only_fields = ['id', 'remote_addr', 'user', 'date_created']
|
||||||
|
|
||||||
def validate(self, attrs):
|
def is_valid(self, raise_exception=False):
|
||||||
self.service_account_serializer = ServiceAccountRegistrationSerializer(data=attrs)
|
valid = super().is_valid(raise_exception=raise_exception)
|
||||||
self.service_account_serializer.is_valid(raise_exception=True)
|
if not valid:
|
||||||
return attrs
|
return valid
|
||||||
|
data = {'name': self.validated_data.get('name')}
|
||||||
|
kwargs = {'data': data}
|
||||||
|
if self.instance and self.instance.user:
|
||||||
|
kwargs['instance'] = self.instance.user
|
||||||
|
self.sa_serializer = ServiceAccountSerializer(**kwargs)
|
||||||
|
valid = self.sa_serializer.is_valid(raise_exception=True)
|
||||||
|
return valid
|
||||||
|
|
||||||
|
def save(self, **kwargs):
|
||||||
|
instance = super().save(**kwargs)
|
||||||
|
sa = self.sa_serializer.save()
|
||||||
|
instance.user = sa
|
||||||
|
instance.save()
|
||||||
|
return instance
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
request = self.context.get('request')
|
request = self.context.get('request')
|
||||||
sa = self.service_account_serializer.save()
|
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
instance.is_accepted = True
|
instance.is_accepted = True
|
||||||
instance.user = sa
|
if request:
|
||||||
instance.remote_addr = get_request_ip(request)
|
instance.remote_addr = get_request_ip(request)
|
||||||
instance.save()
|
instance.save()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
class TerminalRegistrationSerializer(serializers.Serializer):
|
||||||
|
name = serializers.CharField(max_length=128)
|
||||||
|
comment = serializers.CharField(max_length=128)
|
||||||
|
service_account = ServiceAccountSerializer(read_only=True)
|
||||||
|
@ -33,8 +33,6 @@
|
|||||||
<h3>{% trans 'Info' %}</h3>
|
<h3>{% trans 'Info' %}</h3>
|
||||||
{% bootstrap_field form.name layout="horizontal" %}
|
{% bootstrap_field form.name layout="horizontal" %}
|
||||||
{% bootstrap_field form.remote_addr layout="horizontal" %}
|
{% bootstrap_field form.remote_addr layout="horizontal" %}
|
||||||
{# {% bootstrap_field form.ssh_port layout="horizontal" %}#}
|
|
||||||
{# {% bootstrap_field form.http_port layout="horizontal" %}#}
|
|
||||||
{% bootstrap_field form.command_storage layout="horizontal" %}
|
{% bootstrap_field form.command_storage layout="horizontal" %}
|
||||||
{% bootstrap_field form.replay_storage layout="horizontal" %}
|
{% bootstrap_field form.replay_storage layout="horizontal" %}
|
||||||
|
|
||||||
@ -60,14 +58,14 @@
|
|||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$('.select2').select2();
|
$('.select2').select2();
|
||||||
|
}).on('submit', 'form', function (e) {
|
||||||
$('.input-group.date').datepicker({
|
e.preventDefault();
|
||||||
format: "yyyy-mm-dd",
|
var form = $('form');
|
||||||
todayBtn: "linked",
|
formSubmit({
|
||||||
keyboardNavigation: false,
|
'url': '{% url 'api-terminal-v2:terminal-detail' pk=DEFAULT_PK %}'.replace('{{ DEFAULT_PK }}', '{{ object.id }}'),
|
||||||
forceParse: false,
|
'form': form,
|
||||||
calendarWeeks: true,
|
'method': 'PUT',
|
||||||
autoclose: true
|
'redirect_to': '{% url "terminal:terminal-list" %}'
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -11,10 +11,11 @@ app_name = 'terminal'
|
|||||||
|
|
||||||
router = BulkRouter()
|
router = BulkRouter()
|
||||||
router.register(r'terminal', api.TerminalViewSet, 'terminal')
|
router.register(r'terminal', api.TerminalViewSet, 'terminal')
|
||||||
router.register(r'terminal-registrations', api.TerminalRegistrationViewSet, 'terminal-registration')
|
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path('terminal-registrations/', api.TerminalRegistrationApi.as_view(),
|
||||||
|
name='terminal-registration')
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += router.urls
|
urlpatterns += router.urls
|
||||||
|
@ -7,6 +7,6 @@ from ...serializers import v2 as serializers
|
|||||||
|
|
||||||
|
|
||||||
class ServiceAccountRegistrationViewSet(viewsets.ModelViewSet):
|
class ServiceAccountRegistrationViewSet(viewsets.ModelViewSet):
|
||||||
serializer_class = serializers.ServiceAccountRegistrationSerializer
|
serializer_class = serializers.ServiceAccountSerializer
|
||||||
permission_classes = (WithBootstrapToken,)
|
permission_classes = (WithBootstrapToken,)
|
||||||
http_method_names = ['post']
|
http_method_names = ['post']
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from ..models import User, AccessKey
|
from ..models import User, AccessKey
|
||||||
|
|
||||||
@ -12,7 +13,7 @@ class AccessKeySerializer(serializers.ModelSerializer):
|
|||||||
read_only_fields = ['id', 'secret']
|
read_only_fields = ['id', 'secret']
|
||||||
|
|
||||||
|
|
||||||
class ServiceAccountRegistrationSerializer(serializers.ModelSerializer):
|
class ServiceAccountSerializer(serializers.ModelSerializer):
|
||||||
access_key = AccessKeySerializer(read_only=True)
|
access_key = AccessKeySerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@ -30,15 +31,22 @@ class ServiceAccountRegistrationSerializer(serializers.ModelSerializer):
|
|||||||
def validate_name(self, name):
|
def validate_name(self, name):
|
||||||
email = self.get_email()
|
email = self.get_email()
|
||||||
username = self.get_username()
|
username = self.get_username()
|
||||||
if User.objects.filter(email=email) or \
|
if self.instance:
|
||||||
User.objects.filter(username=username):
|
users = User.objects.exclude(id=self.instance.id)
|
||||||
raise serializers.ValidationError('name not unique', code='unique')
|
else:
|
||||||
|
users = User.objects.all()
|
||||||
|
if users.filter(email=email) or \
|
||||||
|
users.filter(username=username):
|
||||||
|
raise serializers.ValidationError(_('name not unique'), code='unique')
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
def save(self, **kwargs):
|
||||||
|
self.validated_data['email'] = self.get_email()
|
||||||
|
self.validated_data['username'] = self.get_username()
|
||||||
|
self.validated_data['role'] = User.ROLE_APP
|
||||||
|
return super().save(**kwargs)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
validated_data['email'] = self.get_email()
|
|
||||||
validated_data['username'] = self.get_username()
|
|
||||||
validated_data['role'] = User.ROLE_APP
|
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
instance.create_access_key()
|
instance.create_access_key()
|
||||||
return instance
|
return instance
|
||||||
|
Loading…
Reference in New Issue
Block a user