Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gjl2004yn
jumpserver
提交
5ffd1f99
J
jumpserver
项目概览
gjl2004yn
/
jumpserver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jumpserver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5ffd1f99
编写于
7月 24, 2017
作者:
baltery
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Bugfix] 修复更新bug
上级
cc1a3391
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
97 addition
and
4 deletion
+97
-4
apps/assets/forms.py
apps/assets/forms.py
+55
-0
apps/assets/templates/assets/system_user_update.html
apps/assets/templates/assets/system_user_update.html
+38
-0
apps/assets/views/system_user.py
apps/assets/views/system_user.py
+4
-4
未找到文件。
apps/assets/forms.py
浏览文件 @
5ffd1f99
...
@@ -302,5 +302,60 @@ class SystemUserForm(forms.ModelForm):
...
@@ -302,5 +302,60 @@ class SystemUserForm(forms.ModelForm):
}
}
class
SystemUserUpdateForm
(
forms
.
ModelForm
):
# Admin user assets define, let user select, save it in form not in view
auto_generate_key
=
forms
.
BooleanField
(
initial
=
False
,
required
=
False
)
# Form field name can not start with `_`, so redefine it,
password
=
forms
.
CharField
(
widget
=
forms
.
PasswordInput
,
required
=
False
,
max_length
=
100
,
strip
=
True
)
# Need use upload private key file except paste private key content
private_key_file
=
forms
.
FileField
(
required
=
False
)
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
(
SystemUserUpdateForm
,
self
).
__init__
(
*
args
,
**
kwargs
)
def
save
(
self
,
commit
=
True
):
# Because we define custom field, so we need rewrite :method: `save`
system_user
=
super
(
SystemUserUpdateForm
,
self
).
save
(
commit
=
commit
)
password
=
self
.
cleaned_data
[
'password'
]
private_key_file
=
self
.
cleaned_data
.
get
(
'private_key_file'
)
if
system_user
.
auth_method
==
'P'
and
password
:
system_user
.
password
=
password
elif
system_user
.
auth_method
==
'K'
and
private_key_file
:
private_key
=
private_key_file
.
read
().
strip
()
public_key
=
ssh_pubkey_gen
(
private_key
=
private_key
)
system_user
.
private_key
=
private_key
system_user
.
public_key
=
public_key
system_user
.
save
()
return
self
.
instance
def
clean_private_key_file
(
self
):
if
self
.
data
[
'auth_method'
]
==
'K'
and
self
.
cleaned_data
[
'private_key_file'
]:
key_string
=
self
.
cleaned_data
[
'private_key_file'
].
read
()
self
.
cleaned_data
[
'private_key_file'
].
seek
(
0
)
if
not
validate_ssh_private_key
(
key_string
):
raise
forms
.
ValidationError
(
_
(
'Invalid private key'
))
return
self
.
cleaned_data
[
'private_key_file'
]
class
Meta
:
model
=
SystemUser
fields
=
[
'name'
,
'username'
,
'protocol'
,
'auto_generate_key'
,
'password'
,
'private_key_file'
,
'auth_method'
,
'auto_push'
,
'sudo'
,
'comment'
,
'shell'
]
widgets
=
{
'name'
:
forms
.
TextInput
(
attrs
=
{
'placeholder'
:
_
(
'Name'
)}),
'username'
:
forms
.
TextInput
(
attrs
=
{
'placeholder'
:
_
(
'Username'
)}),
}
help_texts
=
{
'name'
:
'* required'
,
'username'
:
'* required'
,
'auto_push'
:
'Auto push system user to asset'
,
}
class
FileForm
(
forms
.
Form
):
class
FileForm
(
forms
.
Form
):
file
=
forms
.
FileField
()
file
=
forms
.
FileField
()
apps/assets/templates/assets/system_user_update.html
浏览文件 @
5ffd1f99
...
@@ -13,3 +13,41 @@
...
@@ -13,3 +13,41 @@
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}
{% block custom_foot_js %}
<script>
var
auth_method
=
'
#
'
+
'
{{ form.auth_method.id_for_label }}
'
;
var
auto_generate_key
=
'
#
'
+
'
{{ form.auto_generate_key.id_for_label }}
'
;
function
authMethodDisplay
()
{
if
(
$
(
auth_method
).
val
()
==
'
P
'
)
{
$
(
'
.password-auth
'
).
removeClass
(
'
hidden
'
);
$
(
'
.public-key-auth
'
).
addClass
(
'
hidden
'
);
$
(
'
#
'
+
'
{{ form.password.id_for_label }}
'
).
removeAttr
(
'
disabled
'
);
}
else
if
(
$
(
auth_method
).
val
()
==
'
K
'
)
{
$
(
'
.password-auth
'
).
addClass
(
'
hidden
'
);
$
(
'
.public-key-auth
'
).
removeClass
(
'
hidden
'
);
$
(
'
#
'
+
'
{{ form.password.id_for_label }}
'
).
removeAttr
(
'
required
'
);
$
(
'
#
'
+
'
{{ form.password.id_for_label }}
'
).
attr
(
'
disabled
'
,
'
disabled
'
);
if
(
$
(
auto_generate_key
).
prop
(
'
checked
'
)){
$
(
'
#
'
+
'
{{ form.private_key_file.id_for_label }}
'
).
closest
(
'
.form-group
'
).
addClass
(
'
hidden
'
);
}
else
{
$
(
'
#
'
+
'
{{ form.private_key_file.id_for_label }}
'
).
closest
(
'
.form-group
'
).
removeClass
(
'
hidden
'
);
}
}
}
$
(
document
).
ready
(
function
()
{
$
(
'
.select2
'
).
select2
();
authMethodDisplay
();
$
(
auth_method
).
change
(
function
()
{
authMethodDisplay
();
});
$
(
auto_generate_key
).
change
(
function
()
{
authMethodDisplay
();
});
})
</script>
{% endblock %}
\ No newline at end of file
apps/assets/views/system_user.py
浏览文件 @
5ffd1f99
...
@@ -4,14 +4,14 @@ from __future__ import absolute_import, unicode_literals
...
@@ -4,14 +4,14 @@ from __future__ import absolute_import, unicode_literals
from
django.utils.translation
import
ugettext
as
_
from
django.utils.translation
import
ugettext
as
_
from
django.conf
import
settings
from
django.conf
import
settings
from
django.db
import
transaction
from
django.db
import
transaction
from
django.views.generic
import
TemplateView
,
ListView
,
View
from
django.views.generic
import
TemplateView
,
ListView
from
django.views.generic.edit
import
CreateView
,
DeleteView
,
FormView
,
UpdateView
from
django.views.generic.edit
import
CreateView
,
DeleteView
,
UpdateView
from
django.urls
import
reverse_lazy
from
django.urls
import
reverse_lazy
from
django.contrib.messages.views
import
SuccessMessageMixin
from
django.contrib.messages.views
import
SuccessMessageMixin
from
django.views.generic.detail
import
DetailView
,
SingleObjectMixin
from
django.views.generic.detail
import
DetailView
,
SingleObjectMixin
from
..
import
forms
from
..
import
forms
from
..models
import
Asset
,
AssetGroup
,
AdminUser
,
IDC
,
SystemUser
from
..models
import
Asset
,
AssetGroup
,
SystemUser
from
..hands
import
AdminUserRequiredMixin
from
..hands
import
AdminUserRequiredMixin
from
perms.utils
import
associate_system_users_and_assets
from
perms.utils
import
associate_system_users_and_assets
...
@@ -65,7 +65,7 @@ class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVi
...
@@ -65,7 +65,7 @@ class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateVi
class
SystemUserUpdateView
(
AdminUserRequiredMixin
,
UpdateView
):
class
SystemUserUpdateView
(
AdminUserRequiredMixin
,
UpdateView
):
model
=
SystemUser
model
=
SystemUser
form_class
=
forms
.
SystemUserForm
form_class
=
forms
.
SystemUser
Update
Form
template_name
=
'assets/system_user_update.html'
template_name
=
'assets/system_user_update.html'
def
get_context_data
(
self
,
**
kwargs
):
def
get_context_data
(
self
,
**
kwargs
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录