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
d6171f7f
Commit
d6171f7f
authored
Apr 18, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
9acba2dd
75e1ea7f
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
648 additions
and
368 deletions
+648
-368
views.py
jasset/views.py
+161
-126
views.py
jlog/views.py
+18
-9
views.py
jperm/views.py
+35
-25
views.py
jumpserver/views.py
+24
-83
base.js
static/js/base.js
+4
-1
group_add.html
templates/jasset/group_add.html
+78
-34
group_detail.html
templates/jasset/group_detail.html
+72
-1
group_edit.html
templates/jasset/group_edit.html
+100
-37
idc_detail.html
templates/jasset/idc_detail.html
+72
-1
perm_apply.html
templates/jperm/perm_apply.html
+84
-32
nav.html
templates/nav.html
+0
-19
No files found.
jasset/views.py
View file @
d6171f7f
...
@@ -8,7 +8,6 @@ from django.shortcuts import render_to_response
...
@@ -8,7 +8,6 @@ from django.shortcuts import render_to_response
from
jasset.models
import
IDC
,
Asset
,
BisGroup
,
AssetAlias
from
jasset.models
import
IDC
,
Asset
,
BisGroup
,
AssetAlias
from
jperm.models
import
Perm
,
SudoPerm
from
jperm.models
import
Perm
,
SudoPerm
from
django.shortcuts
import
redirect
from
jumpserver.api
import
*
from
jumpserver.api
import
*
cryptor
=
PyCrypt
(
KEY
)
cryptor
=
PyCrypt
(
KEY
)
...
@@ -18,12 +17,17 @@ class RaiseError(Exception):
...
@@ -18,12 +17,17 @@ class RaiseError(Exception):
pass
pass
def
my_render
(
template
,
data
,
request
):
return
render_to_response
(
template
,
data
,
context_instance
=
RequestContext
(
request
))
def
httperror
(
request
,
emg
):
def
httperror
(
request
,
emg
):
message
=
emg
message
=
emg
return
render_to_response
(
'error.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'error.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
def
get_host_groups
(
groups
):
def
get_host_groups
(
groups
):
""" 获取主机所属的组类 """
ret
=
[]
ret
=
[]
for
group_id
in
groups
:
for
group_id
in
groups
:
group
=
BisGroup
.
objects
.
filter
(
id
=
group_id
)
group
=
BisGroup
.
objects
.
filter
(
id
=
group_id
)
...
@@ -34,6 +38,7 @@ def get_host_groups(groups):
...
@@ -34,6 +38,7 @@ def get_host_groups(groups):
def
get_host_depts
(
depts
):
def
get_host_depts
(
depts
):
""" 获取主机所属的部门类 """
ret
=
[]
ret
=
[]
for
dept_id
in
depts
:
for
dept_id
in
depts
:
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
...
@@ -43,8 +48,9 @@ def get_host_depts(depts):
...
@@ -43,8 +48,9 @@ def get_host_depts(depts):
return
ret
return
ret
def
db_host_insert
(
ip
,
port
,
idc
,
jtype
,
group
,
dept
,
active
,
comment
,
username
=
''
,
password
=
''
):
def
db_host_insert
(
host_info
,
username
=
''
,
password
=
''
):
""" 添加主机时数据库操作函数 """
""" 添加主机时数据库操作函数 """
ip
,
port
,
idc
,
jtype
,
group
,
dept
,
active
,
comment
=
host_info
idc
=
IDC
.
objects
.
filter
(
id
=
idc
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc
)
if
idc
:
if
idc
:
idc
=
idc
[
0
]
idc
=
idc
[
0
]
...
@@ -72,10 +78,11 @@ def db_host_insert(ip, port, idc, jtype, group, dept, active, comment, username=
...
@@ -72,10 +78,11 @@ def db_host_insert(ip, port, idc, jtype, group, dept, active, comment, username=
a
.
bis_group
=
groups
a
.
bis_group
=
groups
a
.
dept
=
depts
a
.
dept
=
depts
a
.
save
()
a
.
save
()
def
db_host_update
(
ip
,
port
,
idc
,
jtype
,
group
,
dept
,
active
,
comment
,
host
,
username
=
''
,
password
=
''
):
def
db_host_update
(
host_info
,
username
=
''
,
password
=
''
):
""" 修改主机时数据库操作函数 """
""" 修改主机时数据库操作函数 """
ip
,
port
,
idc
,
jtype
,
group
,
dept
,
active
,
comment
,
host
=
host_info
idc
=
IDC
.
objects
.
filter
(
id
=
idc
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc
)
if
idc
:
if
idc
:
idc
=
idc
[
0
]
idc
=
idc
[
0
]
...
@@ -89,10 +96,8 @@ def db_host_update(ip, port, idc, jtype, group, dept, active, comment, host, use
...
@@ -89,10 +96,8 @@ def db_host_update(ip, port, idc, jtype, group, dept, active, comment, host, use
host
.
comment
=
comment
host
.
comment
=
comment
if
jtype
==
'M'
:
if
jtype
==
'M'
:
print
password
,
host
.
password
if
password
!=
host
.
password
:
if
password
!=
host
.
password
:
password
=
cryptor
.
encrypt
(
password
)
password
=
cryptor
.
encrypt
(
password
)
print
password
host
.
password
=
password
host
.
password
=
password
host
.
username
=
username
host
.
username
=
username
host
.
password
=
password
host
.
password
=
password
...
@@ -102,8 +107,9 @@ def db_host_update(ip, port, idc, jtype, group, dept, active, comment, host, use
...
@@ -102,8 +107,9 @@ def db_host_update(ip, port, idc, jtype, group, dept, active, comment, host, use
host
.
save
()
host
.
save
()
def
batch_host_edit
(
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
j_user
=
''
,
j_password
=
''
):
def
batch_host_edit
(
host_info
,
j_user
=
''
,
j_password
=
''
):
""" 批量修改主机函数 """
""" 批量修改主机函数 """
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
=
host_info
groups
,
depts
=
[],
[]
groups
,
depts
=
[],
[]
is_active
=
{
u'是'
:
'1'
,
u'否'
:
'2'
}
is_active
=
{
u'是'
:
'1'
,
u'否'
:
'2'
}
login_types
=
{
'LDAP'
:
'L'
,
'MAP'
:
'M'
}
login_types
=
{
'LDAP'
:
'L'
,
'MAP'
:
'M'
}
...
@@ -140,8 +146,37 @@ def batch_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active
...
@@ -140,8 +146,37 @@ def batch_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active
a
.
save
()
a
.
save
()
def
db_host_delete
(
request
,
host_id
):
""" 删除主机操作 """
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset
=
[
host_id
]):
return
httperror
(
request
,
'删除失败, 您无权删除!'
)
asset
=
Asset
.
objects
.
filter
(
id
=
host_id
)
if
asset
:
asset
.
delete
()
else
:
return
httperror
(
request
,
'删除失败, 没有此主机!'
)
def
db_idc_delete
(
request
,
idc_id
):
""" 删除IDC操作 """
if
idc_id
==
1
:
return
httperror
(
request
,
'删除失败, 默认IDC不能删除!'
)
default_idc
=
IDC
.
objects
.
get
(
id
=
1
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
if
idc
:
idc_class
=
idc
.
first
()
idc_class
.
asset_set
.
update
(
idc
=
default_idc
)
idc
.
delete
()
else
:
return
httperror
(
request
,
'删除失败, 没有这个IDC!'
)
@require_admin
@require_admin
def
host_add
(
request
):
def
host_add
(
request
):
""" 添加主机 """
header_title
,
path1
,
path2
=
u'添加主机'
,
u'资产管理'
,
u'添加主机'
header_title
,
path1
,
path2
=
u'添加主机'
,
u'资产管理'
,
u'添加主机'
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
eidc
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
eidc
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
...
@@ -161,34 +196,34 @@ def host_add(request):
...
@@ -161,34 +196,34 @@ def host_add(request):
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_dept
=
request
.
POST
.
getlist
(
'j_dept'
)
j_dept
=
request
.
POST
.
getlist
(
'j_dept'
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
]
if
is_group_admin
(
request
)
and
not
verify
(
request
,
asset_group
=
j_group
,
edept
=
j_dept
):
if
is_group_admin
(
request
)
and
not
verify
(
request
,
asset_group
=
j_group
,
edept
=
j_dept
):
emg
=
u'添加失败,您无权操作!'
return
httperror
(
request
,
u'添加失败,您无权操作!'
)
return
render_to_response
(
'jasset/host_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
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.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
my_render
(
'jasset/host_add.html'
,
locals
(),
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
=
request
.
POST
.
get
(
'j_password'
,
''
)
j_password
=
request
.
POST
.
get
(
'j_password'
,
''
)
db_host_insert
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
j_user
,
j_password
)
db_host_insert
(
host_info
,
j_user
,
j_password
)
else
:
else
:
db_host_insert
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
)
db_host_insert
(
host_info
)
smg
=
u'主机
%
s 添加成功'
%
j_ip
smg
=
u'主机
%
s 添加成功'
%
j_ip
return
render_to_response
(
'jasset/host_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_add.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
host_add_batch
(
request
):
def
host_add_batch
(
request
):
""" 批量添加主机 """
header_title
,
path1
,
path2
=
u'批量添加主机'
,
u'资产管理'
,
u'批量添加主机'
header_title
,
path1
,
path2
=
u'批量添加主机'
,
u'资产管理'
,
u'批量添加主机'
login_types
=
{
'LDAP'
:
'L'
,
'MAP'
:
'M'
}
login_types
=
{
'LDAP'
:
'L'
,
'MAP'
:
'M'
}
active_types
=
{
'激活'
:
1
,
'禁用'
:
0
}
active_types
=
{
'激活'
:
1
,
'禁用'
:
0
}
dept_id
=
get_user_dept
(
request
)
dept_id
=
get_user_dept
(
request
)
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
'
)
print
multi_hosts
for
host
in
multi_hosts
:
for
host
in
multi_hosts
:
if
host
==
''
:
if
host
==
''
:
break
break
...
@@ -201,43 +236,44 @@ def host_add_batch(request):
...
@@ -201,43 +236,44 @@ def host_add_batch(request):
idc
=
IDC
.
objects
.
filter
(
name
=
j_idc
)
idc
=
IDC
.
objects
.
filter
(
name
=
j_idc
)
if
idc
:
if
idc
:
j_idc
=
idc
[
0
]
.
id
j_idc
=
idc
[
0
]
.
id
else
:
return
httperror
(
request
,
'添加失败, 没有
%
s这个IDC'
%
j_idc
)
group_ids
,
dept_ids
=
[],
[]
group_ids
,
dept_ids
=
[],
[]
for
group_name
in
j_group
:
for
group_name
in
j_group
:
group
=
BisGroup
.
objects
.
filter
(
name
=
group_name
)
group
=
BisGroup
.
objects
.
filter
(
name
=
group_name
)
if
group
:
if
group
:
group_id
=
group
[
0
]
.
id
group_id
=
group
[
0
]
.
id
else
:
return
httperror
(
request
,
'添加失败, 没有
%
s这个主机组'
%
group_name
)
group_ids
.
append
(
group_id
)
group_ids
.
append
(
group_id
)
for
dept_name
in
j_dept
:
for
dept_name
in
j_dept
:
dept
=
DEPT
.
objects
.
filter
(
name
=
dept_name
)
dept
=
DEPT
.
objects
.
filter
(
name
=
dept_name
)
if
dept
:
if
dept
:
dept_id
=
dept
[
0
]
.
id
dept_id
=
dept
[
0
]
.
id
else
:
return
httperror
(
request
,
'添加失败, 没有
%
s这个部门'
%
dept_name
)
dept_ids
.
append
(
dept_id
)
dept_ids
.
append
(
dept_id
)
if
is_group_admin
(
request
)
and
not
verify
(
request
,
asset_group
=
group_ids
,
edept
=
dept_ids
):
if
is_group_admin
(
request
)
and
not
verify
(
request
,
asset_group
=
group_ids
,
edept
=
dept_ids
):
return
httperror
(
request
,
'添加失败,
您无权添加!'
)
return
httperror
(
request
,
'添加失败,
没有
%
s这个主机组'
%
group_name
)
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
if
Asset
.
objects
.
filter
(
ip
=
str
(
j_ip
)):
emg
=
u'该IP
%
s 已存在!'
%
j_ip
return
httperror
(
request
,
'添加失败, 改IP
%
s已存在'
%
j_ip
)
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
# if j_type == 'M':
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
group_ids
,
dept_ids
,
j_active
,
j_comment
]
# j_user = request.POST.get('j_user')
db_host_insert
(
host_info
)
# j_password = request.POST.get('j_password')
# db_host_insert(j_ip, j_port, j_idc, j_type, group_ids, dept_ids, j_active, j_comment)
# else:
db_host_insert
(
j_ip
,
j_port
,
j_idc
,
j_type
,
group_ids
,
dept_ids
,
j_active
,
j_comment
)
smg
=
u'批量添加添加成功'
smg
=
u'批量添加添加成功'
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_add_multi.html'
,
locals
(),
request
)
return
render_to_response
(
'jasset/host_add_multi.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_add_multi.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
host_edit_batch
(
request
):
def
host_edit_batch
(
request
):
""" 批量修改主机 """
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
len_table
=
request
.
POST
.
get
(
'len_table'
)
len_table
=
request
.
POST
.
get
(
'len_table'
)
for
i
in
range
(
int
(
len_table
)):
for
i
in
range
(
int
(
len_table
)):
...
@@ -261,22 +297,23 @@ def host_edit_batch(request):
...
@@ -261,22 +297,23 @@ def host_edit_batch(request):
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
()
batch_host_edit
(
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
)
host_info
=
[
j_id
,
j_ip
,
j_idc
,
j_port
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
]
batch_host_edit
(
host_info
)
return
render_to_response
(
'jasset/host_list.html
'
)
return
HttpResponseRedirect
(
'/jasset/host_list/
'
)
@require_login
@require_login
def
host_edit_common_batch
(
request
):
def
host_edit_common_batch
(
request
):
user_id
=
request
.
session
.
get
(
'user_id'
,
''
)
""" 普通用户批量修改主机别名 """
u
=
User
.
objects
.
get
(
id
=
user_id
)
u
=
get_session_user_info
(
request
)[
2
]
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
len_table
=
request
.
POST
.
get
(
'len_table'
)
len_table
=
request
.
POST
.
get
(
'len_table'
)
for
i
in
range
(
int
(
len_table
)):
for
i
in
range
(
int
(
len_table
)):
j_id
=
"editable["
+
str
(
i
)
+
"][j_id]"
j_id
=
"editable["
+
str
(
i
)
+
"][j_id]"
j_alias
=
"editable["
+
str
(
i
)
+
"][j_alias]"
j_alias
=
"editable["
+
str
(
i
)
+
"][j_alias]"
j_id
=
request
.
POST
.
get
(
j_id
)
.
strip
()
j_id
=
request
.
POST
.
get
(
j_id
,
''
)
.
strip
()
j_alias
=
request
.
POST
.
get
(
j_alias
)
.
strip
()
j_alias
=
request
.
POST
.
get
(
j_alias
,
''
)
.
strip
()
a
=
Asset
.
objects
.
get
(
id
=
j_id
)
a
=
Asset
.
objects
.
get
(
id
=
j_id
)
asset_alias
=
AssetAlias
.
objects
.
filter
(
user
=
u
,
host
=
a
)
asset_alias
=
AssetAlias
.
objects
.
filter
(
user
=
u
,
host
=
a
)
if
asset_alias
:
if
asset_alias
:
...
@@ -285,22 +322,29 @@ def host_edit_common_batch(request):
...
@@ -285,22 +322,29 @@ def host_edit_common_batch(request):
asset_alias
.
save
()
asset_alias
.
save
()
else
:
else
:
AssetAlias
.
objects
.
create
(
user
=
u
,
host
=
a
,
alias
=
j_alias
)
AssetAlias
.
objects
.
create
(
user
=
u
,
host
=
a
,
alias
=
j_alias
)
return
render_to_response
(
'jasset/host_list_common.html'
)
return
my_render
(
'jasset/host_list_common.html'
)
@require_login
@require_login
def
host_list
(
request
):
def
host_list
(
request
):
""" 列出主机 """
header_title
,
path1
,
path2
=
u'查看主机'
,
u'资产管理'
,
u'查看主机'
header_title
,
path1
,
path2
=
u'查看主机'
,
u'资产管理'
,
u'查看主机'
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
dept_id
=
get_
user_dept
(
request
)
dept_id
=
get_
session_user_info
(
request
)[
3
]
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
did
=
request
.
GET
.
get
(
'did'
,
''
)
did
=
request
.
GET
.
get
(
'did'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
sid
=
request
.
GET
.
get
(
'sid'
,
''
)
sid
=
request
.
GET
.
get
(
'sid'
,
''
)
post_all
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
post_keyword_all
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
if
did
:
if
did
:
dept
=
DEPT
.
objects
.
get
(
id
=
did
)
dept
=
DEPT
.
objects
.
get
(
id
=
did
)
posts
=
dept
.
asset_set
.
all
()
posts
=
dept
.
asset_set
.
all
()
return
render_to_response
(
'jasset/host_list_nop.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_list_nop.html'
,
locals
(),
request
)
elif
gid
:
elif
gid
:
posts
=
[]
posts
=
[]
...
@@ -310,7 +354,7 @@ def host_list(request):
...
@@ -310,7 +354,7 @@ def host_list(request):
for
post
in
perm
.
asset_group
.
asset_set
.
all
():
for
post
in
perm
.
asset_group
.
asset_set
.
all
():
posts
.
append
(
post
)
posts
.
append
(
post
)
posts
=
list
(
set
(
posts
))
posts
=
list
(
set
(
posts
))
return
render_to_response
(
'jasset/host_list_nop.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_list_nop.html'
,
locals
(),
request
)
elif
sid
:
elif
sid
:
posts
=
[]
posts
=
[]
...
@@ -320,63 +364,52 @@ def host_list(request):
...
@@ -320,63 +364,52 @@ def host_list(request):
for
post
in
perm
.
asset_group
.
asset_set
.
all
():
for
post
in
perm
.
asset_group
.
asset_set
.
all
():
posts
.
append
(
post
)
posts
.
append
(
post
)
posts
=
list
(
set
(
posts
))
posts
=
list
(
set
(
posts
))
return
render_to_response
(
'jasset/host_list_nop.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_list_nop.html'
,
locals
(),
request
)
else
:
else
:
if
is_super_user
(
request
):
if
is_super_user
(
request
):
if
keyword
:
if
keyword
:
posts
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
posts
=
post_keyword_all
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
else
:
else
:
posts
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
posts
=
post_all
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/host_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_list.html'
,
locals
(),
request
)
elif
is_group_admin
(
request
):
elif
is_group_admin
(
request
):
if
keyword
:
if
keyword
:
posts
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
posts
=
post_keyword_all
.
filter
(
dept
=
dept
)
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
filter
(
dept
=
dept
)
.
distinct
()
.
order_by
(
'ip'
)
else
:
else
:
posts
=
Asset
.
objects
.
all
()
.
filter
(
dept
=
dept
)
.
order_by
(
'ip'
)
posts
=
post_all
.
filter
(
dept
=
dept
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/host_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_list.html'
,
locals
(),
request
)
elif
is_common_user
(
request
):
elif
is_common_user
(
request
):
user_id
=
get_session_user_info
(
request
)[
0
]
user_id
,
username
=
get_session_user_info
(
request
)[
0
:
2
]
username
=
get_session_user_info
(
request
)[
1
]
posts
=
user_perm_asset_api
(
username
)
posts
=
user_perm_asset_api
(
username
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/host_list_common.html'
,
locals
(),
return
my_render
(
'jasset/host_list_common.html'
,
locals
(),
request
)
context_instance
=
RequestContext
(
request
))
@require_admin
@require_admin
def
host_del
(
request
,
offset
):
def
host_del
(
request
,
offset
):
""" 删除主机 """
if
offset
==
'multi'
:
if
offset
==
'multi'
:
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
)
+
"]"
jid
=
request
.
POST
.
get
(
key
)
host_id
=
request
.
POST
.
get
(
key
)
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset
=
[
jid
]):
db_host_delete
(
request
,
host_id
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
a
=
Asset
.
objects
.
get
(
id
=
jid
)
.
ip
Asset
.
objects
.
filter
(
id
=
jid
)
.
delete
()
BisGroup
.
objects
.
filter
(
name
=
a
)
.
delete
()
else
:
else
:
jid
=
int
(
offset
)
host_id
=
int
(
offset
)
if
is_group_admin
(
request
)
and
not
validate
(
request
,
asset
=
[
jid
]):
db_host_delete
(
request
,
host_id
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
a
=
Asset
.
objects
.
get
(
id
=
jid
)
.
ip
BisGroup
.
objects
.
filter
(
name
=
a
)
.
delete
()
Asset
.
objects
.
filter
(
id
=
jid
)
.
delete
()
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
return
HttpResponseRedirect
(
'/jasset/host_list/'
)
@require_super_user
@require_super_user
def
host_edit
(
request
):
def
host_edit
(
request
):
""" 修改主机 """
header_title
,
path1
,
path2
=
u'修改主机'
,
u'资产管理'
,
u'修改主机'
header_title
,
path1
,
path2
=
u'修改主机'
,
u'资产管理'
,
u'修改主机'
actives
=
{
1
:
u'激活'
,
0
:
u'禁用'
}
actives
=
{
1
:
u'激活'
,
0
:
u'禁用'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
...
@@ -403,21 +436,23 @@ def host_edit(request):
...
@@ -403,21 +436,23 @@ def host_edit(request):
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'
,
''
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
post
]
if
j_type
==
'M'
:
if
j_type
==
'M'
:
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_user
=
request
.
POST
.
get
(
'j_user'
)
j_password
=
request
.
POST
.
get
(
'j_password'
)
j_password
=
request
.
POST
.
get
(
'j_password'
)
db_host_update
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
j_user
,
post
,
j_password
,
post
)
db_host_update
(
host_info
,
j_user
,
j_password
)
else
:
else
:
db_host_update
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
post
)
db_host_update
(
host_info
)
smg
=
u'主机
%
s 修改成功'
%
j_ip
smg
=
u'主机
%
s 修改成功'
%
j_ip
return
HttpResponseRedirect
(
'/jasset/host_detail/?id=
%
s'
%
host_id
)
return
HttpResponseRedirect
(
'/jasset/host_detail/?id=
%
s'
%
host_id
)
return
render_to_response
(
'jasset/host_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_edit.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
host_edit_adm
(
request
):
def
host_edit_adm
(
request
):
""" 部门管理员修改主机 """
header_title
,
path1
,
path2
=
u'修改主机'
,
u'资产管理'
,
u'修改主机'
header_title
,
path1
,
path2
=
u'修改主机'
,
u'资产管理'
,
u'修改主机'
actives
=
{
1
:
u'激活'
,
0
:
u'禁用'
}
actives
=
{
1
:
u'激活'
,
0
:
u'禁用'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
...
@@ -443,25 +478,28 @@ def host_edit_adm(request):
...
@@ -443,25 +478,28 @@ def host_edit_adm(request):
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'
)
host_info
=
[
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
]
if
not
verify
(
request
,
asset_group
=
j_group
,
edept
=
j_dept
):
if
not
verify
(
request
,
asset_group
=
j_group
,
edept
=
j_dept
):
emg
=
u'修改失败,您无权操作!'
emg
=
u'修改失败,您无权操作!'
return
render_to_response
(
'jasset/host_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_edit.html'
,
locals
(),
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
=
request
.
POST
.
get
(
'j_password'
)
j_password
=
request
.
POST
.
get
(
'j_password'
)
db_host_update
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
post
,
j_user
,
j_password
)
db_host_update
(
host_info
,
j_user
,
j_password
,
post
)
else
:
else
:
db_host_update
(
j_ip
,
j_port
,
j_idc
,
j_type
,
j_group
,
j_dept
,
j_active
,
j_comment
,
post
)
db_host_update
(
host_info
,
post
)
smg
=
u'主机
%
s 修改成功'
%
j_ip
smg
=
u'主机
%
s 修改成功'
%
j_ip
return
HttpResponseRedirect
(
'/jasset/host_detail/?id=
%
s'
%
host_id
)
return
HttpResponseRedirect
(
'/jasset/host_detail/?id=
%
s'
%
host_id
)
return
render_to_response
(
'jasset/host_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_edit.html'
,
locals
(),
request
)
@require_login
@require_login
def
host_detail
(
request
):
def
host_detail
(
request
):
""" 主机详情 """
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
host_id
=
request
.
GET
.
get
(
'id'
,
''
)
host_id
=
request
.
GET
.
get
(
'id'
,
''
)
post
=
Asset
.
objects
.
filter
(
id
=
host_id
)
post
=
Asset
.
objects
.
filter
(
id
=
host_id
)
...
@@ -482,27 +520,29 @@ def host_detail(request):
...
@@ -482,27 +520,29 @@ def host_detail(request):
log
,
log_more
=
log_all
[:
10
],
log_all
[
10
:]
log
,
log_more
=
log_all
[:
10
],
log_all
[
10
:]
user_permed_list
=
asset_perm_api
(
post
)
user_permed_list
=
asset_perm_api
(
post
)
return
render_to_response
(
'jasset/host_detail.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/host_detail.html'
,
locals
(),
request
)
@require_super_user
@require_super_user
def
idc_add
(
request
):
def
idc_add
(
request
):
""" 添加IDC """
header_title
,
path1
,
path2
=
u'添加IDC'
,
u'资产管理'
,
u'添加IDC'
header_title
,
path1
,
path2
=
u'添加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'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
)
if
IDC
.
objects
.
filter
(
name
=
j_idc
):
if
IDC
.
objects
.
filter
(
name
=
j_idc
):
emg
=
u'该IDC已存在!'
emg
=
u'该IDC已存在!'
return
render_to_response
(
'jasset/idc_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/idc_add.html'
,
locals
(),
request
)
else
:
else
:
smg
=
u'IDC:
%
s添加成功'
%
j_idc
smg
=
u'IDC:
%
s添加成功'
%
j_idc
IDC
.
objects
.
create
(
name
=
j_idc
,
comment
=
j_comment
)
IDC
.
objects
.
create
(
name
=
j_idc
,
comment
=
j_comment
)
return
render_to_response
(
'jasset/idc_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/idc_add.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
idc_list
(
request
):
def
idc_list
(
request
):
""" 列出IDC """
header_title
,
path1
,
path2
=
u'查看IDC'
,
u'资产管理'
,
u'查看IDC'
header_title
,
path1
,
path2
=
u'查看IDC'
,
u'资产管理'
,
u'查看IDC'
dept_id
=
get_user_dept
(
request
)
dept_id
=
get_user_dept
(
request
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
...
@@ -512,21 +552,24 @@ def idc_list(request):
...
@@ -512,21 +552,24 @@ def idc_list(request):
else
:
else
:
posts
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
.
order_by
(
'id'
)
posts
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
.
order_by
(
'id'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/idc_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/idc_list.html'
,
locals
(),
request
)
@require_super_user
@require_super_user
def
idc_edit
(
request
):
def
idc_edit
(
request
):
""" 修改IDC """
header_title
,
path1
,
path2
=
u'编辑IDC'
,
u'资产管理'
,
u'编辑IDC'
header_title
,
path1
,
path2
=
u'编辑IDC'
,
u'资产管理'
,
u'编辑IDC'
idc_id
=
request
.
GET
.
get
(
'id'
)
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
idc
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
if
int
(
idc_id
)
==
1
:
return
httperror
(
request
,
u'默认IDC不能编辑!'
)
if
idc
:
if
idc
:
idc
=
idc
[
0
]
idc
=
idc
[
0
]
default
=
IDC
.
objects
.
get
(
name
=
'默认'
)
.
asset_set
.
all
()
default
=
IDC
.
objects
.
get
(
id
=
1
)
.
asset_set
.
all
()
eposts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
eposts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
posts
=
[
g
for
g
in
default
if
g
not
in
eposts
]
posts
=
[
g
for
g
in
default
if
g
not
in
eposts
]
else
:
else
:
emg
=
'此IDC不存在'
return
httperror
(
request
,
u'此IDC不存在'
)
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
idc_id
=
request
.
POST
.
get
(
'id'
)
idc_id
=
request
.
POST
.
get
(
'id'
)
...
@@ -541,69 +584,56 @@ def idc_edit(request):
...
@@ -541,69 +584,56 @@ def idc_edit(request):
for
host_id
in
j_hosts
:
for
host_id
in
j_hosts
:
Asset
.
objects
.
filter
(
id
=
host_id
)
.
update
(
idc
=
idc
[
0
])
Asset
.
objects
.
filter
(
id
=
host_id
)
.
update
(
idc
=
idc
[
0
])
i
=
IDC
.
objects
.
get
(
name
=
'默认'
)
i
=
IDC
.
objects
.
get
(
id
=
1
)
for
host
in
idc_default
:
for
host
in
idc_default
:
g
=
Asset
.
objects
.
filter
(
id
=
host
)
.
update
(
idc
=
i
)
g
=
Asset
.
objects
.
filter
(
id
=
host
)
.
update
(
idc
=
i
)
else
:
else
:
emg
=
'此IDC不存在'
return
httperror
(
request
,
u'此IDC不存在'
)
return
render_to_response
(
'jasset/idc_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
HttpResponseRedirect
(
'/jasset/idc_list/?id=
%
s'
%
idc_id
)
return
HttpResponseRedirect
(
'/jasset/idc_list/?id=
%
s'
%
idc_id
)
return
render_to_response
(
'jasset/idc_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/idc_edit.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
idc_detail
(
request
):
def
idc_detail
(
request
):
""" IDC详情 """
header_title
,
path1
,
path2
=
u'IDC详情'
,
u'资产管理'
,
u'IDC详情'
header_title
,
path1
,
path2
=
u'IDC详情'
,
u'资产管理'
,
u'IDC详情'
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
idc_id
=
request
.
GET
.
get
(
'id'
)
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc_filter
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
idc_filter
=
IDC
.
objects
.
filter
(
id
=
idc_id
)
if
idc_filter
:
if
idc_filter
:
idc
=
idc_filter
[
0
]
idc
=
idc_filter
[
0
]
else
:
else
:
return
httperror
(
request
,
'没有此IDC'
)
return
httperror
(
request
,
'没有此IDC'
)
dept_id
=
get_user_dept
(
request
)
dept
=
get_session_user_info
(
request
)[
5
]
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
if
is_super_user
(
request
):
if
is_super_user
(
request
):
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
elif
is_group_admin
(
request
):
elif
is_group_admin
(
request
):
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
,
dept
=
dept
)
.
order_by
(
'ip'
)
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
,
dept
=
dept
)
.
order_by
(
'ip'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/idc_detail.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/idc_detail.html'
,
locals
(),
request
)
@require_super_user
@require_super_user
def
idc_del
(
request
):
def
idc_del
(
request
):
""" 删除IDC """
offset
=
request
.
GET
.
get
(
'id'
,
''
)
offset
=
request
.
GET
.
get
(
'id'
,
''
)
default_idc
=
IDC
.
objects
.
get
(
id
=
1
)
if
offset
==
'multi'
:
if
offset
==
'multi'
:
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
)
+
"]"
gid
=
request
.
POST
.
get
(
key
)
idc_id
=
request
.
POST
.
get
(
key
)
idc
=
IDC
.
objects
.
filter
(
id
=
gid
)
db_idc_delete
(
request
,
idc_id
)
if
idc
:
idc_class
=
idc
.
first
()
idc_class
.
asset_set
.
update
(
idc
=
default_idc
)
idc
.
delete
()
else
:
return
httperror
(
request
,
'删除失败, 没有这个IDC!'
)
else
:
else
:
gid
=
int
(
offset
)
db_idc_delete
(
request
,
int
(
offset
))
idc
=
IDC
.
objects
.
filter
(
id
=
gid
)
if
idc
:
idc_class
=
idc
.
first
()
idc_class
.
asset_set
.
update
(
idc
=
default_idc
)
idc
.
delete
()
else
:
return
httperror
(
request
,
'删除失败, 没有这个IDC!'
)
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
@require_admin
@require_admin
def
group_add
(
request
):
def
group_add
(
request
):
""" 添加主机组 """
header_title
,
path1
,
path2
=
u'添加主机组'
,
u'资产管理'
,
u'添加主机组'
header_title
,
path1
,
path2
=
u'添加主机组'
,
u'资产管理'
,
u'添加主机组'
if
is_super_user
(
request
):
if
is_super_user
(
request
):
posts
=
Asset
.
objects
.
all
()
posts
=
Asset
.
objects
.
all
()
...
@@ -621,7 +651,6 @@ def group_add(request):
...
@@ -621,7 +651,6 @@ def group_add(request):
j_comment
=
request
.
POST
.
get
(
'j_comment'
,
''
)
j_comment
=
request
.
POST
.
get
(
'j_comment'
,
''
)
try
:
try
:
print
verify
(
request
,
asset
=
j_hosts
,
edept
=
[
j_dept
]),
'hehe'
if
is_group_admin
(
request
)
and
not
verify
(
request
,
asset
=
j_hosts
,
edept
=
[
j_dept
]):
if
is_group_admin
(
request
)
and
not
verify
(
request
,
asset
=
j_hosts
,
edept
=
[
j_dept
]):
emg
=
u'添加失败, 您无权操作!'
emg
=
u'添加失败, 您无权操作!'
raise
RaiseError
raise
RaiseError
...
@@ -641,11 +670,12 @@ def group_add(request):
...
@@ -641,11 +670,12 @@ def group_add(request):
group
.
asset_set
.
add
(
g
)
group
.
asset_set
.
add
(
g
)
smg
=
u'主机组
%
s 添加成功'
%
j_group
smg
=
u'主机组
%
s 添加成功'
%
j_group
return
render_to_response
(
'jasset/group_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/group_add.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
group_list
(
request
):
def
group_list
(
request
):
""" 列出主机组 """
header_title
,
path1
,
path2
=
u'查看主机组'
,
u'资产管理'
,
u'查看主机组'
header_title
,
path1
,
path2
=
u'查看主机组'
,
u'资产管理'
,
u'查看主机组'
dept_id
=
get_user_dept
(
request
)
dept_id
=
get_user_dept
(
request
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
...
@@ -680,11 +710,12 @@ def group_list(request):
...
@@ -680,11 +710,12 @@ def group_list(request):
else
:
else
:
posts
=
BisGroup
.
objects
.
filter
(
dept
=
dept
)
.
order_by
(
'id'
)
posts
=
BisGroup
.
objects
.
filter
(
dept
=
dept
)
.
order_by
(
'id'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/group_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/group_list.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
group_edit
(
request
):
def
group_edit
(
request
):
""" 修改主机组 """
header_title
,
path1
,
path2
=
u'编辑主机组'
,
u'资产管理'
,
u'编辑主机组'
header_title
,
path1
,
path2
=
u'编辑主机组'
,
u'资产管理'
,
u'编辑主机组'
group_id
=
request
.
GET
.
get
(
'id'
,
''
)
group_id
=
request
.
GET
.
get
(
'id'
,
''
)
group
=
BisGroup
.
objects
.
get
(
id
=
group_id
)
group
=
BisGroup
.
objects
.
get
(
id
=
group_id
)
...
@@ -720,11 +751,12 @@ def group_edit(request):
...
@@ -720,11 +751,12 @@ def group_edit(request):
smg
=
u'主机组
%
s修改成功'
%
j_group
smg
=
u'主机组
%
s修改成功'
%
j_group
return
HttpResponseRedirect
(
'/jasset/group_list'
)
return
HttpResponseRedirect
(
'/jasset/group_list'
)
return
render_to_response
(
'jasset/group_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/group_edit.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
group_detail
(
request
):
def
group_detail
(
request
):
""" 主机组详情 """
header_title
,
path1
,
path2
=
u'主机组详情'
,
u'资产管理'
,
u'主机组详情'
header_title
,
path1
,
path2
=
u'主机组详情'
,
u'资产管理'
,
u'主机组详情'
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
dept
=
get_session_user_info
(
request
)[
5
]
dept
=
get_session_user_info
(
request
)[
5
]
...
@@ -735,15 +767,16 @@ def group_detail(request):
...
@@ -735,15 +767,16 @@ def group_detail(request):
elif
is_group_admin
(
request
):
elif
is_group_admin
(
request
):
if
not
verify
(
request
,
asset_group
=
[
group_id
]):
if
not
verify
(
request
,
asset_group
=
[
group_id
]):
return
httperror
(
request
,
'您无权查看!'
)
return
httperror
(
request
,
u
'您无权查看!'
)
posts
=
Asset
.
objects
.
filter
(
bis_group
=
group
)
.
filter
(
dept
=
dept
)
.
order_by
(
'ip'
)
posts
=
Asset
.
objects
.
filter
(
bis_group
=
group
)
.
filter
(
dept
=
dept
)
.
order_by
(
'ip'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/group_detail.html'
,
locals
(),
context_instance
=
RequestContext
(
request
)
)
return
my_render
(
'jasset/group_detail.html'
,
locals
(),
request
)
@require_admin
@require_admin
def
group_del_host
(
request
):
def
group_del_host
(
request
):
""" 主机组中剔除主机, 并不删除真实主机 """
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
group_id
=
request
.
POST
.
get
(
'group_id'
)
group_id
=
request
.
POST
.
get
(
'group_id'
)
offset
=
request
.
GET
.
get
(
'id'
,
''
)
offset
=
request
.
GET
.
get
(
'id'
,
''
)
...
@@ -768,6 +801,7 @@ def group_del_host(request):
...
@@ -768,6 +801,7 @@ def group_del_host(request):
@require_admin
@require_admin
def
group_del
(
request
):
def
group_del
(
request
):
""" 删除主机组 """
offset
=
request
.
GET
.
get
(
'id'
,
''
)
offset
=
request
.
GET
.
get
(
'id'
,
''
)
if
offset
==
'multi'
:
if
offset
==
'multi'
:
len_list
=
request
.
POST
.
get
(
"len_list"
)
len_list
=
request
.
POST
.
get
(
"len_list"
)
...
@@ -785,7 +819,9 @@ def group_del(request):
...
@@ -785,7 +819,9 @@ def group_del(request):
return
HttpResponseRedirect
(
'/jasset/group_list/'
)
return
HttpResponseRedirect
(
'/jasset/group_list/'
)
@require_admin
def
dept_host_ajax
(
request
):
def
dept_host_ajax
(
request
):
""" 添加主机组时, 部门联动主机异步 """
dept_id
=
request
.
GET
.
get
(
'id'
,
''
)
dept_id
=
request
.
GET
.
get
(
'id'
,
''
)
if
dept_id
not
in
[
'1'
,
'2'
]:
if
dept_id
not
in
[
'1'
,
'2'
]:
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
dept
=
DEPT
.
objects
.
filter
(
id
=
dept_id
)
...
@@ -795,31 +831,30 @@ def dept_host_ajax(request):
...
@@ -795,31 +831,30 @@ def dept_host_ajax(request):
else
:
else
:
hosts
=
Asset
.
objects
.
all
()
hosts
=
Asset
.
objects
.
all
()
return
render_to_response
(
'jasset/dept_host_ajax.html'
,
locals
())
return
my_render
(
'jasset/dept_host_ajax.html'
,
locals
())
@require_login
@require_login
def
host_search
(
request
):
def
host_search
(
request
):
""" 搜索主机 """
keyword
=
request
.
GET
.
get
(
'keyword'
)
keyword
=
request
.
GET
.
get
(
'keyword'
)
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
login_types
=
{
'L'
:
'LDAP'
,
'M'
:
'MAP'
}
dept_id
=
get_user_dept
(
request
)
dept
=
get_session_user_info
(
request
)[
5
]
dept
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
post_all
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
if
is_super_user
(
request
):
if
is_super_user
(
request
):
posts
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
posts
=
post_all
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
elif
is_group_admin
(
request
):
elif
is_group_admin
(
request
):
posts
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
posts
=
post_all
.
filter
(
dept
=
dept
)
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
filter
(
dept
=
dept
)
.
distinct
()
.
order_by
(
'ip'
)
elif
is_common_user
(
request
):
elif
is_common_user
(
request
):
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
get_session_user_info
(
request
)[
2
]
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
name
post_perm
=
user_perm_asset_api
(
username
)
post_perm
=
user_perm_asset_api
(
username
)
post_all
=
Asset
.
objects
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
idc__name__contains
=
keyword
)
|
Q
(
bis_group__name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
\
.
distinct
()
.
order_by
(
'ip'
)
posts
=
list
(
set
(
post_all
)
&
set
(
post_perm
))
posts
=
list
(
set
(
post_all
)
&
set
(
post_perm
))
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/host_search.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
my_render
(
'jasset/host_search.html'
,
locals
(),
request
)
\ No newline at end of file
\ No newline at end of file
jlog/views.py
View file @
d6171f7f
...
@@ -21,6 +21,7 @@ CONF.read('%s/jumpserver.conf' % BASE_DIR)
...
@@ -21,6 +21,7 @@ CONF.read('%s/jumpserver.conf' % BASE_DIR)
def
get_user_info
(
request
,
offset
):
def
get_user_info
(
request
,
offset
):
""" 获取用户信息及环境 """
env_dic
=
{
'online'
:
0
,
'offline'
:
1
}
env_dic
=
{
'online'
:
0
,
'offline'
:
1
}
env
=
env_dic
[
offset
]
env
=
env_dic
[
offset
]
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
...
@@ -33,32 +34,37 @@ def get_user_info(request, offset):
...
@@ -33,32 +34,37 @@ def get_user_info(request, offset):
def
get_user_log
(
ret_list
):
def
get_user_log
(
ret_list
):
""" 获取不同类型用户日志记录 """
request
,
keyword
,
env
,
username
,
dept_name
=
ret_list
request
,
keyword
,
env
,
username
,
dept_name
=
ret_list
post_all
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
post_keyword_all
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
if
is_super_user
(
request
):
if
is_super_user
(
request
):
if
keyword
:
if
keyword
:
posts
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
posts
=
post_keyword_all
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
else
:
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
posts
=
post_all
elif
is_group_admin
(
request
):
elif
is_group_admin
(
request
):
if
keyword
:
if
keyword
:
posts
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
posts
=
post_keyword_all
.
filter
(
dept_name
=
dept_name
)
.
filter
(
is_finished
=
env
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
else
:
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
posts
=
post_all
.
filter
(
dept_name
=
dept_name
)
elif
is_common_user
(
request
):
elif
is_common_user
(
request
):
if
keyword
:
if
keyword
:
posts
=
Log
.
objects
.
filter
(
user
=
username
)
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
posts
=
post_keyword_all
.
filter
(
user
=
username
)
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
else
:
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
filter
(
user
=
username
)
.
order_by
(
'-start_time'
)
posts
=
post_all
.
filter
(
user
=
username
)
return
posts
return
posts
@require_login
@require_login
def
log_list
(
request
,
offset
):
def
log_list
(
request
,
offset
):
""" 显示日志 """
header_title
,
path1
,
path2
=
u'查看日志'
,
u'查看日志'
,
u'在线用户'
header_title
,
path1
,
path2
=
u'查看日志'
,
u'查看日志'
,
u'在线用户'
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
web_socket_host
=
CONF
.
get
(
'websocket'
,
'web_socket_host'
)
web_socket_host
=
CONF
.
get
(
'websocket'
,
'web_socket_host'
)
...
@@ -70,6 +76,7 @@ def log_list(request, offset):
...
@@ -70,6 +76,7 @@ def log_list(request, offset):
@require_admin
@require_admin
def
log_kill
(
request
):
def
log_kill
(
request
):
""" 杀掉connect进程 """
pid
=
request
.
GET
.
get
(
'id'
,
''
)
pid
=
request
.
GET
.
get
(
'id'
,
''
)
log
=
Log
.
objects
.
filter
(
pid
=
pid
)
log
=
Log
.
objects
.
filter
(
pid
=
pid
)
if
log
:
if
log
:
...
@@ -85,6 +92,7 @@ def log_kill(request):
...
@@ -85,6 +92,7 @@ def log_kill(request):
@require_login
@require_login
def
log_history
(
request
):
def
log_history
(
request
):
""" 命令历史记录 """
log_id
=
request
.
GET
.
get
(
'id'
,
0
)
log_id
=
request
.
GET
.
get
(
'id'
,
0
)
log
=
Log
.
objects
.
filter
(
id
=
int
(
log_id
))
log
=
Log
.
objects
.
filter
(
id
=
int
(
log_id
))
if
log
:
if
log
:
...
@@ -108,6 +116,7 @@ def log_history(request):
...
@@ -108,6 +116,7 @@ def log_history(request):
@require_login
@require_login
def
log_search
(
request
):
def
log_search
(
request
):
""" 日志搜索 """
offset
=
request
.
GET
.
get
(
'env'
,
''
)
offset
=
request
.
GET
.
get
(
'env'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
posts
=
get_user_log
(
get_user_info
(
request
,
offset
))
posts
=
get_user_log
(
get_user_info
(
request
,
offset
))
...
...
jperm/views.py
View file @
d6171f7f
# coding: utf-8
# coding: utf-8
import
sys
import
sys
reload
(
sys
)
reload
(
sys
)
sys
.
setdefaultencoding
(
'utf8'
)
sys
.
setdefaultencoding
(
'utf8'
)
...
@@ -182,6 +183,7 @@ def perm_edit_adm(request):
...
@@ -182,6 +183,7 @@ def perm_edit_adm(request):
return
HttpResponseRedirect
(
'/jperm/perm_list/'
)
return
HttpResponseRedirect
(
'/jperm/perm_list/'
)
return
render_to_response
(
'jperm/perm_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_edit.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_admin
@require_admin
def
perm_detail
(
request
):
def
perm_detail
(
request
):
header_title
,
path1
,
path2
=
u'编辑授权'
,
u'授权管理'
,
u'授权详情'
header_title
,
path1
,
path2
=
u'编辑授权'
,
u'授权管理'
,
u'授权详情'
...
@@ -225,7 +227,7 @@ def perm_asset_detail(request):
...
@@ -225,7 +227,7 @@ def perm_asset_detail(request):
# def sudo_db_add(name, user_runas, user_groups_select, asset_groups_select, cmd_groups_select, comment):
# def sudo_db_add(name, user_runas, user_groups_select, asset_groups_select, cmd_groups_select, comment):
#
user_groups_select_list, asset_groups_select_list, cmd_groups_select_list = \
# user_groups_select_list, asset_groups_select_list, cmd_groups_select_list = \
# user_asset_cmd_groups_get(user_groups_select, asset_groups_select, cmd_groups_select)
# user_asset_cmd_groups_get(user_groups_select, asset_groups_select, cmd_groups_select)
#
#
# sudo_perm = SudoPerm(name=name, user_runas=user_runas, comment=comment)
# sudo_perm = SudoPerm(name=name, user_runas=user_runas, comment=comment)
...
@@ -241,7 +243,6 @@ def unicode2str(unicode_list):
...
@@ -241,7 +243,6 @@ def unicode2str(unicode_list):
def
sudo_ldap_add
(
user_group
,
user_runas
,
asset_groups_select
,
def
sudo_ldap_add
(
user_group
,
user_runas
,
asset_groups_select
,
cmd_groups_select
):
cmd_groups_select
):
if
not
LDAP_ENABLE
:
if
not
LDAP_ENABLE
:
return
True
return
True
...
@@ -479,6 +480,7 @@ def sudo_refresh(request):
...
@@ -479,6 +480,7 @@ def sudo_refresh(request):
sudo_ldap_add
(
user_group
,
user_runas
,
asset_groups_select
,
cmd_groups_select
)
sudo_ldap_add
(
user_group
,
user_runas
,
asset_groups_select
,
cmd_groups_select
)
return
HttpResponse
(
'ok'
)
return
HttpResponse
(
'ok'
)
# @require_admin
# @require_admin
# def sudo_detail(request):
# def sudo_detail(request):
# header_title, path1, path2 = u'Sudo授权详情', u'授权管理', u'授权详情'
# header_title, path1, path2 = u'Sudo授权详情', u'授权管理', u'授权详情'
...
@@ -669,15 +671,19 @@ def cmd_detail(request):
...
@@ -669,15 +671,19 @@ def cmd_detail(request):
@require_login
@require_login
def
perm_apply
(
request
):
def
perm_apply
(
request
):
""" 权限申请 """
header_title
,
path1
,
path2
=
u'主机权限申请'
,
u'权限管理'
,
u'申请主机'
header_title
,
path1
,
path2
=
u'主机权限申请'
,
u'权限管理'
,
u'申请主机'
user_id
,
username
=
get_session_user_info
(
request
)[
0
:
2
]
user_id
,
username
=
get_session_user_info
(
request
)[
0
:
2
]
dept_id
,
deptname
,
dept
=
get_session_user_info
(
request
)[
3
:
6
]
dept_id
,
deptname
,
dept
=
get_session_user_info
(
request
)[
3
:
6
]
perm_host
=
user_perm_asset_api
(
username
)
perm_host
=
user_perm_asset_api
(
username
)
all_host
=
Asset
.
objects
.
filter
(
dept
=
dept
)
all_host
=
Asset
.
objects
.
filter
(
dept
=
dept
)
perm_group
=
user_perm_group_api
(
username
)
perm_group
=
user_perm_group_api
(
username
)
all_group
=
dept
.
bisgroup_set
.
all
()
all_group
=
dept
.
bisgroup_set
.
all
()
posts
=
[
g
for
g
in
all_host
if
g
not
in
perm_host
]
posts
=
[
g
for
g
in
all_host
if
g
not
in
perm_host
]
egroup
=
[
d
for
d
in
all_group
if
d
not
in
perm_group
]
egroup
=
[
d
for
d
in
all_group
if
d
not
in
perm_group
]
dept_da
=
User
.
objects
.
filter
(
dept_id
=
dept_id
,
role
=
'DA'
)
dept_da
=
User
.
objects
.
filter
(
dept_id
=
dept_id
,
role
=
'DA'
)
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
...
@@ -693,7 +699,8 @@ def perm_apply(request):
...
@@ -693,7 +699,8 @@ def perm_apply(request):
group_lis
=
', '
.
join
(
group
)
group_lis
=
', '
.
join
(
group
)
hosts_lis
=
', '
.
join
(
hosts
)
hosts_lis
=
', '
.
join
(
hosts
)
time_now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
time_now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
a
=
Apply
.
objects
.
create
(
applyer
=
applyer
,
dept
=
dept
,
bisgroup
=
group
,
date_add
=
datetime
.
datetime
.
now
(),
asset
=
hosts
,
status
=
0
,
comment
=
comment
)
a
=
Apply
.
objects
.
create
(
applyer
=
applyer
,
dept
=
dept
,
bisgroup
=
group
,
date_add
=
datetime
.
datetime
.
now
(),
asset
=
hosts
,
status
=
0
,
comment
=
comment
)
uuid
=
a
.
uuid
uuid
=
a
.
uuid
url
=
"http://
%
s:
%
s/jperm/apply_exec/?uuid=
%
s"
%
(
SEND_IP
,
SEND_PORT
,
uuid
)
url
=
"http://
%
s:
%
s/jperm/apply_exec/?uuid=
%
s"
%
(
SEND_IP
,
SEND_PORT
,
uuid
)
mail_msg
=
"""
mail_msg
=
"""
...
@@ -710,13 +717,14 @@ def perm_apply(request):
...
@@ -710,13 +717,14 @@ def perm_apply(request):
"""
%
(
da
.
username
,
applyer
,
group_lis
,
hosts_lis
,
time_now
,
comment
,
url
)
"""
%
(
da
.
username
,
applyer
,
group_lis
,
hosts_lis
,
time_now
,
comment
,
url
)
send_mail
(
mail_title
,
mail_msg
,
MAIL_FROM
,
[
mail_address
],
fail_silently
=
False
)
send_mail
(
mail_title
,
mail_msg
,
MAIL_FROM
,
[
mail_address
],
fail_silently
=
False
)
smg
=
"提交成功,已发邮件
通知部门管理员。"
smg
=
"提交成功,已发邮件
至
%
s 通知部门管理员。"
%
mail_address
return
render_to_response
(
'jperm/perm_apply.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_apply.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_apply.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_apply.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_admin
@require_admin
def
perm_apply_exec
(
request
):
def
perm_apply_exec
(
request
):
""" 确认权限 """
header_title
,
path1
,
path2
=
u'主机权限申请'
,
u'权限管理'
,
u'审批完成'
header_title
,
path1
,
path2
=
u'主机权限申请'
,
u'权限管理'
,
u'审批完成'
uuid
=
request
.
GET
.
get
(
'uuid'
)
uuid
=
request
.
GET
.
get
(
'uuid'
)
user_id
=
request
.
session
.
get
(
'user_id'
)
user_id
=
request
.
session
.
get
(
'user_id'
)
...
@@ -737,7 +745,7 @@ def perm_apply_exec(request):
...
@@ -737,7 +745,7 @@ def perm_apply_exec(request):
Hi,
%
s:
Hi,
%
s:
您所申请的权限已由
%
s 在
%
s 审批完成, 请登录验证。
您所申请的权限已由
%
s 在
%
s 审批完成, 请登录验证。
"""
%
(
q_apply
.
applyer
,
q_apply
.
approver
,
time_now
)
"""
%
(
q_apply
.
applyer
,
q_apply
.
approver
,
time_now
)
send_mail
(
mail_title
,
mail_msg
,
'jkfunshion@fun.tv'
,
[
mail_address
],
fail_silently
=
False
)
send_mail
(
mail_title
,
mail_msg
,
MAIL_FROM
,
[
mail_address
],
fail_silently
=
False
)
smg
=
'授权完成, 已邮件通知申请人, 十秒钟后返回首页'
smg
=
'授权完成, 已邮件通知申请人, 十秒钟后返回首页'
return
render_to_response
(
'jperm/perm_apply_exec.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_apply_exec.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
else
:
else
:
...
@@ -746,37 +754,38 @@ def perm_apply_exec(request):
...
@@ -746,37 +754,38 @@ def perm_apply_exec(request):
def
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
=
None
):
def
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
=
None
):
""" 获取申请记录 """
post_all
=
Apply
.
objects
.
filter
(
status
=
status
)
.
order_by
(
'-date_add'
)
post_keyword_all
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
status
)
.
order_by
(
'-date_add'
)
if
is_super_user
(
request
):
if
is_super_user
(
request
):
if
keyword
:
if
keyword
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
posts
=
post_keyword_all
.
filter
(
status
=
status
)
.
order_by
(
'-date_add'
)
else
:
else
:
posts
=
Apply
.
objects
.
filter
(
status
=
status
)
.
order_by
(
'-date_add'
)
posts
=
post_all
elif
is_group_admin
(
request
):
elif
is_group_admin
(
request
):
if
keyword
:
if
keyword
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
posts
=
post_keyword_all
.
filter
(
dept
=
dept_name
)
.
filter
(
status
=
status
)
.
filter
(
dept
=
dept_name
)
.
order_by
(
'-date_add'
)
else
:
else
:
posts
=
Apply
.
objects
.
filter
(
status
=
status
)
.
filter
(
dept
=
dept_name
)
.
order_by
(
'-date_add'
)
posts
=
post_all
.
filter
(
dept
=
dept_name
)
elif
is_common_user
(
request
):
elif
is_common_user
(
request
):
if
keyword
:
if
keyword
:
posts
=
Apply
.
objects
.
filter
(
applyer
=
username
)
.
filter
(
status
=
status
)
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
posts
=
post_keyword_all
.
filter
(
user
=
username
)
Q
(
asset__contains
=
keyword
))
.
order_by
(
'-date_add'
)
else
:
else
:
posts
=
Apply
.
objects
.
filter
(
applyer
=
username
)
.
filter
(
status
=
status
)
.
order_by
(
'-date_add'
)
posts
=
post_all
.
filter
(
user
=
username
)
return
posts
return
posts
@require_login
@require_login
def
perm_apply_log
(
request
,
offset
):
def
perm_apply_log
(
request
,
offset
):
""" 申请记录 """
header_title
,
path1
,
path2
=
u'权限申请记录'
,
u'权限管理'
,
u'申请记录'
header_title
,
path1
,
path2
=
u'权限申请记录'
,
u'权限管理'
,
u'申请记录'
keyword
=
request
.
GET
.
get
(
'keyword'
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
dept_id
=
get_user_dept
(
request
)
username
=
get_session_user_info
(
request
)[
1
]
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
dept_name
=
get_session_user_info
(
request
)[
4
]
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
status_dic
=
{
'online'
:
0
,
'offline'
:
1
}
status_dic
=
{
'online'
:
0
,
'offline'
:
1
}
status
=
status_dic
[
offset
]
status
=
status_dic
[
offset
]
posts
=
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
)
posts
=
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
)
...
@@ -786,6 +795,7 @@ def perm_apply_log(request, offset):
...
@@ -786,6 +795,7 @@ def perm_apply_log(request, offset):
@require_login
@require_login
def
perm_apply_info
(
request
):
def
perm_apply_info
(
request
):
""" 申请信息详情 """
uuid
=
request
.
GET
.
get
(
'uuid'
)
uuid
=
request
.
GET
.
get
(
'uuid'
)
post
=
Apply
.
objects
.
get
(
uuid
=
uuid
)
post
=
Apply
.
objects
.
get
(
uuid
=
uuid
)
return
render_to_response
(
'jperm/perm_apply_info.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_apply_info.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
...
@@ -793,6 +803,7 @@ def perm_apply_info(request):
...
@@ -793,6 +803,7 @@ def perm_apply_info(request):
@require_admin
@require_admin
def
perm_apply_del
(
request
):
def
perm_apply_del
(
request
):
""" 删除日志记录 """
uuid
=
request
.
GET
.
get
(
'uuid'
)
uuid
=
request
.
GET
.
get
(
'uuid'
)
u_apply
=
Apply
.
objects
.
filter
(
uuid
=
uuid
)
u_apply
=
Apply
.
objects
.
filter
(
uuid
=
uuid
)
if
u_apply
:
if
u_apply
:
...
@@ -802,12 +813,11 @@ def perm_apply_del(request):
...
@@ -802,12 +813,11 @@ def perm_apply_del(request):
@require_login
@require_login
def
perm_apply_search
(
request
):
def
perm_apply_search
(
request
):
""" 申请搜索 """
keyword
=
request
.
GET
.
get
(
'keyword'
)
keyword
=
request
.
GET
.
get
(
'keyword'
)
offset
=
request
.
GET
.
get
(
'env'
)
offset
=
request
.
GET
.
get
(
'env'
)
dept_id
=
get_user_dept
(
request
)
username
=
get_session_user_info
(
request
)[
1
]
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
dept_name
=
get_session_user_info
(
request
)[
3
]
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
status_dic
=
{
'online'
:
0
,
'offline'
:
1
}
status_dic
=
{
'online'
:
0
,
'offline'
:
1
}
status
=
status_dic
[
offset
]
status
=
status_dic
[
offset
]
posts
=
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
)
posts
=
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
)
...
...
jumpserver/views.py
View file @
d6171f7f
...
@@ -66,90 +66,36 @@ def index_cu(request):
...
@@ -66,90 +66,36 @@ def index_cu(request):
return
render_to_response
(
'index_cu.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'index_cu.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_admin
@require_login
def
admin_index
(
request
):
def
index
(
request
):
user_id
=
request
.
session
.
get
(
'user_id'
,
''
)
user
=
User
.
objects
.
get
(
id
=
user_id
)
dept
=
user
.
dept
dept_name
=
user
.
dept
.
name
users
=
User
.
objects
.
filter
(
dept
=
dept
)
hosts
=
Asset
.
objects
.
filter
(
dept
=
dept
)
online
=
Log
.
objects
.
filter
(
dept_name
=
dept_name
,
is_finished
=
0
)
online_host
=
online
.
values
(
'host'
)
.
distinct
()
online_user
=
online
.
values
(
'user'
)
.
distinct
()
active_users
=
users
.
filter
(
is_active
=
1
)
active_hosts
=
hosts
.
filter
(
is_active
=
1
)
# percent of dashboard
if
users
.
count
()
==
0
:
percent_user
,
percent_online_user
=
'0
%
'
,
'0
%
'
else
:
percent_user
=
format
(
active_users
.
count
()
/
users
.
count
(),
'.0
%
'
)
percent_online_user
=
format
(
online_user
.
count
()
/
users
.
count
(),
'.0
%
'
)
if
hosts
.
count
()
==
0
:
percent_host
,
percent_online_host
=
'0
%
'
,
'0
%
'
else
:
percent_host
=
format
(
active_hosts
.
count
()
/
hosts
.
count
(),
'.0
%
'
)
percent_online_host
=
format
(
online_host
.
count
()
/
hosts
.
count
(),
'.0
%
'
)
li_date
,
li_str
=
getDaysByNum
(
7
)
li_date
,
li_str
=
getDaysByNum
(
7
)
today
=
datetime
.
datetime
.
now
()
.
day
today
=
datetime
.
datetime
.
now
()
.
day
from_week
=
datetime
.
datetime
.
now
()
-
datetime
.
timedelta
(
days
=
7
)
from_week
=
datetime
.
datetime
.
now
()
-
datetime
.
timedelta
(
days
=
7
)
week_data
=
Log
.
objects
.
filter
(
dept_name
=
dept_name
,
start_time__range
=
[
from_week
,
datetime
.
datetime
.
now
()])
user_top_ten
=
week_data
.
values
(
'user'
)
.
annotate
(
times
=
Count
(
'user'
))
.
order_by
(
'-times'
)[:
10
]
host_top_ten
=
week_data
.
values
(
'host'
)
.
annotate
(
times
=
Count
(
'host'
))
.
order_by
(
'-times'
)[:
10
]
user_dic
,
host_dic
=
get_data
(
week_data
,
user_top_ten
,
'user'
),
get_data
(
week_data
,
host_top_ten
,
'host'
)
# a week data
week_users
=
week_data
.
values
(
'user'
)
.
distinct
()
.
count
()
week_hosts
=
week_data
.
count
()
user_top_five
=
week_data
.
values
(
'user'
)
.
annotate
(
times
=
Count
(
'user'
))
.
order_by
(
'-times'
)[:
5
]
color
=
[
'label-success'
,
'label-info'
,
'label-primary'
,
'label-default'
,
'label-warnning'
]
# perm apply latest 10
perm_apply_10
=
Apply
.
objects
.
order_by
(
'-date_add'
)[:
10
]
# latest 10 login
login_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[:
10
]
login_more_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[
10
:
21
]
# a week top 10
for
user_info
in
user_top_ten
:
username
=
user_info
.
get
(
'user'
)
last
=
Log
.
objects
.
filter
(
user
=
username
)
.
latest
(
'start_time'
)
user_info
[
'last'
]
=
last
print
user_top_ten
top
=
{
'user'
:
'活跃用户数'
,
'host'
:
'活跃主机数'
,
'times'
:
'登录次数'
}
top_dic
=
{}
for
key
,
value
in
top
.
items
():
li
=
[]
for
t
in
li_date
:
year
,
month
,
day
=
t
.
year
,
t
.
month
,
t
.
day
if
key
!=
'times'
:
times
=
week_data
.
filter
(
start_time__year
=
year
,
start_time__month
=
month
,
start_time__day
=
day
)
.
values
(
key
)
.
distinct
()
.
count
()
else
:
times
=
week_data
.
filter
(
start_time__year
=
year
,
start_time__month
=
month
,
start_time__day
=
day
)
.
count
()
li
.
append
(
times
)
top_dic
[
value
]
=
li
return
render_to_response
(
'index.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_login
def
index
(
request
):
if
is_common_user
(
request
):
if
is_common_user
(
request
):
return
index_cu
(
request
)
return
index_cu
(
request
)
if
is_group_admin
(
request
):
elif
is_super_user
(
request
):
return
admin_index
(
request
)
users
=
User
.
objects
.
all
()
users
=
User
.
objects
.
all
()
hosts
=
Asset
.
objects
.
all
()
hosts
=
Asset
.
objects
.
all
()
online
=
Log
.
objects
.
filter
(
is_finished
=
0
)
online
=
Log
.
objects
.
filter
(
is_finished
=
0
)
online_host
=
online
.
values
(
'host'
)
.
distinct
()
online_host
=
online
.
values
(
'host'
)
.
distinct
()
online_user
=
online
.
values
(
'user'
)
.
distinct
()
online_user
=
online
.
values
(
'user'
)
.
distinct
()
active_users
=
User
.
objects
.
filter
(
is_active
=
1
)
active_users
=
User
.
objects
.
filter
(
is_active
=
1
)
active_hosts
=
Asset
.
objects
.
filter
(
is_active
=
1
)
active_hosts
=
Asset
.
objects
.
filter
(
is_active
=
1
)
week_data
=
Log
.
objects
.
filter
(
start_time__range
=
[
from_week
,
datetime
.
datetime
.
now
()])
elif
is_group_admin
(
request
):
user
=
get_session_user_info
(
request
)[
2
]
dept_name
,
dept
=
get_session_user_info
(
request
)[
4
:]
users
=
User
.
objects
.
filter
(
dept
=
dept
)
hosts
=
Asset
.
objects
.
filter
(
dept
=
dept
)
online
=
Log
.
objects
.
filter
(
dept_name
=
dept_name
,
is_finished
=
0
)
online_host
=
online
.
values
(
'host'
)
.
distinct
()
online_user
=
online
.
values
(
'user'
)
.
distinct
()
active_users
=
users
.
filter
(
is_active
=
1
)
active_hosts
=
hosts
.
filter
(
is_active
=
1
)
week_data
=
Log
.
objects
.
filter
(
dept_name
=
dept_name
,
start_time__range
=
[
from_week
,
datetime
.
datetime
.
now
()])
# percent of dashboard
# percent of dashboard
if
users
.
count
()
==
0
:
if
users
.
count
()
==
0
:
...
@@ -163,10 +109,6 @@ def index(request):
...
@@ -163,10 +109,6 @@ def index(request):
percent_host
=
format
(
active_hosts
.
count
()
/
hosts
.
count
(),
'.0
%
'
)
percent_host
=
format
(
active_hosts
.
count
()
/
hosts
.
count
(),
'.0
%
'
)
percent_online_host
=
format
(
online_host
.
count
()
/
hosts
.
count
(),
'.0
%
'
)
percent_online_host
=
format
(
online_host
.
count
()
/
hosts
.
count
(),
'.0
%
'
)
li_date
,
li_str
=
getDaysByNum
(
7
)
today
=
datetime
.
datetime
.
now
()
.
day
from_week
=
datetime
.
datetime
.
now
()
-
datetime
.
timedelta
(
days
=
7
)
week_data
=
Log
.
objects
.
filter
(
start_time__range
=
[
from_week
,
datetime
.
datetime
.
now
()])
user_top_ten
=
week_data
.
values
(
'user'
)
.
annotate
(
times
=
Count
(
'user'
))
.
order_by
(
'-times'
)[:
10
]
user_top_ten
=
week_data
.
values
(
'user'
)
.
annotate
(
times
=
Count
(
'user'
))
.
order_by
(
'-times'
)[:
10
]
host_top_ten
=
week_data
.
values
(
'host'
)
.
annotate
(
times
=
Count
(
'host'
))
.
order_by
(
'-times'
)[:
10
]
host_top_ten
=
week_data
.
values
(
'host'
)
.
annotate
(
times
=
Count
(
'host'
))
.
order_by
(
'-times'
)[:
10
]
user_dic
,
host_dic
=
get_data
(
week_data
,
user_top_ten
,
'user'
),
get_data
(
week_data
,
host_top_ten
,
'host'
)
user_dic
,
host_dic
=
get_data
(
week_data
,
user_top_ten
,
'user'
),
get_data
(
week_data
,
host_top_ten
,
'host'
)
...
@@ -180,17 +122,16 @@ def index(request):
...
@@ -180,17 +122,16 @@ def index(request):
# perm apply latest 10
# perm apply latest 10
perm_apply_10
=
Apply
.
objects
.
order_by
(
'-date_add'
)[:
10
]
perm_apply_10
=
Apply
.
objects
.
order_by
(
'-date_add'
)[:
10
]
login_more_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[
10
:
20
]
# latest 10 login
# latest 10 login
login_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[:
10
]
login_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[:
10
]
login_more_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[
10
:
21
]
# a week top 10
# a week top 10
for
user_info
in
user_top_ten
:
for
user_info
in
user_top_ten
:
username
=
user_info
.
get
(
'user'
)
username
=
user_info
.
get
(
'user'
)
last
=
Log
.
objects
.
filter
(
user
=
username
)
.
latest
(
'start_time'
)
last
=
Log
.
objects
.
filter
(
user
=
username
)
.
latest
(
'start_time'
)
user_info
[
'last'
]
=
last
user_info
[
'last'
]
=
last
print
user_top_ten
top
=
{
'user'
:
'活跃用户数'
,
'host'
:
'活跃主机数'
,
'times'
:
'登录次数'
}
top
=
{
'user'
:
'活跃用户数'
,
'host'
:
'活跃主机数'
,
'times'
:
'登录次数'
}
top_dic
=
{}
top_dic
=
{}
...
...
static/js/base.js
View file @
d6171f7f
...
@@ -70,10 +70,13 @@ function move(from, to, from_o, to_o) {
...
@@ -70,10 +70,13 @@ function move(from, to, from_o, to_o) {
});
});
}
}
function
move_left
(
from
,
to
)
{
function
move_left
(
from
,
to
,
from_o
,
to_o
)
{
$
(
"#"
+
from
+
" option"
).
each
(
function
()
{
$
(
"#"
+
from
+
" option"
).
each
(
function
()
{
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
$
(
"#"
+
to
).
append
(
this
);
$
(
"#"
+
to
).
append
(
this
);
if
(
typeof
from_o
!==
'undefined'
){
$
(
"#"
+
to_o
).
append
(
$
(
"#"
+
from_o
+
" option[value='"
+
this
.
value
+
"']"
));
}
}
}
$
(
this
).
attr
(
"selected"
,
'true'
);
$
(
this
).
attr
(
"selected"
,
'true'
);
});
});
...
...
templates/jasset/group_add.html
View file @
d6171f7f
...
@@ -2,6 +2,21 @@
...
@@ -2,6 +2,21 @@
{% load mytags %}
{% load mytags %}
{% block content %}
{% block content %}
{% include 'nav_cat_bar.html' %}
{% include 'nav_cat_bar.html' %}
<script
type=
"text/javascript"
>
function
search_ip
(
text
,
noselect
,
total
){
$
(
"#"
+
noselect
).
children
().
each
(
function
(){
$
(
this
).
remove
();
});
$
(
"#"
+
total
).
children
().
each
(
function
(){
if
(
$
(
this
).
text
().
search
(
text
)
!=
-
1
){
$
(
"#"
+
noselect
).
append
(
$
(
this
).
clone
())
}
})
}
</script>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
...
@@ -26,6 +41,19 @@
...
@@ -26,6 +41,19 @@
</a>
</a>
</div>
</div>
</div>
</div>
<select
id=
"assets_total"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{% for asset in posts %}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<select
id=
"asset_select_total"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{% for asset in eposts %}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
{% if emg %}
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
...
@@ -63,35 +91,40 @@
...
@@ -63,35 +91,40 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
过滤
</label>
<label
for=
"hosts"
class=
"col-lg-2 control-label"
>
主机
</label>
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-3"
>
<input
id=
"noselect"
class=
"form-control"
oninput=
"search_ip(this.value, 'assets', 'assets_total')"
>
<select
multiple=
"multiple"
id=
"id_domains_filter"
name=
"domains_filter"
style=
"display: none;"
>
</div>
</select>
<div
class=
"col-sm-1"
>
<div
class=
"input-group"
style=
"padding-bottom: 5px"
>
</div>
<input
type=
"text"
size=
"19"
class=
"form-control input-sm"
id=
"search"
name=
"keyword"
placeholder=
"过滤"
>
<div
id=
"select"
class=
"col-sm-3"
>
</div>
<input
class=
"form-control"
oninput=
"search_ip(this.value, 'asset_select', 'asset_select_total')"
>
<select
id=
"hosts"
size=
"12"
class=
"form-control m-b"
multiple
>
</div>
</div>
<div
class=
"form-group"
>
<label
for=
""
class=
"col-sm-2 control-label"
>
主机
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"assets"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for post in posts %}
{% for post in posts %}
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
</div>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-xm btn-white"
onclick=
"move('hosts', 'hosts_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
<div
class=
"col-sm-1"
>
<button
type=
"button"
class=
"btn btn-xm btn-white"
onclick=
"move_left('hosts_selected', 'hosts')"
><i
class=
"fa fa-chevron-left"
></i></button>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
</div>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move_left('asset_select', 'assets', 'asset_select_total', 'assets_total')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
</div>
<h4
style=
"padding-bottom: 5px"
>
已选中主机
</h4>
<div>
<div
class=
"col-sm-3"
>
<select
id=
"hosts_selected"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
>
<div>
{% for post in eposts %}
<select
id=
"asset_select"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
></select>
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -105,7 +138,7 @@
...
@@ -105,7 +138,7 @@
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"submit"
onclick=
"on_submit('groups_selected') "
>
提交
</button>
<button
class=
"btn btn-primary"
id=
"submit_button"
type=
"submit"
onclick=
"on_submit('groups_selected') "
>
提交
</button>
</div>
</div>
</div>
</div>
</form>
</form>
...
@@ -116,6 +149,15 @@
...
@@ -116,6 +149,15 @@
</div>
</div>
<script>
<script>
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#assetForm option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
});
})
$
(
'#assetForm'
).
validator
({
$
(
'#assetForm'
).
validator
({
timely
:
2
,
timely
:
2
,
theme
:
"yellow_right_effect"
,
theme
:
"yellow_right_effect"
,
...
@@ -140,15 +182,15 @@
...
@@ -140,15 +182,15 @@
})
})
}
}
$
(
'#search'
).
keyup
(
function
()
{
//
$('#search').keyup(function() {
var
$rows
=
$
(
'#hosts option'
);
//
var $rows = $('#hosts option');
var
val
=
$
.
trim
(
$
(
this
).
val
()).
replace
(
/ +/g
,
' '
).
toLowerCase
();
//
var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();
//
$rows
.
show
().
filter
(
function
()
{
//
$rows.show().filter(function() {
var
text
=
$
(
this
).
text
().
replace
(
/
\s
+/g
,
' '
).
toLowerCase
();
//
var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
return
!~
text
.
indexOf
(
val
);
//
return !~text.indexOf(val);
}).
hide
();
//
}).hide();
});
//
});
function
change_dept
(
dept_id
){
function
change_dept
(
dept_id
){
$
.
get
(
'/jasset/dept_host_ajax/'
,
$
.
get
(
'/jasset/dept_host_ajax/'
,
...
@@ -157,6 +199,7 @@
...
@@ -157,6 +199,7 @@
$
(
'#hosts'
).
html
(
data
)
$
(
'#hosts'
).
html
(
data
)
})
})
}
}
</script>
</script>
{% endblock %}
{% endblock %}
\ No newline at end of file
templates/jasset/group_detail.html
View file @
d6171f7f
...
@@ -75,7 +75,78 @@
...
@@ -75,7 +75,78 @@
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_form')"
/>
<input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_form')"
/>
</div>
</div>
{% include 'paginator.html' %}
<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 keyword %}
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?keyword={{ keyword }}&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 %}
{% ifequal show_first 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page=1&id={{ group.id }}"
title=
"第1页"
>
1...
</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ page }}&id={{ group.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ page }}&id={{ group.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ p.num_pages }}&id={{ group.id }}"
title=
"第{{ page }}页"
>
...{{ p.num_pages }}
</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?keyword={{ keyword }}&page={{ contacts.next_page_number }}&id={{ group.id }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
{% else %}
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts.previous_page_number }}&id={{ group.id }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page=1&id={{ group.id }}"
title=
"第1页"
>
1...
</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}&id={{ group.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}&id={{ group.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ p.num_pages }}&id={{ group.id }}"
title=
"第{{ page }}页"
>
...{{ p.num_pages }}
</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts.next_page_number }}&id={{ group.id }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
...
...
templates/jasset/group_edit.html
View file @
d6171f7f
...
@@ -2,13 +2,58 @@
...
@@ -2,13 +2,58 @@
{% load mytags %}
{% load mytags %}
{% block content %}
{% block content %}
{% include 'nav_cat_bar.html' %}
{% include 'nav_cat_bar.html' %}
<script
type=
"text/javascript"
>
function
search_ip
(
text
,
noselect
,
total
){
$
(
"#"
+
noselect
).
children
().
each
(
function
(){
$
(
this
).
remove
();
});
$
(
"#"
+
total
).
children
().
each
(
function
(){
if
(
$
(
this
).
text
().
search
(
text
)
!=
-
1
){
$
(
"#"
+
noselect
).
append
(
$
(
this
).
clone
())
}
})
}
</script>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox float-e-margins"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写主机组基本信息
</h5>
<h5>
填写主机组基本信息
</h5>
</div>
<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>
<select
id=
"assets_total"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{% for asset in posts %}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<select
id=
"asset_select_total"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{% for asset in eposts %}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
{% if emg %}
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
...
@@ -48,37 +93,46 @@
...
@@ -48,37 +93,46 @@
</div>
</div>
{% endifequal %}
{% endifequal %}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
过滤
</label>
<label
for=
"hosts"
class=
"col-lg-2 control-label"
>
主机
</label>
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-3"
>
<input
id=
"noselect"
class=
"form-control"
oninput=
"search_ip(this.value, 'assets', 'assets_total')"
>
<select
multiple=
"multiple"
id=
"id_domains_filter"
name=
"domains_filter"
style=
"display: none;"
>
</div>
</select>
<div
class=
"col-sm-1"
>
<div
class=
"input-group"
style=
"padding-bottom: 5px"
>
</div>
<input
type=
"text"
size=
"19"
class=
"form-control input-sm"
id=
"search"
name=
"keyword"
placeholder=
"过滤"
>
<div
id=
"select"
class=
"col-sm-3"
>
</div>
<input
class=
"form-control"
oninput=
"search_ip(this.value, 'asset_select', 'asset_select_total')"
>
<select
id=
"hosts"
size=
"12"
class=
"form-control m-b"
multiple
>
</div>
</div>
<div
class=
"form-group"
>
<label
for=
""
class=
"col-sm-2 control-label"
>
主机
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"assets"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for post in posts %}
{% for post in posts %}
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
</div>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-xm btn-white"
onclick=
"move('hosts', 'hosts_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
<div
class=
"col-sm-1"
>
<button
type=
"button"
class=
"btn btn-xm btn-white"
onclick=
"move_left('hosts_selected', 'hosts')"
><i
class=
"fa fa-chevron-left"
></i></button>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
</div>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move_left('asset_select', 'assets', 'asset_select_total', 'assets_total')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
</div
>
<h4
style=
"padding-bottom: 5px"
>
已选中主机
</h4>
<div
>
<div
class=
"col-sm-3"
>
<select
id=
"hosts_selected"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
>
<div
>
{% for post in eposts %}
<select
id=
"asset_select"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
>
<option
value=
"{{ post.id }}"
>
{{ post.ip }}
</option>
{% for asset in eposts %}
{% endfor %}
<option
value=
"{{ asset.id }}"
>
{{ asset.ip }}
</option>
</select>
{% endfor %}
</
div
>
</
select
>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -92,7 +146,7 @@
...
@@ -92,7 +146,7 @@
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"submit"
onclick=
"on_submit('groups_selected') "
>
提交
</button>
<button
class=
"btn btn-primary"
id=
"submit_button"
type=
"submit"
onclick=
"on_submit('groups_selected') "
>
提交
</button>
</div>
</div>
</div>
</div>
</form>
</form>
...
@@ -103,6 +157,15 @@
...
@@ -103,6 +157,15 @@
</div>
</div>
<script>
<script>
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#assetForm option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
});
})
$
(
'#assetForm'
).
validator
({
$
(
'#assetForm'
).
validator
({
timely
:
2
,
timely
:
2
,
theme
:
"yellow_right_effect"
,
theme
:
"yellow_right_effect"
,
...
@@ -127,16 +190,16 @@
...
@@ -127,16 +190,16 @@
})
})
}
}
$
(
'#search'
).
keyup
(
function
()
{
//
$('#search').keyup(function() {
var
$rows
=
$
(
'#hosts option'
);
//
var $rows = $('#hosts option');
console
.
log
(
$rows
);
//
console.log($rows);
var
val
=
$
.
trim
(
$
(
this
).
val
()).
replace
(
/ +/g
,
' '
).
toLowerCase
();
//
var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();
//
$rows
.
show
().
filter
(
function
()
{
//
$rows.show().filter(function() {
var
text
=
$
(
this
).
text
().
replace
(
/
\s
+/g
,
' '
).
toLowerCase
();
//
var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
return
!~
text
.
indexOf
(
val
);
//
return !~text.indexOf(val);
}).
hide
();
//
}).hide();
});
//
});
function
change_dept
(
dept_id
){
function
change_dept
(
dept_id
){
$
.
get
(
'/jasset/dept_host_ajax/'
,
$
.
get
(
'/jasset/dept_host_ajax/'
,
...
...
templates/jasset/idc_detail.html
View file @
d6171f7f
...
@@ -83,7 +83,78 @@
...
@@ -83,7 +83,78 @@
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_form')"
/>
<input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_form')"
/>
</div>
</div>
{% include 'paginator.html' %}
<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 keyword %}
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?keyword={{ keyword }}&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 %}
{% ifequal show_first 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page=1&id={{ idc.id }}"
title=
"第1页"
>
1...
</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?keyword={{ keyword }}&page={{ p.num_pages }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
...{{ p.num_pages }}
</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?keyword={{ keyword }}&page={{ contacts.next_page_number }}&id={{ idc.id }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
{% else %}
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts.previous_page_number }}&id={{ idc.id }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% ifequal show_first 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page=1&id={{ idc.id }}"
title=
"第1页"
>
1...
</a></li>
{% endifequal %}
{% for page in page_range %}
{% ifequal current_page page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% ifequal show_end 1 %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ p.num_pages }}&id={{ idc.id }}"
title=
"第{{ page }}页"
>
...{{ p.num_pages }}
</a></li>
{% endifequal %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts.next_page_number }}&id={{ idc.id }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
{% endif %}
</ul>
</div>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
...
...
templates/jperm/perm_apply.html
View file @
d6171f7f
{% extends 'base.html' %}
{% extends 'base.html' %}
{% block content %}
{% block content %}
{% include 'nav_cat_bar.html' %}
{% include 'nav_cat_bar.html' %}
<!--<h3 class="text-center">项目发布申请</h3>-->
<script
type=
"text/javascript"
>
function
search_ip
(
text
,
noselect
,
total
){
$
(
"#"
+
noselect
).
children
().
each
(
function
(){
$
(
this
).
remove
();
});
$
(
"#"
+
total
).
children
().
each
(
function
(){
if
(
$
(
this
).
text
().
search
(
text
)
!=
-
1
){
$
(
"#"
+
noselect
).
append
(
$
(
this
).
clone
())
}
})
}
</script>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"col-lg-10"
>
...
@@ -16,10 +29,6 @@
...
@@ -16,10 +29,6 @@
<i
class=
"fa fa-wrench"
></i>
<i
class=
"fa fa-wrench"
></i>
</a>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
</ul>
<a
class=
"close-link"
>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
<i
class=
"fa fa-times"
></i>
...
@@ -27,6 +36,18 @@
...
@@ -27,6 +36,18 @@
</div>
</div>
</div>
</div>
<select
id=
"assets_total"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{% for asset in posts %}
<option
value=
"{{ asset.ip }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<select
id=
"asset_select_total"
name=
"j_hosts"
class=
"form-control m-b"
size=
"12"
multiple
style=
"display: none"
>
{% for asset in eposts %}
<option
value=
"{{ asset.ip }}"
>
{{ asset.ip }}
</option>
{% endfor %}
</select>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
{% if emg %}
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
...
@@ -46,10 +67,10 @@
...
@@ -46,10 +67,10 @@
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
部门管理员
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"form-group"
id=
"j_da"
><label
class=
"col-sm-2 control-label"
>
部门管理员
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"radio"
>
<div
class=
"radio"
>
{% for da in dept_da %}
{% for da in dept_da %}
<label><input
type=
"radio"
value=
"{{ da.id }}"
id=
"da"
name=
"da"
>
{{ da }}
</label>
<label><input
type=
"radio"
value=
"{{ da.id }}"
name=
"da"
>
{{ da }}
</label>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</div>
...
@@ -68,35 +89,40 @@
...
@@ -68,35 +89,40 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<div>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
过滤
</label>
<label
for=
"groups"
class=
"col-lg-2 control-label"
>
主机
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-3"
>
<input
id=
"noselect"
class=
"form-control"
oninput=
"search_ip(this.value, 'assets', 'assets_total')"
>
<select
multiple=
"multiple"
id=
"id_domains_filter"
name=
"domains_filter"
style=
"display: none;"
>
</div>
</select>
<div
class=
"col-sm-1"
>
<div
class=
"input-group"
style=
"padding-bottom: 5px"
>
</div>
<input
type=
"text"
size=
"19"
class=
"form-control input-sm"
id=
"search"
name=
"keyword"
placeholder=
"过滤"
>
<div
id=
"select"
class=
"col-sm-3"
>
</div>
<input
class=
"form-control"
oninput=
"search_ip(this.value, 'asset_select', 'asset_select_total')"
>
<select
id=
"groups"
size=
"12"
class=
"form-control m-b"
multiple
>
</div>
</div>
<div
class=
"form-group"
>
<label
for=
""
class=
"col-sm-2 control-label"
>
主机
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-4"
>
<div>
<select
id=
"assets"
name=
"assets"
class=
"form-control m-b"
size=
"12"
multiple
>
{% for post in posts %}
{% for post in posts %}
<option
value=
"{{ post.ip }}"
>
{{ post.ip }}
</option>
<option
value=
"{{ post.ip }}"
>
{{ post.ip }}
</option>
{% endfor %}
{% endfor %}
</select>
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
</div>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-xm btn-white"
onclick=
"move('groups', 'groups_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
<div
class=
"col-sm-1"
>
<button
type=
"button"
class=
"btn btn-xm btn-white"
onclick=
"move_left('groups_selected', 'groups')"
><i
class=
"fa fa-chevron-left"
></i></button>
<div
class=
"btn-group"
style=
"margin-top: 60px;"
>
</div>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('assets', 'asset_select', 'assets_total', 'asset_select_total' )"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move_left('asset_select', 'assets', 'asset_select_total', 'assets_total')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
</div>
<h4
style=
"padding-bottom: 5px"
>
已选中主机
</h4>
<div>
<div
class=
"col-sm-3"
>
<select
id=
"groups_selected"
name=
"hosts"
class=
"form-control m-b"
size=
"12"
multiple
>
<div>
{% for post in eposts %}
<select
id=
"asset_select"
name=
"hosts"
class=
"form-control m-b"
size=
"12"
multiple
></select>
<option
value=
"{{ post.ip }}"
>
{{ post.ip }}
</option>
{% endfor %}
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -110,7 +136,7 @@
...
@@ -110,7 +136,7 @@
<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-5"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-primary"
type=
"submit"
>
提交
</button>
<button
class=
"btn btn-primary"
id=
"submit_button"
type=
"submit"
>
提交
</button>
</div>
</div>
</div>
</div>
</form>
</form>
...
@@ -121,6 +147,32 @@
...
@@ -121,6 +147,32 @@
</div>
</div>
<script>
<script>
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#assetForm option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
});
})
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"j_da"
:
{
rule
:
"required"
,
tip
:
"选择管理员"
,
ok
:
""
,
msg
:
{
required
:
"管理员必须选择!"
},
data
:
{
'data-ok'
:
"ok"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
var
$rows
=
$
(
'#groups option'
);
var
$rows
=
$
(
'#groups option'
);
$
(
'#search'
).
keyup
(
function
()
{
$
(
'#search'
).
keyup
(
function
()
{
var
val
=
$
.
trim
(
$
(
this
).
val
()).
replace
(
/ +/g
,
' '
).
toLowerCase
();
var
val
=
$
.
trim
(
$
(
this
).
val
()).
replace
(
/ +/g
,
' '
).
toLowerCase
();
...
...
templates/nav.html
View file @
d6171f7f
...
@@ -5,12 +5,6 @@
...
@@ -5,12 +5,6 @@
{% include 'nav_li_profile.html' %}
{% include 'nav_li_profile.html' %}
<li
id=
"index"
>
<li
id=
"index"
>
<a
href=
"/"
><i
class=
"fa fa-th-large"
></i>
<span
class=
"nav-label"
>
仪表盘
</span><span
class=
"label label-info pull-right"
></span></a>
<a
href=
"/"
><i
class=
"fa fa-th-large"
></i>
<span
class=
"nav-label"
>
仪表盘
</span><span
class=
"label label-info pull-right"
></span></a>
<!--<a href="index.html"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="index.html">Dashboard v.1</a></li>
<li ><a href="dashboard_2.html">Dashboard v.2</a></li>
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
</ul>-->
</li>
</li>
<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>
...
@@ -51,13 +45,6 @@
...
@@ -51,13 +45,6 @@
<li
class=
"apply_show online"
><a
href=
"/jperm/apply_show/online/"
>
权限审批
</a></li>
<li
class=
"apply_show online"
><a
href=
"/jperm/apply_show/online/"
>
权限审批
</a></li>
</ul>
</ul>
</li>
</li>
{#
<li
id=
"jlog"
>
#}
{#
<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"
>
#}
{#
<li
id=
"log_list"
><a
href=
"/jlog/log_list/online/"
>
查看日志
</a></li>
#}
{#
<li
id=
"log_detail"
><a
href=
"/jlog/log_detail/"
>
日志分析
</a></li>
#}
{#
</ul>
#}
{#
</li>
#}
<li
id=
"jlog"
>
<li
id=
"jlog"
>
<a
href=
"/jlog/log_list/online/"
><i
class=
"fa fa-files-o"
></i>
<span
class=
"nav-label"
>
日志审计
</span><span
class=
"label label-info pull-right"
></span></a>
<a
href=
"/jlog/log_list/online/"
><i
class=
"fa fa-files-o"
></i>
<span
class=
"nav-label"
>
日志审计
</span><span
class=
"label label-info pull-right"
></span></a>
</li>
</li>
...
@@ -76,12 +63,6 @@
...
@@ -76,12 +63,6 @@
{% include 'nav_li_profile.html' %}
{% include 'nav_li_profile.html' %}
<li
id=
"index"
>
<li
id=
"index"
>
<a
href=
"/"
><i
class=
"fa fa-th-large"
></i>
<span
class=
"nav-label"
>
仪表盘
</span><span
class=
"label label-info pull-right"
></span></a>
<a
href=
"/"
><i
class=
"fa fa-th-large"
></i>
<span
class=
"nav-label"
>
仪表盘
</span><span
class=
"label label-info pull-right"
></span></a>
<!--<a href="index.html"><i class="fa fa-th-large"></i> <span class="nav-label">仪表盘</span> <span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li><a href="index.html">Dashboard v.1</a></li>
<li ><a href="dashboard_2.html">Dashboard v.2</a></li>
<li ><a href="dashboard_3.html">Dashboard v.3</a></li>
</ul>-->
</li>
</li>
<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>
...
...
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