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
433974d7
Commit
433974d7
authored
Feb 05, 2015
by
halcyon
Browse files
Options
Browse Files
Download
Plain Diff
改bug
parents
de58e92d
46cc593a
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
767 additions
and
155 deletions
+767
-155
connect.py
connect.py
+3
-1
urls.py
jasset/urls.py
+12
-12
views.py
jasset/views.py
+58
-62
urls.py
jperm/urls.py
+1
-0
views.py
jperm/views.py
+35
-0
mytags.py
jumpserver/templatetags/mytags.py
+21
-7
urls.py
jumpserver/urls.py
+1
-0
views.py
jumpserver/views.py
+2
-2
urls.py
juser/urls.py
+1
-0
views.py
juser/views.py
+44
-21
log_handler.py
log_handler.py
+96
-0
base.js
static/js/base.js
+31
-1
jquery.colorbox.js
static/js/jquery.colorbox.js
+3
-2
foot_script.html
templates/foot_script.html
+12
-2
head_script.html
templates/head_script.html
+0
-3
log_list.html
templates/jlog/log_list.html
+1
-1
perm_list.html
templates/jperm/perm_list.html
+45
-7
perm_list_ajax.html
templates/jperm/perm_list_ajax.html
+133
-0
group_add.html
templates/juser/group_add.html
+24
-14
group_add_ajax.html
templates/juser/group_add_ajax.html
+4
-0
group_edit.html
templates/juser/group_edit.html
+134
-0
group_list.html
templates/juser/group_list.html
+1
-1
user_add.html
templates/juser/user_add.html
+25
-10
user_list.html
templates/juser/user_list.html
+4
-7
nav.html
templates/nav.html
+2
-2
test.html
templates/test.html
+74
-0
No files found.
connect.py
View file @
433974d7
...
@@ -47,7 +47,8 @@ SERVER_KEY_DIR = os.path.join(SSH_KEY_DIR, 'server')
...
@@ -47,7 +47,8 @@ SERVER_KEY_DIR = os.path.join(SSH_KEY_DIR, 'server')
# The key of decryptor.
# The key of decryptor.
KEY
=
CONF
.
get
(
'web'
,
'key'
)
KEY
=
CONF
.
get
(
'web'
,
'key'
)
# Login user.
# Login user.
LOGIN_NAME
=
getpass
.
getuser
()
#LOGIN_NAME = getpass.getuser()
LOGIN_NAME
=
'halcyon'
#LOGIN_NAME = os.getlogin()
#LOGIN_NAME = os.getlogin()
USER_KEY_FILE
=
os
.
path
.
join
(
SERVER_KEY_DIR
,
LOGIN_NAME
)
USER_KEY_FILE
=
os
.
path
.
join
(
SERVER_KEY_DIR
,
LOGIN_NAME
)
...
@@ -259,6 +260,7 @@ def verify_connect(username, part_ip):
...
@@ -259,6 +260,7 @@ def verify_connect(username, part_ip):
color_print
(
'No Permission or No host.'
,
'red'
)
color_print
(
'No Permission or No host.'
,
'red'
)
else
:
else
:
username
,
password
,
host
,
port
=
get_connect_item
(
username
,
ip_matched
[
0
])
username
,
password
,
host
,
port
=
get_connect_item
(
username
,
ip_matched
[
0
])
print
username
,
password
,
host
,
port
connect
(
username
,
password
,
host
,
port
,
LOGIN_NAME
)
connect
(
username
,
password
,
host
,
port
,
LOGIN_NAME
)
...
...
jasset/urls.py
View file @
433974d7
...
@@ -4,18 +4,18 @@ from jasset.views import *
...
@@ -4,18 +4,18 @@ from jasset.views import *
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
url
(
r'^$'
,
index
),
url
(
r'^$'
,
index
),
url
(
r'^host_add/$'
,
j
add_host
),
url
(
r'^host_add/$'
,
add_host
),
url
(
r
'^host_add_multi/$'
,
j
add_host_multi
),
url
(
r
"^host_add_multi/$"
,
add_host_multi
),
url
(
r'^host_list/$'
,
j
list_host
),
url
(
r'^host_list/$'
,
list_host
),
url
(
r"^(\d+.\d+.\d+.\d+)/$"
,
jlist_ip
),
url
(
r"^(\d+.\d+.\d+.\d+)/$"
,
jlist_ip
),
url
(
r'^idc_add/$'
,
j
add_idc
),
url
(
r'^idc_add/$'
,
add_idc
),
url
(
r'^idc_list/$'
,
j
list_idc
),
url
(
r'^idc_list/$'
,
list_idc
),
url
(
r'^idc_detail/(\d+)$'
,
idc_detail
),
url
(
r'^idc_detail/(\d+)$'
,
detail_idc
),
url
(
r'^idc_del/(\d+)/$'
,
idc_del
),
url
(
r'^idc_del/(\d+)/$'
,
del_idc
),
url
(
r'^group_add/$'
,
j
add_group
),
url
(
r'^group_add/$'
,
add_group
),
url
(
r'^group_edit/(\d+)/$'
,
group_edit
),
url
(
r'^group_edit/(\d+)/$'
,
edit_group
),
url
(
r'^group_list/$'
,
j
list_group
),
url
(
r'^group_list/$'
,
list_group
),
url
(
r'^group_detail/(\d+)/$'
,
group_detail
),
url
(
r'^group_detail/(\d+)/$'
,
detail_group
),
url
(
r'^group_del_host/(\w+)/$'
,
group_del_host
),
url
(
r'^group_del_host/(\w+)/$'
,
group_del_host
),
url
(
r'^group_del/(\d+)/$'
,
group_del
),
url
(
r'^group_del/(\d+)/$'
,
group_del
),
url
(
r'^host_del/(\w+)/$'
,
host_del
),
url
(
r'^host_del/(\w+)/$'
,
host_del
),
...
...
jasset/views.py
View file @
433974d7
...
@@ -16,10 +16,38 @@ def index(request):
...
@@ -16,10 +16,38 @@ def index(request):
return
render_to_response
(
'jasset/jasset.html'
,
)
return
render_to_response
(
'jasset/jasset.html'
,
)
def
jadd_host
(
request
):
def
f_add_host
(
ip
,
port
,
idc
,
jtype
,
group
,
active
,
comment
,
username
=
''
,
password
=
''
):
groups
=
[]
idc
=
IDC
.
objects
.
get
(
name
=
idc
)
if
type
==
'M'
:
a
=
Asset
(
ip
=
ip
,
port
=
port
,
login_type
=
jtype
,
idc
=
idc
,
is_active
=
int
(
active
),
comment
=
comment
,
username
=
username
,
password
=
password
)
else
:
a
=
Asset
(
ip
=
ip
,
port
=
port
,
login_type
=
jtype
,
idc
=
idc
,
is_active
=
int
(
active
),
comment
=
comment
)
a
.
save
()
jasset_group_add
(
ip
,
ip
,
'P'
)
all_group
=
BisGroup
.
objects
.
get
(
name
=
'ALL'
)
private_group
=
BisGroup
.
objects
.
get
(
name
=
ip
.
strip
())
for
g
in
group
:
c
=
BisGroup
.
objects
.
get
(
name
=
g
)
groups
.
append
(
c
)
groups
.
extend
([
all_group
,
private_group
])
a
.
bis_group
=
groups
a
.
save
()
def
add_host
(
request
):
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
header_title
,
path1
,
path2
=
u'添加主机 | Add Host'
,
u'资产管理'
,
u'添加主机'
header_title
,
path1
,
path2
=
u'添加主机 | Add Host'
,
u'资产管理'
,
u'添加主机'
groups
=
[]
eidc
=
IDC
.
objects
.
all
()
eidc
=
IDC
.
objects
.
all
()
egroup
=
BisGroup
.
objects
.
filter
(
type
=
'A'
)
egroup
=
BisGroup
.
objects
.
filter
(
type
=
'A'
)
eusergroup
=
UserGroup
.
objects
.
all
()
eusergroup
=
UserGroup
.
objects
.
all
()
...
@@ -32,13 +60,6 @@ def jadd_host(request):
...
@@ -32,13 +60,6 @@ def jadd_host(request):
j_group
=
request
.
POST
.
getlist
(
'j_group'
)
j_group
=
request
.
POST
.
getlist
(
'j_group'
)
j_active
=
request
.
POST
.
get
(
'j_active'
)
j_active
=
request
.
POST
.
get
(
'j_active'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
j_idc
=
IDC
.
objects
.
get
(
name
=
j_idc
)
all_group
=
BisGroup
.
objects
.
get
(
name
=
'ALL'
)
for
group
in
j_group
:
c
=
BisGroup
.
objects
.
get
(
name
=
group
)
groups
.
append
(
c
)
groups
.
append
(
all_group
)
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
emg
=
u'该IP
%
s 已存在!'
%
j_ip
emg
=
u'该IP
%
s 已存在!'
%
j_ip
...
@@ -47,47 +68,31 @@ def jadd_host(request):
...
@@ -47,47 +68,31 @@ def jadd_host(request):
if
j_type
==
'M'
:
if
j_type
==
'M'
:
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_password
=
cryptor
.
encrypt
(
request
.
POST
.
get
(
'j_password'
))
j_password
=
cryptor
.
encrypt
(
request
.
POST
.
get
(
'j_password'
))
a
=
Asset
(
ip
=
j_ip
,
port
=
j_port
,
f_add_host
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_active
,
j_comment
,
j_user
,
j_password
)
login_type
=
j_type
,
idc
=
j_idc
,
is_active
=
int
(
j_active
),
comment
=
j_comment
,
username_common
=
j_user
,
password_common
=
j_password
)
else
:
else
:
a
=
Asset
(
ip
=
j_ip
,
port
=
j_port
,
f_add_host
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_active
,
j_comment
)
login_type
=
j_type
,
idc
=
j_idc
,
is_active
=
int
(
j_active
),
comment
=
j_comment
)
jasset_group_add
(
j_ip
,
j_ip
,
'P'
)
a
.
save
()
a
.
bis_group
=
groups
a
.
save
()
smg
=
u'主机
%
s 添加成功'
%
j_ip
smg
=
u'主机
%
s 添加成功'
%
j_ip
return
render_to_response
(
'jasset/host_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/host_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
j
add_host_multi
(
request
):
def
add_host_multi
(
request
):
header_title
,
path1
,
path2
=
u'批量添加主机 | Add Hosts'
,
u'资产管理'
,
u'批量添加主机'
header_title
,
path1
,
path2
=
u'批量添加主机 | Add Hosts'
,
u'资产管理'
,
u'批量添加主机'
login_types
=
{
'LDAP'
:
'L'
,
'SSH_KEY'
:
'S'
,
'PASSWORD'
:
'P'
,
'MAP'
:
'M'
}
login_types
=
{
'LDAP'
:
'L'
,
'SSH_KEY'
:
'S'
,
'PASSWORD'
:
'P'
,
'MAP'
:
'M'
}
j_group
=
[]
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
multi_hosts
=
request
.
POST
.
get
(
'j_multi'
)
.
split
(
'
\n
'
)
multi_hosts
=
request
.
POST
.
get
(
'j_multi'
)
.
split
(
'
\n
'
)
for
host
in
multi_hosts
:
for
host
in
multi_hosts
:
if
host
==
''
:
if
host
==
''
:
break
break
groups
=
[]
j_ip
,
j_port
,
j_type
,
j_idc
,
j_groups
,
j_user_group
,
j_active
,
j_comment
=
host
.
split
()
j_ip
,
j_port
,
j_type
,
j_idc
,
j_group
,
j_user_group
,
j_active
,
j_comment
=
host
.
split
()
j_idc
=
IDC
.
objects
.
get
(
name
=
j_idc
)
j_type
=
login_types
[
j_type
]
j_type
=
login_types
[
j_type
]
all_group
=
BisGroup
.
objects
.
get
(
name
=
'ALL'
)
j_groups
=
j_groups
.
split
(
','
)
j_group
=
j_group
.
split
(
','
)
for
group
in
j_groups
:
for
group
in
j_group
:
g
=
group
.
strip
(
'[]'
)
.
encode
(
'utf-8'
)
.
strip
()
g
=
group
.
strip
(
'[]'
)
j_group
.
append
(
g
)
print
g
print
j_group
,
type
(
j_group
)
c
=
BisGroup
.
objects
.
get
(
name
=
g
)
groups
.
append
(
c
)
groups
.
append
(
all_group
)
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
emg
=
u'该IP
%
s 已存在!'
%
j_ip
emg
=
u'该IP
%
s 已存在!'
%
j_ip
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
...
@@ -95,23 +100,13 @@ def jadd_host_multi(request):
...
@@ -95,23 +100,13 @@ def jadd_host_multi(request):
if
j_type
==
'M'
:
if
j_type
==
'M'
:
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_password
=
cryptor
.
encrypt
(
request
.
POST
.
get
(
'j_password'
))
j_password
=
cryptor
.
encrypt
(
request
.
POST
.
get
(
'j_password'
))
a
=
Asset
(
ip
=
j_ip
,
port
=
j_port
,
f_add_host
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_active
,
j_comment
,
j_user
,
j_password
)
login_type
=
j_type
,
idc
=
j_idc
,
is_active
=
int
(
j_active
),
comment
=
j_comment
,
username_common
=
j_user
,
password_common
=
j_password
)
else
:
else
:
a
=
Asset
(
ip
=
j_ip
,
port
=
j_port
,
f_add_host
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_active
,
j_comment
)
login_type
=
j_type
,
idc
=
j_idc
,
is_active
=
int
(
j_active
),
comment
=
j_comment
)
jasset_group_add
(
j_ip
,
j_ip
,
'P'
)
a
.
save
()
a
.
bis_group
=
groups
a
.
save
()
smg
=
u'批量添加添加成功'
smg
=
u'批量添加添加成功'
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
...
@@ -136,14 +131,13 @@ def batch_host_edit(request):
...
@@ -136,14 +131,13 @@ def batch_host_edit(request):
j_group
=
request
.
POST
.
getlist
(
j_group
)
j_group
=
request
.
POST
.
getlist
(
j_group
)
j_active
=
request
.
POST
.
get
(
j_active
)
.
strip
()
j_active
=
request
.
POST
.
get
(
j_active
)
.
strip
()
j_comment
=
request
.
POST
.
get
(
j_comment
)
.
strip
()
j_comment
=
request
.
POST
.
get
(
j_comment
)
.
strip
()
print
j_ip
jasset_host_edit
(
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_active
,
j_comment
)
jasset_host_edit
(
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_active
,
j_comment
)
return
render_to_response
(
'jasset/host_list.html'
)
return
render_to_response
(
'jasset/host_list.html'
)
def
j
list_host
(
request
):
def
list_host
(
request
):
header_title
,
path1
,
path2
=
u'查看主机 | List Host'
,
u'资产管理'
,
u'查看主机'
header_title
,
path1
,
path2
=
u'查看主机 | List Host'
,
u'资产管理'
,
u'查看主机'
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
posts
=
contact_list
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
posts
=
contact_list
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
...
@@ -167,12 +161,14 @@ def host_del(request, offset):
...
@@ -167,12 +161,14 @@ def host_del(request, offset):
len_list
=
request
.
POST
.
get
(
"len_list"
)
len_list
=
request
.
POST
.
get
(
"len_list"
)
for
i
in
range
(
int
(
len_list
)):
for
i
in
range
(
int
(
len_list
)):
key
=
"id_list["
+
str
(
i
)
+
"]"
key
=
"id_list["
+
str
(
i
)
+
"]"
print
key
jid
=
request
.
POST
.
get
(
key
)
jid
=
request
.
POST
.
get
(
key
)
print
jid
a
=
Asset
.
objects
.
get
(
id
=
jid
)
.
ip
Asset
.
objects
.
filter
(
id
=
jid
)
.
delete
()
Asset
.
objects
.
filter
(
id
=
jid
)
.
delete
()
BisGroup
.
objects
.
filter
(
name
=
a
)
.
delete
()
else
:
else
:
jid
=
int
(
offset
)
jid
=
int
(
offset
)
a
=
Asset
.
objects
.
get
(
id
=
jid
)
.
ip
BisGroup
.
objects
.
filter
(
name
=
a
)
.
delete
()
Asset
.
objects
.
filter
(
id
=
jid
)
.
delete
()
Asset
.
objects
.
filter
(
id
=
jid
)
.
delete
()
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
...
@@ -235,7 +231,7 @@ def jlist_ip(request, offset):
...
@@ -235,7 +231,7 @@ def jlist_ip(request, offset):
return
render_to_response
(
'jasset/jlist_ip.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/jlist_ip.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
j
add_idc
(
request
):
def
add_idc
(
request
):
header_title
,
path1
,
path2
=
u'添加IDC | Add IDC'
,
u'资产管理'
,
u'添加IDC'
header_title
,
path1
,
path2
=
u'添加IDC | Add IDC'
,
u'资产管理'
,
u'添加IDC'
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
j_idc
=
request
.
POST
.
get
(
'j_idc'
)
j_idc
=
request
.
POST
.
get
(
'j_idc'
)
...
@@ -250,18 +246,18 @@ def jadd_idc(request):
...
@@ -250,18 +246,18 @@ def jadd_idc(request):
return
render_to_response
(
'jasset/idc_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/idc_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
j
list_idc
(
request
):
def
list_idc
(
request
):
header_title
,
path1
,
path2
=
u'查看IDC | List IDC'
,
u'资产管理'
,
u'查看IDC'
header_title
,
path1
,
path2
=
u'查看IDC | List IDC'
,
u'资产管理'
,
u'查看IDC'
posts
=
IDC
.
objects
.
all
()
.
order_by
(
'id'
)
posts
=
IDC
.
objects
.
all
()
.
order_by
(
'id'
)
return
render_to_response
(
'jasset/idc_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/idc_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
idc_del
(
request
,
offset
):
def
del_idc
(
request
,
offset
):
IDC
.
objects
.
filter
(
id
=
offset
)
.
delete
()
IDC
.
objects
.
filter
(
id
=
offset
)
.
delete
()
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
def
j
add_group
(
request
):
def
add_group
(
request
):
header_title
,
path1
,
path2
=
u'添加主机组 | Add Group'
,
u'资产管理'
,
u'添加主机组'
header_title
,
path1
,
path2
=
u'添加主机组 | Add Group'
,
u'资产管理'
,
u'添加主机组'
posts
=
Asset
.
objects
.
all
()
posts
=
Asset
.
objects
.
all
()
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
...
@@ -283,13 +279,13 @@ def jadd_group(request):
...
@@ -283,13 +279,13 @@ def jadd_group(request):
return
render_to_response
(
'jasset/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
j
list_group
(
request
):
def
list_group
(
request
):
header_title
,
path1
,
path2
=
u'查看主机组 | List Group'
,
u'资产管理'
,
u'查看主机组'
header_title
,
path1
,
path2
=
u'查看主机组 | List Group'
,
u'资产管理'
,
u'查看主机组'
posts
=
BisGroup
.
objects
.
filter
(
type
=
'A'
)
.
order_by
(
'id'
)
posts
=
BisGroup
.
objects
.
filter
(
type
=
'A'
)
.
order_by
(
'id'
)
return
render_to_response
(
'jasset/group_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/group_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
group_edit
(
request
,
offset
):
def
edit_group
(
request
,
offset
):
header_title
,
path1
,
path2
=
u'编辑主机组 | Edit Group'
,
u'资产管理'
,
u'编辑主机组'
header_title
,
path1
,
path2
=
u'编辑主机组 | Edit Group'
,
u'资产管理'
,
u'编辑主机组'
group
=
BisGroup
.
objects
.
get
(
id
=
offset
)
group
=
BisGroup
.
objects
.
get
(
id
=
offset
)
all
=
Asset
.
objects
.
all
()
all
=
Asset
.
objects
.
all
()
...
@@ -311,7 +307,7 @@ def group_edit(request, offset):
...
@@ -311,7 +307,7 @@ def group_edit(request, offset):
return
render_to_response
(
'jasset/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
group_detail
(
request
,
offset
):
def
detail_group
(
request
,
offset
):
header_title
,
path1
,
path2
=
u'主机组详情 | Group Detail'
,
u'资产管理'
,
u'主机组详情'
header_title
,
path1
,
path2
=
u'主机组详情 | Group Detail'
,
u'资产管理'
,
u'主机组详情'
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
group_name
=
BisGroup
.
objects
.
get
(
id
=
offset
)
.
name
group_name
=
BisGroup
.
objects
.
get
(
id
=
offset
)
.
name
...
@@ -330,7 +326,7 @@ def group_detail(request, offset):
...
@@ -330,7 +326,7 @@ def group_detail(request, offset):
return
render_to_response
(
'jasset/group_detail.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jasset/group_detail.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
idc_detail
(
request
,
offset
):
def
detail_idc
(
request
,
offset
):
header_title
,
path1
,
path2
=
u'主机组详情 | Group Detail'
,
u'资产管理'
,
u'主机组详情'
header_title
,
path1
,
path2
=
u'主机组详情 | Group Detail'
,
u'资产管理'
,
u'主机组详情'
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'S'
:
'SSH_KEY'
,
'P'
:
'PASSWORD'
,
'M'
:
'MAP'
}
idc_name
=
IDC
.
objects
.
get
(
id
=
offset
)
.
name
idc_name
=
IDC
.
objects
.
get
(
id
=
offset
)
.
name
...
...
jperm/urls.py
View file @
433974d7
...
@@ -8,6 +8,7 @@ urlpatterns = patterns('jperm.views',
...
@@ -8,6 +8,7 @@ urlpatterns = patterns('jperm.views',
(
r'^perm_edit/$'
,
'perm_edit'
),
(
r'^perm_edit/$'
,
'perm_edit'
),
(
r'^perm_list/$'
,
'perm_list'
),
(
r'^perm_list/$'
,
'perm_list'
),
(
r'^perm_list_ajax/$'
,
'perm_list_ajax'
),
(
r'^perm_detail/$'
,
'perm_detail'
),
(
r'^perm_detail/$'
,
'perm_detail'
),
(
r'^perm_del/$'
,
'perm_del'
),
(
r'^perm_del/$'
,
'perm_del'
),
(
r'^perm_asset_detail/$'
,
'perm_asset_detail'
),
(
r'^perm_asset_detail/$'
,
'perm_asset_detail'
),
...
...
jperm/views.py
View file @
433974d7
...
@@ -65,6 +65,41 @@ def perm_list(request):
...
@@ -65,6 +65,41 @@ def perm_list(request):
return
render_to_response
(
'jperm/perm_list.html'
,
locals
())
return
render_to_response
(
'jperm/perm_list.html'
,
locals
())
def
perm_list_ajax
(
request
):
tab
=
request
.
POST
.
get
(
'tab'
,
'tab1'
)
search
=
request
.
POST
.
get
(
'search'
,
''
)
if
tab
==
'tab1'
:
groups
=
contact_list
=
UserGroup
.
objects
.
filter
(
name__icontains
=
search
)
.
order_by
(
'type'
)
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
)
else
:
users
=
contact_list2
=
User
.
objects
.
filter
(
name__icontains
=
search
)
.
order_by
(
'id'
)
p2
=
paginator2
=
Paginator
(
contact_list2
,
10
)
try
:
page
=
int
(
request
.
GET
.
get
(
'page'
,
'1'
))
except
ValueError
:
page
=
1
try
:
contacts2
=
paginator2
.
page
(
page
)
except
(
EmptyPage
,
InvalidPage
):
contacts2
=
paginator2
.
page
(
paginator2
.
num_pages
)
return
render_to_response
(
'jperm/perm_list_ajax.html'
,
locals
())
def
perm_edit
(
request
):
def
perm_edit
(
request
):
if
request
.
method
==
'GET'
:
if
request
.
method
==
'GET'
:
header_title
,
path1
,
path2
=
u'编辑授权 | Perm Host Edit.'
,
u'jperm'
,
u'perm_edit'
header_title
,
path1
,
path2
=
u'编辑授权 | Perm Host Edit.'
,
u'jperm'
,
u'perm_edit'
...
...
jumpserver/templatetags/mytags.py
View file @
433974d7
# coding: utf-8
# coding: utf-8
import
time
import
time
import
re
from
django
import
template
from
django
import
template
from
django.db.models
import
Q
from
django.db.models
import
Q
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
...
@@ -34,7 +35,7 @@ def get_role(user_id):
...
@@ -34,7 +35,7 @@ def get_role(user_id):
def
groups_str
(
username
):
def
groups_str
(
username
):
groups
=
[]
groups
=
[]
user
=
User
.
objects
.
get
(
username
=
username
)
user
=
User
.
objects
.
get
(
username
=
username
)
for
group
in
user
.
user_group
.
filter
(
Q
(
type
=
'A'
)
|
Q
(
type
=
'M'
)
):
for
group
in
user
.
user_group
.
filter
(
type
=
'A'
):
groups
.
append
(
group
.
name
)
groups
.
append
(
group
.
name
)
if
len
(
groups
)
<
4
:
if
len
(
groups
)
<
4
:
return
' '
.
join
(
groups
)
return
' '
.
join
(
groups
)
...
@@ -42,6 +43,16 @@ def groups_str(username):
...
@@ -42,6 +43,16 @@ def groups_str(username):
return
"
%
s ..."
%
' '
.
join
(
groups
[
0
:
3
])
return
"
%
s ..."
%
' '
.
join
(
groups
[
0
:
3
])
@register.filter
(
name
=
'group_manage_str'
)
def
group_manage_str
(
username
):
user
=
User
.
objects
.
get
(
username
=
username
)
group
=
user
.
user_group
.
filter
(
type
=
'M'
)
if
group
:
return
group
[
0
]
.
name
else
:
return
''
@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
)
...
@@ -70,9 +81,9 @@ def perm_count(group_id):
...
@@ -70,9 +81,9 @@ def perm_count(group_id):
@register.filter
(
name
=
'group_type_to_str'
)
@register.filter
(
name
=
'group_type_to_str'
)
def
group_type_to_str
(
type_name
):
def
group_type_to_str
(
type_name
):
group_types
=
{
group_types
=
{
'P'
:
'
私有组
'
,
'P'
:
'
用户
'
,
'M'
:
'
管理组
'
,
'M'
:
'
部门
'
,
'A'
:
'
授权
组'
,
'A'
:
'
用户
组'
,
}
}
return
group_types
.
get
(
type_name
)
return
group_types
.
get
(
type_name
)
...
@@ -85,6 +96,10 @@ def perm_asset_count(user_id):
...
@@ -85,6 +96,10 @@ def perm_asset_count(user_id):
@register.filter
(
name
=
'filter_private'
)
@register.filter
(
name
=
'filter_private'
)
def
filter_private
(
group
):
def
filter_private
(
group
):
agroup
=
[]
agroup
=
[]
pattern
=
re
.
compile
(
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
)
p
=
BisGroup
.
objects
.
get
(
name
=
'ALL'
)
p
=
BisGroup
.
objects
.
get
(
name
=
'ALL'
)
[
agroup
.
append
(
g
)
for
g
in
group
if
g
!=
p
]
for
g
in
group
:
return
agroup
if
not
pattern
.
match
(
g
.
name
):
\ No newline at end of file
agroup
.
append
(
g
)
agroup
.
remove
(
p
)
return
agroup
jumpserver/urls.py
View file @
433974d7
...
@@ -14,4 +14,5 @@ urlpatterns = patterns('',
...
@@ -14,4 +14,5 @@ urlpatterns = patterns('',
(
r'^jasset/'
,
include
(
'jasset.urls'
)),
(
r'^jasset/'
,
include
(
'jasset.urls'
)),
(
r'^jlog/'
,
include
(
'jlog.urls'
)),
(
r'^jlog/'
,
include
(
'jlog.urls'
)),
(
r'^jperm/'
,
include
(
'jperm.urls'
)),
(
r'^jperm/'
,
include
(
'jperm.urls'
)),
)
)
jumpserver/views.py
View file @
433974d7
...
@@ -23,11 +23,11 @@ def skin_config(request):
...
@@ -23,11 +23,11 @@ def skin_config(request):
return
render_to_response
(
'skin_config.html'
)
return
render_to_response
(
'skin_config.html'
)
def
jasset_group_add
(
name
,
comment
,
type
):
def
jasset_group_add
(
name
,
comment
,
j
type
):
if
BisGroup
.
objects
.
filter
(
name
=
name
):
if
BisGroup
.
objects
.
filter
(
name
=
name
):
emg
=
u'该业务组已存在!'
emg
=
u'该业务组已存在!'
else
:
else
:
BisGroup
.
objects
.
create
(
name
=
name
,
comment
=
comment
,
type
=
type
)
BisGroup
.
objects
.
create
(
name
=
name
,
comment
=
comment
,
type
=
j
type
)
smg
=
u'业务组
%
s添加成功'
%
name
smg
=
u'业务组
%
s添加成功'
%
name
...
...
juser/urls.py
View file @
433974d7
...
@@ -9,6 +9,7 @@ urlpatterns = patterns('juser.views',
...
@@ -9,6 +9,7 @@ urlpatterns = patterns('juser.views',
(
r'^user_add/$'
,
'user_add'
),
(
r'^user_add/$'
,
'user_add'
),
(
r'^user_list/$'
,
'user_list'
),
(
r'^user_list/$'
,
'user_list'
),
(
r'^group_add/$'
,
'group_add'
),
(
r'^group_add/$'
,
'group_add'
),
(
r'^group_add_ajax/$'
,
'group_add_ajax'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^group_list/$'
,
'group_list'
),
(
r'^user_detail/$'
,
'user_detail'
),
(
r'^user_detail/$'
,
'user_detail'
),
(
r'^user_del/$'
,
'user_del'
),
(
r'^user_del/$'
,
'user_del'
),
...
...
juser/views.py
View file @
433974d7
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
import
time
import
time
import
os
import
os
import
hashlib
import
random
import
random
import
subprocess
import
subprocess
import
ldap
import
ldap
...
@@ -17,12 +16,14 @@ from django.shortcuts import render_to_response
...
@@ -17,12 +16,14 @@ from django.shortcuts import render_to_response
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.core.exceptions
import
ObjectDoesNotExist
from
django.db.models
import
Q
from
django.db.models
import
Q
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
from
django.core.paginator
import
Paginator
,
EmptyPage
,
InvalidPage
from
juser.models
import
UserGroup
,
User
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
from
jumpserver.views
import
md5_crypt
CRYPTOR
=
PyCrypt
(
KEY
)
CRYPTOR
=
PyCrypt
(
KEY
)
LDAP_ENABLE
=
CONF
.
getint
(
'ldap'
,
'ldap_enable'
)
LDAP_ENABLE
=
CONF
.
getint
(
'ldap'
,
'ldap_enable'
)
...
@@ -253,16 +254,21 @@ def ldap_del_user(username):
...
@@ -253,16 +254,21 @@ def ldap_del_user(username):
ldap_conn
.
delete
(
sudo_dn
)
ldap_conn
.
delete
(
sudo_dn
)
def
group_add
(
request
):
def
group_add
(
request
,
group_type_select
=
'A'
):
error
=
''
error
=
''
msg
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加属组 | Add Group'
,
'juser'
,
'group_add'
header_title
,
path1
,
path2
=
'添加属组 | Add Group'
,
'juser'
,
'group_add'
group_types
=
{
group_types
=
{
# 'P': '私有组',
'M'
:
'部门'
,
'M'
:
'管理组'
,
'A'
:
'用户组'
,
'A'
:
'授权组'
,
}
}
users
=
User
.
objects
.
all
()
users_all
=
User
.
objects
.
all
()
if
group_type_select
==
'M'
:
users
=
[
user
for
user
in
users_all
if
not
user
.
user_group
.
filter
(
type
=
'M'
)]
else
:
users
=
users_all
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
group_name
=
request
.
POST
.
get
(
'group_name'
,
''
)
group_name
=
request
.
POST
.
get
(
'group_name'
,
''
)
group_type
=
request
.
POST
.
get
(
'group_type'
,
'A'
)
group_type
=
request
.
POST
.
get
(
'group_type'
,
'A'
)
...
@@ -287,9 +293,20 @@ def group_add(request):
...
@@ -287,9 +293,20 @@ def group_add(request):
return
render_to_response
(
'juser/group_add.html'
,
locals
())
return
render_to_response
(
'juser/group_add.html'
,
locals
())
def
group_add_ajax
(
request
):
group_type
=
request
.
POST
.
get
(
'type'
,
'A'
)
users_all
=
User
.
objects
.
all
()
if
group_type
==
'A'
:
users
=
users_all
else
:
users
=
[
user
for
user
in
users_all
if
not
user
.
user_group
.
filter
(
type
=
'M'
)]
return
render_to_response
(
'juser/group_add_ajax.html'
,
locals
())
def
group_list
(
request
):
def
group_list
(
request
):
header_title
,
path1
,
path2
=
'查看属组 | Show Group'
,
'juser'
,
'group_list'
header_title
,
path1
,
path2
=
'查看属组 | Show Group'
,
'juser'
,
'group_list'
groups
=
contact_list
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
.
order_by
(
'
id
'
)
groups
=
contact_list
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
.
order_by
(
'
type
'
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
try
:
try
:
...
@@ -327,9 +344,8 @@ def group_edit(request):
...
@@ -327,9 +344,8 @@ def group_edit(request):
msg
=
''
msg
=
''
header_title
,
path1
,
path2
=
'修改属组 | Edit Group'
,
'juser'
,
'group_edit'
header_title
,
path1
,
path2
=
'修改属组 | Edit Group'
,
'juser'
,
'group_edit'
group_types
=
{
group_types
=
{
# 'P': '私有组',
'M'
:
'部门'
,
'M'
:
'管理组'
,
'A'
:
'用户组'
,
'A'
:
'授权组'
,
}
}
if
request
.
method
==
'GET'
:
if
request
.
method
==
'GET'
:
group_id
=
request
.
GET
.
get
(
'id'
,
None
)
group_id
=
request
.
GET
.
get
(
'id'
,
None
)
...
@@ -341,7 +357,7 @@ def group_edit(request):
...
@@ -341,7 +357,7 @@ def group_edit(request):
users_selected
=
group
.
user_set
.
all
()
users_selected
=
group
.
user_set
.
all
()
users
=
[
user
for
user
in
users_all
if
user
not
in
users_selected
]
users
=
[
user
for
user
in
users_all
if
user
not
in
users_selected
]
return
render_to_response
(
'juser/group_
add
.html'
,
locals
())
return
render_to_response
(
'juser/group_
edit
.html'
,
locals
())
else
:
else
:
group_id
=
request
.
POST
.
get
(
'group_id'
,
None
)
group_id
=
request
.
POST
.
get
(
'group_id'
,
None
)
group_name
=
request
.
POST
.
get
(
'group_name'
,
None
)
group_name
=
request
.
POST
.
get
(
'group_name'
,
None
)
...
@@ -349,7 +365,6 @@ def group_edit(request):
...
@@ -349,7 +365,6 @@ def group_edit(request):
users_selected
=
request
.
POST
.
getlist
(
'users_selected'
)
users_selected
=
request
.
POST
.
getlist
(
'users_selected'
)
group_type
=
request
.
POST
.
get
(
'group_type'
)
group_type
=
request
.
POST
.
get
(
'group_type'
)
group
=
UserGroup
.
objects
.
filter
(
id
=
group_id
)
group
=
UserGroup
.
objects
.
filter
(
id
=
group_id
)
# return HttpResponse(group_type)
group
.
update
(
name
=
group_name
,
comment
=
comment
,
type
=
group_type
)
group
.
update
(
name
=
group_name
,
comment
=
comment
,
type
=
group_type
)
group_update_user
(
group_id
,
users_selected
)
group_update_user
(
group_id
,
users_selected
)
...
@@ -407,9 +422,10 @@ def user_edit(request):
...
@@ -407,9 +422,10 @@ def user_edit(request):
password
=
user
.
password
password
=
user
.
password
ssh_key_pwd
=
user
.
ssh_key_pwd
ssh_key_pwd
=
user
.
ssh_key_pwd
name
=
user
.
name
name
=
user
.
name
all_group
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
manage_groups
=
UserGroup
.
objects
.
filter
(
type
=
'M'
)
groups
=
user
.
user_group
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
auth_groups
=
UserGroup
.
objects
.
filter
(
type
=
'A'
)
groups_str
=
' '
.
join
([
str
(
group
.
id
)
for
group
in
groups
])
manage_group_id
=
user
.
user_group
.
get
(
type
=
'M'
)
.
id
groups_str
=
' '
.
join
([
str
(
group
.
id
)
for
group
in
auth_groups
])
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
role_post
=
user
.
role
role_post
=
user
.
role
ssh_pwd
=
user
.
ssh_pwd
ssh_pwd
=
user
.
ssh_pwd
...
@@ -420,8 +436,11 @@ def user_edit(request):
...
@@ -420,8 +436,11 @@ def user_edit(request):
password
=
request
.
POST
.
get
(
'password'
,
None
)
password
=
request
.
POST
.
get
(
'password'
,
None
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
manage_group_id
=
request
.
POST
.
get
(
'manage_group'
,
''
)
groups_str
=
' '
.
join
(
groups
)
auth_groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
groups
=
auth_groups
groups
.
append
(
manage_group_id
)
groups_str
=
' '
.
join
(
auth_groups
)
role_post
=
request
.
POST
.
get
(
'role'
,
None
)
role_post
=
request
.
POST
.
get
(
'role'
,
None
)
ssh_pwd
=
request
.
POST
.
get
(
'ssh_pwd'
,
None
)
ssh_pwd
=
request
.
POST
.
get
(
'ssh_pwd'
,
None
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
None
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
None
)
...
@@ -464,14 +483,18 @@ def user_add(request):
...
@@ -464,14 +483,18 @@ def user_add(request):
msg
=
''
msg
=
''
header_title
,
path1
,
path2
=
'添加用户 | Add User'
,
'juser'
,
'user_add'
header_title
,
path1
,
path2
=
'添加用户 | Add User'
,
'juser'
,
'user_add'
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
user_role
=
{
'SU'
:
u'超级管理员'
,
'GA'
:
u'组管理员'
,
'CU'
:
u'普通用户'
}
all_group
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'M'
)
|
Q
(
type
=
'A'
))
.
order_by
(
'-type'
)
manage_groups
=
UserGroup
.
objects
.
filter
(
type
=
'M'
)
auth_groups
=
UserGroup
.
objects
.
filter
(
type
=
'A'
)
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
username
=
request
.
POST
.
get
(
'username'
,
None
)
username
=
request
.
POST
.
get
(
'username'
,
None
)
password
=
request
.
POST
.
get
(
'password'
,
''
)
password
=
request
.
POST
.
get
(
'password'
,
''
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
name
=
request
.
POST
.
get
(
'name'
,
None
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
email
=
request
.
POST
.
get
(
'email'
,
''
)
groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
manage_group_id
=
request
.
POST
.
get
(
'manage_group'
)
groups_str
=
' '
.
join
(
groups
)
auth_groups
=
request
.
POST
.
getlist
(
'groups'
,
None
)
groups
=
auth_groups
groups
.
append
(
manage_group_id
)
groups_str
=
' '
.
join
(
auth_groups
)
role_post
=
request
.
POST
.
get
(
'role'
,
'CU'
)
role_post
=
request
.
POST
.
get
(
'role'
,
'CU'
)
ssh_pwd
=
request
.
POST
.
get
(
'ssh_pwd'
,
''
)
ssh_pwd
=
request
.
POST
.
get
(
'ssh_pwd'
,
''
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
''
)
ssh_key_pwd
=
request
.
POST
.
get
(
'ssh_key_pwd'
,
''
)
...
...
log_handler.py
0 → 100755
View file @
433974d7
#!/usr/bin/python
#coding: utf-8
import
os
import
sys
import
time
cur_dir
=
os
.
path
.
dirname
(
__file__
)
sys
.
path
.
append
(
'
%
s/webroot/AutoSa/'
%
cur_dir
)
os
.
environ
[
'DJANGO_SETTINGS_MODULE'
]
=
'jumpserver.settings'
import
django
django
.
setup
()
from
jlog.models
import
Log
def
log_hanler
(
pid
):
log
=
Log
.
objects
.
filter
(
id
=
pid
)
if
log
:
log
=
log
[
0
]
filename
=
log
.
logfile
if
os
.
path
.
isfile
(
filename
):
ret1
=
os
.
system
(
'cat
%
s | grep "DateTime" >
%
s.his'
%
(
filename
,
filename
))
ret2
=
os
.
system
(
'cat
%
s | grep "
\
[.*@.*
\
][
\
$
\
#]" >>
%
s.his'
%
(
filename
,
filename
))
ret3
=
os
.
system
(
'cat
%
s | grep "EndTime" >>
%
s.his'
%
(
filename
,
filename
))
if
(
ret1
+
ret2
+
ret3
)
==
0
:
print
'Handler
%
s ok.'
%
filename
def
set_finish
(
id
):
logs
=
Log
.
objects
.
filter
(
id
=
id
,
finish
=
0
)
if
logs
:
structtime_start
=
time
.
localtime
()
timestamp_end
=
int
(
time
.
mktime
(
structtime_start
))
log
=
logs
[
0
]
log
.
finish
=
1
log
.
end_time
=
timestamp_end
log
.
save
()
def
kill_pid
(
pid
):
try
:
os
.
kill
(
pid
,
9
)
except
OSError
:
pass
def
pid_exist
(
pid
):
pid_dir
=
"/proc/
%
s"
%
pid
if
os
.
path
.
isdir
(
pid_dir
):
return
True
else
:
return
False
def
del_pid
(
pid_id
):
pid
=
Pid
.
objects
.
filter
(
id
=
pid_id
)
if
pid
:
pid
[
0
]
.
delete
()
def
get_pids
():
pids
=
[]
pids_obj
=
Pid
.
objects
.
all
()
for
pid_obj
in
pids_obj
:
pids
.
append
((
pid_obj
.
id
,
pid_obj
.
ppid
,
pid_obj
.
cpid
,
pid_obj
.
pid
,
pid_obj
.
start_time
))
return
pids
def
run
():
for
pid_id
,
ppid
,
cpid
,
pid
,
start_time
in
get_pids
():
if
pid_exist
(
cpid
):
if
pid_exist
(
ppid
):
structtime_start
=
time
.
localtime
()
timestamp_end
=
int
(
time
.
mktime
(
structtime_start
))
if
timestamp_end
-
start_time
>
7200
:
kill_pid
(
ppid
)
kill_pid
(
cpid
)
del_pid
(
pid_id
)
set_finish
(
pid
)
log_hanler
(
pid
)
else
:
kill_pid
(
cpid
)
del_pid
(
pid_id
)
set_finish
(
pid
)
log_hanler
(
pid
)
else
:
del_pid
(
pid_id
)
set_finish
(
pid
)
log_hanler
(
pid
)
if
__name__
==
'__main__'
:
while
True
:
run
()
time
.
sleep
(
0.5
)
static/js/base.js
View file @
433974d7
...
@@ -59,7 +59,6 @@ function GetTableDataBox() {
...
@@ -59,7 +59,6 @@ function GetTableDataBox() {
return
returnData
;
return
returnData
;
}
}
function
move
(
from
,
to
)
{
function
move
(
from
,
to
)
{
$
(
"#"
+
from
+
" option"
).
each
(
function
()
{
$
(
"#"
+
from
+
" option"
).
each
(
function
()
{
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
...
@@ -73,3 +72,34 @@ function move_all(from, to) {
...
@@ -73,3 +72,34 @@ function move_all(from, to) {
$
(
"#"
+
to
).
append
(
this
);
$
(
"#"
+
to
).
append
(
this
);
});
});
}
}
function
selectAll
(){
var
checklist
=
document
.
getElementsByName
(
"selected"
);
if
(
document
.
getElementById
(
"select_all"
).
checked
)
{
for
(
var
i
=
0
;
i
<
checklist
.
length
;
i
++
)
{
checklist
[
i
].
checked
=
1
;
}
}
else
{
for
(
var
j
=
0
;
j
<
checklist
.
length
;
j
++
)
{
checklist
[
j
].
checked
=
0
;
}
}
}
function
move
(
from
,
to
)
{
$
(
"#"
+
from
+
" option"
).
each
(
function
(){
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
$
(
"#"
+
to
).
append
(
this
);
}
});
}
function
move_all
(
from
,
to
){
$
(
"#"
+
from
).
children
().
each
(
function
(){
$
(
"#"
+
to
).
append
(
this
);
});
}
static/js/jquery.colorbox.js
View file @
433974d7
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
maxHeight
:
false
,
maxHeight
:
false
,
scalePhotos
:
true
,
scalePhotos
:
true
,
scrolling
:
true
,
scrolling
:
true
,
opacity
:
0.
9
,
opacity
:
0.
3
,
preloading
:
true
,
preloading
:
true
,
className
:
false
,
className
:
false
,
overlayClose
:
true
,
overlayClose
:
true
,
...
@@ -418,7 +418,8 @@
...
@@ -418,7 +418,8 @@
$overlay
.
css
({
$overlay
.
css
({
opacity
:
opacity
===
opacity
?
opacity
:
''
,
opacity
:
opacity
===
opacity
?
opacity
:
''
,
cursor
:
settings
.
get
(
'overlayClose'
)
?
'pointer'
:
''
,
cursor
:
settings
.
get
(
'overlayClose'
)
?
'pointer'
:
''
,
visibility
:
'visible'
visibility
:
'visible'
,
// 'background-color': 'black'
}).
show
();
}).
show
();
if
(
settings
.
get
(
'closeButton'
))
{
if
(
settings
.
get
(
'closeButton'
))
{
...
...
templates/foot_script.html
View file @
433974d7
<!-- Mainly scripts -->
<!-- Mainly scripts -->
<script
src=
"/static/js/plugins/metisMenu/jquery.metisMenu.js"
></script>
<script
src=
"/static/js/plugins/metisMenu/jquery.metisMenu.js"
></script>
<script
src=
"/static/js/plugins/slimscroll/jquery.slimscroll.min.js"
></script>
<script
src=
"/static/js/plugins/slimscroll/jquery.slimscroll.min.js"
></script>
<script
src=
"/static/js/bootstrap-dialog.js"
></script>
<script
src=
"/static/js/bootstrap-dialog.js"
></script>
...
@@ -10,7 +9,6 @@
...
@@ -10,7 +9,6 @@
<script
src=
"/static/js/plugins/pace/pace.min.js"
></script>
<script
src=
"/static/js/plugins/pace/pace.min.js"
></script>
<!-- iCheck box -->
<!-- iCheck box -->
{#
<script
src=
"/static/js/plugins/iCheck/icheck.min.js"
></script>
#}
<!-- Peity -->
<!-- Peity -->
<script
src=
"/static/js/plugins/peity/jquery.peity.min.js"
></script>
<script
src=
"/static/js/plugins/peity/jquery.peity.min.js"
></script>
...
@@ -18,10 +16,21 @@
...
@@ -18,10 +16,21 @@
<!-- Peity -->
<!-- Peity -->
<script
src=
"/static/js/demo/peity-demo.js"
></script>
<script
src=
"/static/js/demo/peity-demo.js"
></script>
<script
src=
"/static/js/base.js"
></script>
<!-- pop windows -->
<script
src=
"/static/js/jquery.colorbox.js"
></script>
<!-- active menu -->
<!-- active menu -->
<script>
<script>
var
str
=
document
.
location
.
pathname
.
split
(
"/"
)[
1
];
var
str
=
document
.
location
.
pathname
.
split
(
"/"
)[
1
];
var
str1
=
document
.
location
.
pathname
.
split
(
"/"
)[
2
];
var
str1
=
document
.
location
.
pathname
.
split
(
"/"
)[
2
];
$
(
"#"
+
str
).
addClass
(
'active'
);
$
(
"#"
+
str
).
addClass
(
'active'
);
$
(
"#"
+
str1
).
addClass
(
'active'
);
$
(
"#"
+
str1
).
addClass
(
'active'
);
</script>
<script>
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"80%"
});
});
</script>
</script>
\ No newline at end of file
templates/head_script.html
View file @
433974d7
...
@@ -2,9 +2,6 @@
...
@@ -2,9 +2,6 @@
<script
src=
"/static/js/bootstrap.min.js"
></script>
<script
src=
"/static/js/bootstrap.min.js"
></script>
<script
src=
"/static/js/base.js"
></script>
<script
src=
"/static/js/base.js"
></script>
<!-- pop windows -->
<script
src=
"/static/js/jquery.colorbox.js"
></script>
<!-- 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>
templates/jlog/log_list.html
View file @
433974d7
...
@@ -102,7 +102,7 @@
...
@@ -102,7 +102,7 @@
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ post.user.name }}
</td>
<td
class=
"text-center"
>
{{ post.user.name }}
</td>
<td
class=
"text-center"
>
{{ post.asset.ip }}
</td>
<td
class=
"text-center"
>
{{ post.asset.ip }}
</td>
<td
class=
"text-center"
>
命令统计
</td>
<td
class=
"text-center"
>
<a
href=
"/logHistory/?id={{ log.id }}"
class=
"log_command"
>
命令统计
</a>
</td>
<td
class=
"text-center"
>
{{ post.start_time|date:"Y-m-d H:i:s"}}
</td>
<td
class=
"text-center"
>
{{ post.start_time|date:"Y-m-d H:i:s"}}
</td>
<td
class=
"text-center"
>
{{ post.end_time|date:"Y-m-d H:i:s" }}
</td>
<td
class=
"text-center"
>
{{ post.end_time|date:"Y-m-d H:i:s" }}
</td>
</tr>
</tr>
...
...
templates/jperm/perm_list.html
View file @
433974d7
...
@@ -33,8 +33,20 @@
...
@@ -33,8 +33,20 @@
<div
class=
"panel-heading"
>
<div
class=
"panel-heading"
>
<div
class=
"panel-options"
>
<div
class=
"panel-options"
>
<ul
class=
"nav nav-tabs"
>
<ul
class=
"nav nav-tabs"
>
<li
class=
"active"
><a
data-toggle=
"tab"
href=
"#tab-1"
>
授权编辑
</a></li>
<li
id=
"tab1"
class=
"active"
><a
data-toggle=
"tab"
href=
"#tab-1"
>
授权编辑
</a></li>
<li
class=
""
><a
data-toggle=
"tab"
href=
"#tab-2"
>
查看授权
</a></li>
<li
id=
"tab2"
class=
""
><a
data-toggle=
"tab"
href=
"#tab-2"
>
查看授权
</a></li>
<li
style=
"float: right"
>
<form
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"search"
placeholder=
"Search"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"button"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</li>
</ul>
</ul>
</div>
</div>
</div>
</div>
...
@@ -47,13 +59,15 @@
...
@@ -47,13 +59,15 @@
<thead>
<thead>
<tr>
<tr>
<th
class=
"text-center"
>
组名
</th>
<th
class=
"text-center"
>
组名
</th>
<th
class=
"text-center"
>
类型
</th>
<th
class=
"text-center"
>
<span
class=
"text-muted text-xs block"
>
类型
</span>
</th>
<th
class=
"text-center"
>
成员数量
</th>
<th
class=
"text-center"
>
成员数量
</th>
<th
class=
"text-center"
>
授权数量
</th>
<th
class=
"text-center"
>
授权数量
</th>
<th
class=
"text-center"
>
操作
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody
id=
"perm_edit"
>
{% for group in contacts.object_list %}
{% for group in contacts.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ group.name }}
</td>
<td
class=
"text-center"
>
{{ group.name }}
</td>
...
@@ -61,7 +75,7 @@
...
@@ -61,7 +75,7 @@
<td
class=
"text-center"
>
{{ group.id|member_count }}
</td>
<td
class=
"text-center"
>
{{ group.id|member_count }}
</td>
<td
class=
"text-center"
>
{{ group.id|perm_count }}
</td>
<td
class=
"text-center"
>
{{ group.id|perm_count }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"../perm_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
title=
"[ {{ group.name }} 授权详情 ]"
href=
"../perm_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"../perm_edit/?id={{ group.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../perm_edit/?id={{ group.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../perm_del/?id={{ group.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
<a
href=
"../perm_del/?id={{ group.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</td>
...
@@ -120,7 +134,7 @@
...
@@ -120,7 +134,7 @@
<th
class=
"text-center"
>
操作
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody
id=
"perm_list"
>
{% for user in contacts2.object_list %}
{% for user in contacts2.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
...
@@ -128,7 +142,7 @@
...
@@ -128,7 +142,7 @@
<td
class=
"text-center"
>
{{ user.username | groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.username | groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.id | perm_asset_count }}
</td>
<td
class=
"text-center"
>
{{ user.id | perm_asset_count }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"../perm_asset_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
title=
"[ {{ user.name }} ] 授权详情"
href=
"../perm_asset_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
</td>
</td>
</tr>
</tr>
{% endfor %}
{% endfor %}
...
@@ -192,6 +206,29 @@
...
@@ -192,6 +206,29 @@
$
(
document
).
ready
(
function
(){
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
});
});
$
(
document
).
ready
(
function
(){
$
(
'#search_btn'
).
click
(
function
(){
if
(
$
(
'#tab2'
).
attr
(
'class'
)
==
'active'
){
var
tab
=
'tab2'
}
else
{
var
tab
=
'tab1'
}
var
search
=
$
(
'#search_input'
).
val
()
$
.
post
(
'/jperm/perm_list_ajax/'
,
{
'tab'
:
tab
,
'search'
:
search
},
function
(
data
){
if
(
$
(
'#tab2'
).
attr
(
'class'
)
==
'active'
){
$
(
'#tab-2'
).
html
(
data
)
}
else
{
$
(
'#tab-1'
).
html
(
data
)
}
})
})
})
</script>
</script>
{% endblock %}
{% endblock %}
\ No newline at end of file
templates/jperm/perm_list_ajax.html
0 → 100644
View file @
433974d7
{% load mytags %}
{% ifequal tab 'tab1' %}
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
组名
</th>
<th
class=
"text-center"
>
<span
class=
"text-muted text-xs block"
>
类型
</span>
</th>
<th
class=
"text-center"
>
成员数量
</th>
<th
class=
"text-center"
>
授权数量
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody
id=
"perm_edit"
>
{% for group in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ group.name }}
</td>
<td
class=
"text-center"
>
{{ group.type|group_type_to_str }}
</td>
<td
class=
"text-center"
>
{{ group.id|member_count }}
</td>
<td
class=
"text-center"
>
{{ group.id|perm_count }}
</td>
<td
class=
"text-center"
>
<a
title=
"[ {{ group.name }} ] 授权详情"
href=
"../perm_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"../perm_edit/?id={{ group.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../perm_del/?id={{ group.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries
</div>
</div>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_paginate paging_simple_numbers"
id=
"editable_paginate"
>
<ul
class=
"pagination"
style=
"margin-top: 0; float: right"
>
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts.previous_page_number }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% for page in p.page_range %}
{% ifequal offset1 page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts.next_page_number }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
{% else %}
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
用户
</th>
<th
class=
"text-center"
>
角色
</th>
<th
class=
"text-center"
>
属组
</th>
<th
class=
"text-center"
>
主机数量
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody
id=
"perm_list"
>
{% for user in contacts2.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.id | get_role }}
</td>
<td
class=
"text-center"
>
{{ user.username | groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.id | perm_asset_count }}
</td>
<td
class=
"text-center"
>
<a
title=
"{{ user.name }} ] 授权详情"
href=
"../perm_asset_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
Showing {{ contacts2.start_index }} to {{ contacts2.end_index }} of {{ p2.count }} entries
</div>
</div>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_paginate paging_simple_numbers"
id=
"editable_paginate"
>
<ul
class=
"pagination"
style=
"margin-top: 0; float: right"
>
{% if contacts2.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts2.previous_page_number }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% for page in p2.page_range %}
{% ifequal offset1 page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% if contacts2.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts2.next_page_number }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
{% endifequal %}
\ No newline at end of file
templates/juser/group_add.html
View file @
433974d7
...
@@ -34,12 +34,6 @@
...
@@ -34,12 +34,6 @@
{% 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 hidden"
>
<label
for=
"group_id"
class=
"col-sm-2 control-label"
>
ID
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
id=
"group_id"
name=
"group_id"
placeholder=
"Group name"
type=
"text"
class=
"form-control"
value=
"{{ group_id }}"
>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
组名
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
组名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
...
@@ -50,9 +44,9 @@
...
@@ -50,9 +44,9 @@
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"group_type"
class=
"col-sm-2 control-label"
>
类型
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"group_type"
class=
"col-sm-2 control-label"
>
类型
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"group_type"
name=
"group_type"
class=
"form-control m-b"
>
<select
id=
"group_type"
name=
"group_type"
class=
"form-control m-b"
onchange=
"change_type(this.value)"
>
{% for t, type_name in group_types.items %}
{% for t, type_name in group_types.items %}
{% ifequal t group_type %}
{% ifequal t group_type
_select
%}
<option
value=
"{{ t }}"
selected
>
{{ type_name }}
</option>
<option
value=
"{{ t }}"
selected
>
{{ type_name }}
</option>
{% else %}
{% else %}
<option
value=
"{{ t }}"
>
{{ type_name }}
</option>
<option
value=
"{{ t }}"
>
{{ type_name }}
</option>
...
@@ -63,7 +57,7 @@
...
@@ -63,7 +57,7 @@
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"
group
s"
class=
"col-lg-2 control-label"
>
用户
</label>
<label
for=
"
user
s"
class=
"col-lg-2 control-label"
>
用户
</label>
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<select
id=
"users"
name=
"users"
size=
"12"
class=
"form-control m-b"
multiple
>
<select
id=
"users"
name=
"users"
size=
"12"
class=
"form-control m-b"
multiple
>
{% for user in users %}
{% for user in users %}
...
@@ -80,9 +74,6 @@
...
@@ -80,9 +74,6 @@
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<div>
<div>
<select
id=
"users_selected"
name=
"users_selected"
class=
"form-control m-b"
size=
"12"
multiple
>
<select
id=
"users_selected"
name=
"users_selected"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for user in users_selected %}
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
{% endfor %}
</select>
</select>
</div>
</div>
</div>
</div>
...
@@ -98,8 +89,8 @@
...
@@ -98,8 +89,8 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"
submi
t"
>
取消
</button>
<button
class=
"btn btn-white"
type=
"
rese
t"
>
取消
</button>
<button
class=
"btn btn-primary"
type=
"submit"
onclick=
"javascript: (function(){$('#users_selected option').each(function(){$(this).prop('selected', true)})})()
"
>
确认保存
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit
"
>
确认保存
</button>
</div>
</div>
</div>
</div>
</form>
</form>
...
@@ -131,5 +122,23 @@ $('#groupForm').validator({
...
@@ -131,5 +122,23 @@ $('#groupForm').validator({
form
.
submit
();
form
.
submit
();
}
}
});
});
function
change_type
(
type
){
$
.
post
(
'/juser/group_add_ajax/'
,
{
'type'
:
type
},
function
(
data
){
$
(
'#users'
).
html
(
data
)
})
}
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#users_selected option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
})
})
</script>
</script>
{% endblock %}
{% endblock %}
\ No newline at end of file
templates/juser/group_add_ajax.html
0 → 100644
View file @
433974d7
{% for user in users %}
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
{% endfor %}
templates/juser/group_edit.html
0 → 100644
View file @
433974d7
{% 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>
Fill group 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"
>
<form
id=
"groupForm"
method=
"post"
class=
"form-horizontal"
action=
""
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"form-group"
>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
组名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
id=
"group_name"
name=
"group_name"
placeholder=
"Group name"
type=
"text"
class=
"form-control"
value=
"{{ group_name }}"
>
<input
id=
"group_id"
name=
"group_id"
type=
"text"
class=
"form-control"
value=
"{{ group.id }}"
style=
"display: none"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"group_type"
class=
"col-sm-2 control-label"
>
类型
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
value=
"{{ group_type|group_type_to_str }}"
readonly
>
<input
name=
"group_type"
class=
"form-control"
id=
"group_type"
value=
"{{ group_type }}"
style=
"display: none"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"users"
class=
"col-lg-2 control-label"
>
用户
</label>
<div
class=
"col-sm-3"
>
<select
id=
"users"
name=
"users"
size=
"12"
class=
"form-control m-b"
multiple
>
{% for user in users %}
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
{% endfor %}
</select>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('users', 'users_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('users_selected', 'users')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div>
<select
id=
"users_selected"
name=
"users_selected"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for user in users_selected %}
<option
value=
"{{ user.id }}"
>
{{ user.name }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"comment"
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
>
<input
id=
"comment"
name=
"comment"
placeholder=
"Comment"
type=
"text"
class=
"form-control"
value=
"{{ comment }}"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
取消
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
确认保存
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
'#groupForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"group_name"
:
{
rule
:
"required"
,
tip
:
"输入组名"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"group_type"
:
{
rule
:
"checked"
,
tip
:
"选择组类型"
,
ok
:
""
,
msg
:
{
required
:
"至少选择一个组!"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#users_selected option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
})
})
</script>
{% endblock %}
\ No newline at end of file
templates/juser/group_list.html
View file @
433974d7
...
@@ -53,7 +53,7 @@
...
@@ -53,7 +53,7 @@
<td
class=
"text-center"
>
{{ group.id|member_count }}
</td>
<td
class=
"text-center"
>
{{ group.id|member_count }}
</td>
<td
class=
"text-center"
>
{{ group.comment }}
</td>
<td
class=
"text-center"
>
{{ group.comment }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"../group_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
title=
"[ {{ group.name }} ] 成员信息"
href=
"../group_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
href=
"../group_edit/?id={{ group.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../group_edit/?id={{ group.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../group_del/?id={{ group.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
<a
href=
"../group_del/?id={{ group.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</td>
...
...
templates/juser/user_add.html
View file @
433974d7
...
@@ -71,21 +71,36 @@
...
@@ -71,21 +71,36 @@
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"
groups"
class=
"col-lg-2 control-label"
>
属组
<span
class=
"red-fonts"
>
*
</span></label>
<label
for=
"
manage_group"
class=
"col-lg-2 control-label"
>
部门
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<div
class=
"col-sm-8"
>
<select
id=
"groups"
name=
"groups"
class=
"form-control m-b"
multiple
size=
"10"
>
<select
id=
"manage_group"
name=
"manage_group"
class=
"form-control m-b"
>
{% for group in all_group %}
{% for group in manage_groups %}
{% ifequal group.id manage_group_id %}
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
</option>
{% else %}
<option
value=
"{{ group.id }}"
>
{{ group.name }}
</option>
{% endifequal %}
{% endfor %}
</select>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"groups"
class=
"col-lg-2 control-label"
>
用户组
</label>
<div
class=
"col-sm-8"
>
<select
id=
"groups"
name=
"groups"
class=
"form-control m-b"
multiple
size=
"12"
>
{% for group in auth_groups %}
{% if groups_str %}
{% if groups_str %}
{% if group.id|int2str in groups_str %}
{% if group.id|int2str in groups_str %}
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
--- {{ group.type|group_type_to_str }}
</option>
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
</option>
{% else %}
{% else %}
<option
value=
"{{ group.id }}"
>
{{ group.name }}
--- {{ group.type|group_type_to_str }}
</option>
<option
value=
"{{ group.id }}"
>
{{ group.name }}
</option>
{% endif %}
{% endif %}
{% else %}
{% else %}
{% if forloop.first %}
{% if forloop.first %}
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
--- {{ group.type|group_type_to_str }}
</option>
<option
value=
"{{ group.id }}"
selected
>
{{ group.name }}
</option>
{% else %}
{% else %}
<option
value=
"{{ group.id }}"
>
{{ group.name }}
--- {{ group.type|group_type_to_str }}
</option>
<option
value=
"{{ group.id }}"
>
{{ group.name }}
</option>
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
...
@@ -179,11 +194,11 @@ $('#userForm').validator({
...
@@ -179,11 +194,11 @@ $('#userForm').validator({
ok
:
""
,
ok
:
""
,
msg
:
{
required
:
"必须填写"
}
msg
:
{
required
:
"必须填写"
}
},
},
"
groups
"
:
{
"
manage_group
"
:
{
rule
:
"checked"
,
rule
:
"checked"
,
tip
:
"选择
用户组
"
,
tip
:
"选择
部门
"
,
ok
:
""
,
ok
:
""
,
msg
:
{
checked
:
"至少选择一个
组
"
}
msg
:
{
checked
:
"至少选择一个
部门
"
}
},
},
"name"
:
{
"name"
:
{
rule
:
"required"
,
rule
:
"required"
,
...
...
templates/juser/user_list.html
View file @
433974d7
...
@@ -42,7 +42,8 @@
...
@@ -42,7 +42,8 @@
<th
class=
"text-center"
>
ID
</th>
<th
class=
"text-center"
>
ID
</th>
<th
class=
"text-center"
>
用户名
</th>
<th
class=
"text-center"
>
用户名
</th>
<th
class=
"text-center"
>
姓名
</th>
<th
class=
"text-center"
>
姓名
</th>
<th
class=
"text-center"
>
属组
</th>
<th
class=
"text-center"
>
部门
</th>
<th
class=
"text-center"
>
用户组
</th>
<th
class=
"text-center"
>
角色
</th>
<th
class=
"text-center"
>
角色
</th>
<th
class=
"text-center"
>
激活
</th>
<th
class=
"text-center"
>
激活
</th>
<th
class=
"text-center"
>
操作
</th>
<th
class=
"text-center"
>
操作
</th>
...
@@ -57,11 +58,12 @@
...
@@ -57,11 +58,12 @@
<td
class=
"text-center"
>
{{ user.id }}
</td>
<td
class=
"text-center"
>
{{ user.id }}
</td>
<td
class=
"text-center"
>
{{ user.username }}
</td>
<td
class=
"text-center"
>
{{ user.username }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.name }}
</td>
<td
class=
"text-center"
>
{{ user.username|group_manage_str }}
</td>
<td
class=
"text-center"
>
{{ user.username|groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.username|groups_str }}
</td>
<td
class=
"text-center"
>
{{ user.id|get_role }}
</td>
<td
class=
"text-center"
>
{{ user.id|get_role }}
</td>
<td
class=
"text-center"
>
{{ user.is_active|bool2str }}
</td>
<td
class=
"text-center"
>
{{ user.is_active|bool2str }}
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<a
href=
"../user_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
title=
"[ {{ user.name }} ] 详情"
href=
"../user_detail/?id={{ user.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"../user_edit/?id={{ user.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../user_edit/?id={{ user.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../user_del/?id={{ user.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
<a
href=
"../user_del/?id={{ user.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</td>
...
@@ -113,10 +115,5 @@
...
@@ -113,10 +115,5 @@
</div>
</div>
</div>
</div>
<script>
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
});
</script>
{% endblock %}
{% endblock %}
templates/nav.html
View file @
433974d7
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
<li
id=
"juser"
>
<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
id=
"user_list"
><a
href=
"/juser/user_list/"
>
查看用户
</a></li>
<li
id=
"user_list"
><a
href=
"/juser/user_list/"
>
查看用户
<
span
class=
"label label-primary pull-right"
>
16/24
</span><
/a></li>
<li
id=
"user_add"
><a
href=
"/juser/user_add/"
>
添加用户
</a></li>
<li
id=
"user_add"
><a
href=
"/juser/user_add/"
>
添加用户
</a></li>
<li
id=
"group_list"
><a
href=
"/juser/group_list/"
>
查看属组
</a></li>
<li
id=
"group_list"
><a
href=
"/juser/group_list/"
>
查看属组
</a></li>
<li
id=
"group_add"
><a
href=
"/juser/group_add/"
>
添加属组
</a></li>
<li
id=
"group_add"
><a
href=
"/juser/group_add/"
>
添加属组
</a></li>
...
@@ -39,7 +39,7 @@
...
@@ -39,7 +39,7 @@
<li
id=
"jlog"
>
<li
id=
"jlog"
>
<a
href=
"#"
><i
class=
"fa fa-files-o"
></i>
<span
class=
"nav-label"
>
日志审计
</span><span
class=
"fa arrow"
></span></a>
<a
href=
"#"
><i
class=
"fa fa-files-o"
></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
id=
"log_list"
><a
href=
"/jlog
b
/"
>
查看日志
</a></li>
<li
id=
"log_list"
><a
href=
"/jlog/"
>
查看日志
</a></li>
<li
id=
"log_detail"
><a
href=
"/jlog/log_detail/"
>
日志分析
</a></li>
<li
id=
"log_detail"
><a
href=
"/jlog/log_detail/"
>
日志分析
</a></li>
</ul>
</ul>
</li>
</li>
...
...
templates/test.html
0 → 100644
View file @
433974d7
<html>
<head>
<meta
charset=
'utf8'
>
<script
src=
"http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"
></script>
<style
type=
"text/css"
>
.blue
{
color
:
blue
;
}
</style>
{#
<script>
#
}
{
#
$
(
'html'
).
ajaxSend
(
function
(
event
,
xhr
,
settings
)
{
#
}
{
#
function
getCookie
(
name
)
{
#
}
{
#
var
cookieValue
=
null
;
#
}
{
#
if
(
document
.
cookie
&&
document
.
cookie
!=
''
)
{
#
}
{
#
var
cookies
=
document
.
cookie
.
split
(
';'
);
#
}
{
#
for
(
var
i
=
0
;
i
<
cookies
.
length
;
i
++
)
{
#
}
{
#
var
cookie
=
jQuery
.
trim
(
cookies
[
i
]);
#
}
{
#
// Does this cookie string begin with the name we want?#}
{
#
if
(
cookie
.
substring
(
0
,
name
.
length
+
1
)
==
(
name
+
'='
))
{
#
}
{
#
cookieValue
=
decodeURIComponent
(
cookie
.
substring
(
name
.
length
+
1
));
#
}
{
#
break
;
#
}
{
#
}
#
}
{
#
}
#
}
{
#
}
#
}
{
#
return
cookieValue
;
#
}
{
#
}
#
}
{
#
if
(
!
(
/^http:.*/
.
test
(
settings
.
url
)
||
/^https:.*/
.
test
(
settings
.
url
)))
{
#
}
{
#
// Only send the token to relative URLs i.e. locally.#}
{
#
xhr
.
setRequestHeader
(
"X-CSRFToken"
,
getCookie
(
'csrftoken'
));
#
}
{
#
}
#
}
{
#
});
#
}
{
#
</script>
#}
<script>
$
(
document
).
ready
(
function
(){
$
(
"#btn1"
).
click
(
function
(){
$
(
"#test"
).
text
(
function
(
i
,
origText
){
return
"Old text: "
+
origText
+
"New text: Hllo"
+
i
})
});
$
(
"#btn2"
).
click
(
function
(){
$
.
post
(
'/test_ajax/'
,
{
'name'
:
'join'
,
'age'
:
10
},
function
(
data
,
status
){
$
(
'#btn1'
).
text
(
data
)
})
});
$
(
"#btn3"
).
click
(
function
(){
$
(
"p"
).
toggleClass
(
'blue'
)
// $("p").addClass('blue')
// $("p").before("Some thine")
});
})
</script>
</head>
<body>
<p
id=
"test"
class=
"blue"
>
这是段落中的
<b>
粗体
</b>
文本。
<p><span>
hello
</span></p>
</p>
<!-- <input type="text" id="test2" name="nameaaaaaaaaaa" value="米老鼠"> -->
<button
id=
"btn1"
>
显示文本
</button>
<button
id=
"btn2"
>
显示 HTML
</button>
<button
id=
"btn3"
>
显示 value
</button>
</body>
</html>
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