Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
449bde4b
Commit
449bde4b
authored
Jan 24, 2015
by
halcyon
Browse files
Options
Browse Files
Download
Plain Diff
菜单active
parents
f335e35b
dc8f6d4d
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
291 additions
and
12 deletions
+291
-12
mytags.py
jumpserver/templatetags/mytags.py
+9
-0
urls.py
juser/urls.py
+3
-0
views.py
juser/views.py
+113
-4
base.html
templates/base.html
+1
-1
footer.html
templates/footer.html
+1
-1
group_add.html
templates/jasset/group_add.html
+0
-2
user_add.html
templates/juser/user_add.html
+1
-1
user_detail.html
templates/juser/user_detail.html
+72
-0
user_list.html
templates/juser/user_list.html
+0
-0
user_list2.html
templates/juser/user_list2.html
+81
-0
nav.html
templates/nav.html
+3
-3
script.html
templates/script.html
+7
-0
No files found.
jumpserver/templatetags/mytags.py
View file @
449bde4b
...
@@ -38,3 +38,11 @@ def groups_str(username):
...
@@ -38,3 +38,11 @@ def groups_str(username):
@register.filter
(
name
=
'get_item'
)
@register.filter
(
name
=
'get_item'
)
def
get_item
(
dictionary
,
key
):
def
get_item
(
dictionary
,
key
):
return
dictionary
.
get
(
key
)
return
dictionary
.
get
(
key
)
@register.filter
(
name
=
'bool2str'
)
def
bool2str
(
value
):
if
value
:
return
u'是'
else
:
return
u'否'
\ No newline at end of file
juser/urls.py
View file @
449bde4b
...
@@ -10,4 +10,7 @@ urlpatterns = patterns('juser.views',
...
@@ -10,4 +10,7 @@ urlpatterns = patterns('juser.views',
(
r'^user_list/$'
,
'user_list'
),
(
r'^user_list/$'
,
'user_list'
),
(
r'^group_add/$'
,
'group_add'
),
(
r'^group_add/$'
,
'group_add'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^user_detail/$'
,
'user_detail'
),
(
r'^user_del/$'
,
'user_del'
),
(
r'^user_edit/$'
,
'user_edit'
),
)
)
juser/views.py
View file @
449bde4b
...
@@ -11,6 +11,7 @@ import ldap
...
@@ -11,6 +11,7 @@ import ldap
from
ldap
import
modlist
from
ldap
import
modlist
from
Crypto.PublicKey
import
RSA
from
Crypto.PublicKey
import
RSA
import
crypt
import
crypt
from
django.http
import
HttpResponseRedirect
from
django.shortcuts
import
render_to_response
from
django.shortcuts
import
render_to_response
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.core.exceptions
import
ObjectDoesNotExist
...
@@ -19,7 +20,7 @@ from juser.models import UserGroup, User
...
@@ -19,7 +20,7 @@ from juser.models import UserGroup, User
from
connect
import
PyCrypt
,
KEY
from
connect
import
PyCrypt
,
KEY
from
connect
import
BASE_DIR
from
connect
import
BASE_DIR
from
connect
import
CONF
from
connect
import
CONF
from
django.core.paginator
import
Paginator
,
EmptyPage
,
InvalidPage
CRYPTOR
=
PyCrypt
(
KEY
)
CRYPTOR
=
PyCrypt
(
KEY
)
LDAP_ENABLE
=
CONF
.
getint
(
'ldap'
,
'ldap_enable'
)
LDAP_ENABLE
=
CONF
.
getint
(
'ldap'
,
'ldap_enable'
)
...
@@ -107,6 +108,7 @@ class LDAPMgmt():
...
@@ -107,6 +108,7 @@ class LDAPMgmt():
except
ldap
.
LDAPError
,
e
:
except
ldap
.
LDAPError
,
e
:
print
e
print
e
def
gen_sha512
(
salt
,
password
):
def
gen_sha512
(
salt
,
password
):
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
return
crypt
.
crypt
(
password
,
'$6$
%
s$'
%
salt
)
...
@@ -152,14 +154,121 @@ def group_list(request):
...
@@ -152,14 +154,121 @@ def group_list(request):
def
user_list
(
request
):
def
user_list
(
request
):
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
header_title
,
path1
,
path2
=
'查看用户 | Add User'
,
'juser'
,
'user_list'
header_title
,
path1
,
path2
=
'查看用户 | Show User'
,
'juser'
,
'user_list'
users
=
User
.
objects
.
all
()
users
=
contact_list
=
User
.
objects
.
all
()
.
order_by
(
'id'
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
try
:
page
=
int
(
request
.
GET
.
get
(
'page'
,
'1'
))
except
ValueError
:
page
=
1
try
:
contacts
=
paginator
.
page
(
page
)
except
(
EmptyPage
,
InvalidPage
):
contacts
=
paginator
.
page
(
paginator
.
num_pages
)
return
render_to_response
(
'juser/user_list.html'
,
locals
())
return
render_to_response
(
'juser/user_list.html'
,
locals
())
def
user_detail
(
request
):
username
=
request
.
GET
.
get
(
'username'
,
None
)
if
not
username
:
return
HttpResponseRedirect
(
'/'
)
user
=
User
.
objects
.
get
(
username
=
username
)
return
render_to_response
(
'juser/user_detail.html'
,
locals
())
def
user_del
(
request
):
username
=
request
.
GET
.
get
(
'username'
,
None
)
if
not
username
:
return
HttpResponseRedirect
(
'/'
)
user
=
User
.
objects
.
get
(
username
=
username
)
user
.
delete
()
return
HttpResponseRedirect
(
'/juser/user_list/'
,
locals
())
def
user_edit
(
request
):
header_title
,
path1
,
path2
=
'编辑用户 | Edit User'
,
'juser'
,
'user_edit'
hidden
=
"hidden"
if
request
.
method
==
'GET'
:
username
=
request
.
GET
.
get
(
'username'
,
None
)
if
not
username
:
return
HttpResponseRedirect
(
'/'
)
user
=
User
.
objects
.
get
(
username
=
username
)
username
=
user
.
username
password
=
user
.
password
ssh_key_pwd1
=
user
.
ssh_key_pwd1
name
=
user
.
name
all_group
=
UserGroup
.
objects
.
all
()
groups
=
user
.
user_group
.
all
()
groups_str
=
' '
.
join
([
str
(
group
.
id
)
for
group
in
groups
])
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
role_post
=
user
.
role
ssh_pwd
=
user
.
ssh_pwd
email
=
user
.
email
else
:
username
=
request
.
POST
.
get
(
'username'
,
None
)
password
=
request
.
POST
.
get
(
'password'
,
None
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
groups_str
=
' '
.
join
(
groups
)
role_post
=
request
.
POST
.
get
(
'role'
,
None
)
ssh_pwd
=
request
.
POST
.
get
(
'ssh_pwd'
,
None
)
ssh_key_pwd1
=
request
.
POST
.
get
(
'ssh_key_pwd1'
,
None
)
is_active
=
request
.
POST
.
get
(
'is_active'
,
'1'
)
ldap_pwd
=
gen_rand_pwd
(
16
)
all_group
=
UserGroup
.
objects
.
all
()
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
if
username
:
user
=
User
.
objects
.
get
(
username
=
username
)
else
:
return
HttpResponseRedirect
(
'/'
)
if
password
!=
user
.
password
:
password
=
md5_crypt
(
password
)
if
ssh_pwd
!=
user
.
ssh_pwd
:
ssh_pwd
=
CRYPTOR
.
encrypt
(
ssh_pwd
)
if
ssh_key_pwd1
!=
user
.
ssh_key_pwd1
:
ssh_key_pwd1
=
CRYPTOR
.
encrypt
(
ssh_key_pwd1
)
db_update_user
(
username
=
username
,
password
=
password
,
name
=
name
,
email
=
email
,
groups
=
groups
,
role
=
role_post
,
ssh_pwd
=
ssh_pwd
,
ssh_key_pwd1
=
ssh_key_pwd1
)
msg
=
u'修改用户成功'
return
HttpResponseRedirect
(
'/juser/user_list/'
)
return
render_to_response
(
'juser/user_add.html'
,
locals
())
def
db_add_user
(
**
kwargs
):
def
db_add_user
(
**
kwargs
):
groups_post
=
kwargs
.
pop
(
'groups'
)
groups_post
=
kwargs
.
pop
(
'groups'
)
user
=
User
(
**
kwargs
)
user
=
User
(
**
kwargs
)
group_select
=
[]
for
group_id
in
groups_post
:
group
=
UserGroup
.
objects
.
filter
(
id
=
group_id
)
group_select
.
extend
(
group
)
user
.
save
()
user
.
user_group
=
group_select
def
db_update_user
(
**
kwargs
):
groups_post
=
kwargs
.
pop
(
'groups'
)
username
=
kwargs
.
get
(
'username'
)
user
=
User
.
objects
.
filter
(
username
=
username
)
user
.
update
(
**
kwargs
)
user
=
User
.
objects
.
get
(
username
=
username
)
group_select
=
[]
for
group_id
in
groups_post
:
for
group_id
in
groups_post
:
group
=
UserGroup
.
objects
.
filter
(
id
=
group_id
)
group
=
UserGroup
.
objects
.
filter
(
id
=
group_id
)
group_select
.
extend
(
group
)
group_select
.
extend
(
group
)
...
@@ -249,7 +358,7 @@ def ldap_del_user(username):
...
@@ -249,7 +358,7 @@ def ldap_del_user(username):
group_dn
=
"cn=
%
s,ou=Group,
%
s"
%
(
username
,
LDAP_BASE_DN
)
group_dn
=
"cn=
%
s,ou=Group,
%
s"
%
(
username
,
LDAP_BASE_DN
)
sudo_dn
=
'cn=
%
s,ou=Sudoers,
%
s'
%
(
username
,
LDAP_BASE_DN
)
sudo_dn
=
'cn=
%
s,ou=Sudoers,
%
s'
%
(
username
,
LDAP_BASE_DN
)
ldap_conn
=
LDAPMgmt
()
ldap_conn
=
LDAPMgmt
(
LDAP_HOST_URL
,
LDAP_BASE_DN
,
LDAP_ROOT_DN
,
LDAP_ROOT_PW
)
ldap_conn
.
delete
(
user_dn
)
ldap_conn
.
delete
(
user_dn
)
ldap_conn
.
delete
(
group_dn
)
ldap_conn
.
delete
(
group_dn
)
ldap_conn
.
delete
(
sudo_dn
)
ldap_conn
.
delete
(
sudo_dn
)
...
...
templates/base.html
View file @
449bde4b
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
</head>
</head>
<body
class=
"skin-1"
>
<body>
<div
id=
"wrapper"
>
<div
id=
"wrapper"
>
{% include 'nav.html' %}
{% include 'nav.html' %}
...
...
templates/footer.html
View file @
449bde4b
<div
class=
"footer fixed"
>
<div
class=
"footer fixed"
>
<div
class=
"pull-right"
>
<div
class=
"pull-right"
>
Version
<strong>
2
.2.0
</strong>
GPL.
Version
<strong>
1
.2.0
</strong>
GPL.
</div>
</div>
<div>
<div>
<strong>
Copyright
</strong>
Jumpserver.org Organization
©
2014-2015
<strong>
Copyright
</strong>
Jumpserver.org Organization
©
2014-2015
...
...
templates/jasset/group_add.html
View file @
449bde4b
...
@@ -74,7 +74,6 @@
...
@@ -74,7 +74,6 @@
form
.
submit
();
form
.
submit
();
}
}
});
});
</script>
</script>
{% endblock %}
{% endblock %}
\ No newline at end of file
templates/juser/user_add.html
View file @
449bde4b
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
{% if msg %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
{% endif %}
<div
class=
"form-group"
>
<div
class=
"form-group
{{ hidden }}
"
>
<label
for=
"username"
class=
"col-sm-2 control-label"
>
用户名
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"username"
class=
"col-sm-2 control-label"
>
用户名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<input
id=
"username"
name=
"username"
placeholder=
"Username"
type=
"text"
class=
"form-control"
value=
{{
username
}}
>
<input
id=
"username"
name=
"username"
placeholder=
"Username"
type=
"text"
class=
"form-control"
value=
{{
username
}}
>
...
...
templates/juser/user_detail.html
0 → 100644
View file @
449bde4b
{% load mytags %}
<html>
<head>
{% include 'link_css.html' %}
<style
type=
"text/css"
>
body
{
background
:
#FFFFFF
;
}
</style>
</head>
<body>
<div
class=
"row"
>
<div
class=
"contact-box"
>
<h2
class=
"text-center"
>
{{ user.name }} 用户详情
</h2>
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/juser/user_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
</div>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
用户
</th>
<th
class=
"text-center"
>
详情
</th>
</tr>
</thead>
<tbody>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
ID
</td>
<td
class=
"text-center"
>
{{ user.id }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
username
</td>
<td
class=
"text-center"
>
{{ user.username }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
姓名
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
角色
</td>
<td
class=
"text-center"
>
{{ user.id|get_role }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
属组
</td>
<td
class=
"text-center"
>
{{ user.username|groups_str }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
Email
</td>
<td
class=
"text-center"
>
{{ user.email }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
激活
</td>
<td
class=
"text-center"
>
{{ user.is_active|bool2str }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
添加时间
</td>
<td
class=
"text-center"
>
{{ user.joined }}
</td>
</tr>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
最后登录
</td>
<td
class=
"text-center"
>
{{ user.last_login }}
</td>
</tr>
</table>
</div>
</div>
</body>
</html>
\ No newline at end of file
templates/juser/user_list.html
View file @
449bde4b
This diff is collapsed.
Click to expand it.
templates/juser/user_list2.html
0 → 100644
View file @
449bde4b
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
用户信息
<small>
show user info.
</small></h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
style=
"display: block;"
>
<form
method=
"post"
action=
""
>
<table
class=
"table table-hover"
>
<thead>
<tr>
<th>
<div
class=
"checkbox i-checks"
>
<input
onclick=
"selectAll()"
type=
"checkbox"
name=
"select_all"
style=
"select_all"
id=
"select_all"
>
</div>
</th>
<th>
ID
</th>
<th>
用户名
</th>
<th>
姓名
</th>
<th>
属组
</th>
<th>
角色
</th>
<th>
Email
</th>
<th>
激活
</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td>
<div
class=
"checkbox i-checks"
>
<input
type=
"checkbox"
value=
"{{ user.id }}"
name=
"selected"
>
</div>
</td>
<td>
{{ user.id }}
</td>
<td>
{{ user.username }}
</td>
<td>
{{ user.name }}
</td>
<td>
{{ user.username|groups_str }}
</td>
<td>
{{ user.id|get_role }}
</td>
<td>
{{ user.email }}
</td>
<td>
{{ user.is_active }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"submit"
>
取消
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
确认删除
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
templates/nav.html
View file @
449bde4b
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
</ul>-->
</ul>-->
</li>
</li>
<li>
<li
id=
"juser"
>
<a
href=
"#"
><i
class=
"fa fa-rebel"
></i>
<span
class=
"nav-label"
>
用户管理
</span><span
class=
"fa arrow"
></span></a>
<a
href=
"#"
><i
class=
"fa fa-rebel"
></i>
<span
class=
"nav-label"
>
用户管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
<li><a
href=
"/juser/user_list/"
>
查看用户
</a></li>
<li><a
href=
"/juser/user_list/"
>
查看用户
</a></li>
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
<li><a
href=
"/juser/group_add/"
>
添加属组
</a></li>
<li><a
href=
"/juser/group_add/"
>
添加属组
</a></li>
</ul>
</ul>
</li>
</li>
<li>
<li
id=
"jasset"
>
<a
href=
"mailbox.html"
><i
class=
"fa fa-cube"
></i>
<span
class=
"nav-label"
>
资产管理
</span><span
class=
"fa arrow"
></span></a>
<a
href=
"mailbox.html"
><i
class=
"fa fa-cube"
></i>
<span
class=
"nav-label"
>
资产管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
<li><a
href=
"/jasset/host_list/"
>
查看资产
</a></li>
<li><a
href=
"/jasset/host_list/"
>
查看资产
</a></li>
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
<li><a
href=
"/jasset/group_add/"
>
添加业务组
</a></li>
<li><a
href=
"/jasset/group_add/"
>
添加业务组
</a></li>
</ul>
</ul>
</li>
</li>
<li>
<li
id=
"jperm"
>
<a
href=
"#"
><i
class=
"fa fa-edit"
></i>
<span
class=
"nav-label"
>
授权管理
</span><span
class=
"fa arrow"
></span></a>
<a
href=
"#"
><i
class=
"fa fa-edit"
></i>
<span
class=
"nav-label"
>
授权管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
<li><a
href=
"/jperm/perm_user_show/"
>
查看授权
</a></li>
<li><a
href=
"/jperm/perm_user_show/"
>
查看授权
</a></li>
...
...
templates/script.html
View file @
449bde4b
...
@@ -33,3 +33,9 @@
...
@@ -33,3 +33,9 @@
<!-- validator js -->
<!-- validator js -->
<script
src=
"/static/js/validator/jquery.validator.js"
></script>
<script
src=
"/static/js/validator/jquery.validator.js"
></script>
<script
src=
"/static/js/validator/zh_CN.js"
></script>
<script
src=
"/static/js/validator/zh_CN.js"
></script>
<!-- active menu -->
<script>
var
str
=
document
.
location
.
pathname
.
split
(
"/"
)[
1
];
$
(
"#"
+
str
).
addClass
(
'active'
);
</script>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment