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
9cfe6c56
Commit
9cfe6c56
authored
Apr 11, 2015
by
halcyon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hehe
parent
30fd1600
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
203 additions
and
226 deletions
+203
-226
urls.py
jasset/urls.py
+16
-15
views.py
jasset/views.py
+0
-0
urls.py
jlog/urls.py
+2
-3
views.py
jlog/views.py
+24
-71
models.py
jperm/models.py
+1
-1
urls.py
jperm/urls.py
+1
-0
views.py
jperm/views.py
+34
-43
jumpserver.conf
jumpserver.conf
+14
-5
api.py
jumpserver/api.py
+3
-1
context_processors.py
jumpserver/context_processors.py
+12
-6
settings.py
jumpserver/settings.py
+5
-5
mytags.py
jumpserver/templatetags/mytags.py
+12
-0
views.py
jumpserver/views.py
+9
-1
index.html
templates/index.html
+34
-7
group_list.html
templates/jasset/group_list.html
+6
-1
host_detail.html
templates/jasset/host_detail.html
+0
-0
host_list.html
templates/jasset/host_list.html
+1
-1
idc_list.html
templates/jasset/idc_list.html
+15
-0
log_offline.html
templates/jlog/log_offline.html
+2
-12
log_online.html
templates/jlog/log_online.html
+3
-4
perm_apply_search.html
templates/jperm/perm_apply_search.html
+2
-4
perm_log_online.html
templates/jperm/perm_log_online.html
+4
-0
nav.html
templates/nav.html
+2
-2
nav_bar_header.html
templates/nav_bar_header.html
+1
-44
npm-debug.log
websocket/npm-debug.log
+0
-0
No files found.
jasset/urls.py
View file @
9cfe6c56
...
...
@@ -3,24 +3,24 @@ from django.conf.urls import patterns, include, url
from
jasset.views
import
*
urlpatterns
=
patterns
(
''
,
url
(
r'^host_add/$'
,
add_host
),
url
(
r"^host_add_multi/$"
,
add_host_multi
),
url
(
r'^host_list/$'
,
list_ho
st
),
url
(
r'^host_add/$'
,
host_add
),
url
(
r"^host_add_multi/$"
,
host_add_batch
),
url
(
r'^host_list/$'
,
host_li
st
),
url
(
r'^search/$'
,
host_search
),
url
(
r"^
(\d+.\d+.\d+.\d+)/$"
,
jlist_ip
),
url
(
r'^idc_add/$'
,
add_idc
),
url
(
r'^idc_list/$'
,
list_idc
),
url
(
r'^idc_edit/$'
,
edit_idc
),
url
(
r'^idc_detail/$'
,
detail_idc
),
url
(
r'^idc_del/
(\w+)/$'
,
del_idc
),
url
(
r'^group_add/$'
,
add_group
),
url
(
r'^group_edit/$'
,
edit_group
),
url
(
r'^group_list/$'
,
list_group
),
url
(
r'^group_detail/$'
,
detail_group
),
url
(
r"^
host_detail/$"
,
host_detail
),
url
(
r'^idc_add/$'
,
idc_add
),
url
(
r'^idc_list/$'
,
idc_list
),
url
(
r'^idc_edit/$'
,
idc_edit
),
url
(
r'^idc_detail/$'
,
idc_detail
),
url
(
r'^idc_del/
$'
,
idc_del
),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_edit/$'
,
group_edit
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_detail/$'
,
group_detail
),
url
(
r'^group_del_host/(\w+)/$'
,
group_del_host
),
url
(
r'^group_del/(\w+)/$'
,
group_del
),
url
(
r'^host_del/(\w+)/$'
,
host_del
),
url
(
r'^host_edit/$'
,
host_edit
),
url
(
r'^host_edit/batch/$'
,
batch_host_edit
),
url
(
r'^host_edit_common/batch/$'
,
batch_host_edit_common
),
url
(
r'^host_edit/batch/$'
,
host_edit_batch
),
url
(
r'^host_edit_common/batch/$'
,
host_edit_common_batch
),
)
\ No newline at end of file
jasset/views.py
View file @
9cfe6c56
This diff is collapsed.
Click to expand it.
jlog/urls.py
View file @
9cfe6c56
...
...
@@ -3,9 +3,8 @@ from django.conf.urls import patterns, include, url
from
jlog.views
import
*
urlpatterns
=
patterns
(
''
,
url
(
r'^$'
,
log_list_online
),
url
(
r'^log_list/online/$'
,
log_list_online
),
url
(
r'^log_list/offline/$'
,
log_list_offline
),
url
(
r'^$'
,
log_list
),
url
(
r'^log_list/(\w+)/$'
,
log_list
),
url
(
r'^log_kill/(\d+)'
,
log_kill
),
url
(
r'^history/$'
,
log_history
),
url
(
r'^search/$'
,
log_search
),
...
...
jlog/views.py
View file @
9cfe6c56
...
...
@@ -13,82 +13,54 @@ from connect import BASE_DIR
from
jlog.models
import
Log
from
jumpserver.views
import
pages
from
juser.models
import
User
,
DEPT
from
jumpserver.api
import
get_user_dept
,
is_super_user
,
is_group_admin
,
is_common_user
from
jumpserver.api
import
get_user_dept
,
is_super_user
,
is_group_admin
,
is_common_user
,
require_admin
,
require_login
CONF
=
ConfigParser
.
ConfigParser
()
CONF
.
read
(
'
%
s/jumpserver.conf'
%
BASE_DIR
)
def
log_list_online
(
request
):
header_title
,
path1
,
path2
=
u'查看日志'
,
u'查看日志'
,
u'在线用户'
keyword
=
request
.
GET
.
get
(
'keyword'
)
web_socket_host
=
CONF
.
get
(
'websocket'
,
'web_socket_host'
)
dept_id
=
get_user_dept
(
request
)
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
def
get_user_log
(
request
,
keyword
,
env
,
username
,
dept_name
):
if
is_super_user
(
request
):
if
keyword
:
posts
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
0
)
.
order_by
(
'-start_time'
)
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
0
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
posts
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
elif
is_group_admin
(
request
):
if
keyword
:
posts
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
0
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
.
filter
(
is_finished
=
env
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
0
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
posts
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
elif
is_common_user
(
request
):
if
keyword
:
posts
=
Log
.
objects
.
filter
(
user
=
username
)
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
0
)
.
order_by
(
'-start_time'
)
.
filter
(
is_finished
=
env
)
.
order_by
(
'-start_time'
)
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
0
)
.
filter
(
user
=
username
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jlog/log_online.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
posts
=
Log
.
objects
.
filter
(
is_finished
=
env
)
.
filter
(
user
=
username
)
.
order_by
(
'-start_time'
)
return
posts
def
log_list_offline
(
request
):
header_title
,
path1
,
path2
=
u'查看日志'
,
u'查看日志'
,
u'历史记录'
keyword
=
request
.
GET
.
get
(
'keyword'
)
@require_login
def
log_list
(
request
,
offset
):
header_title
,
path1
,
path2
=
u'查看日志'
,
u'查看日志'
,
u'在线用户'
web_socket_host
=
CONF
.
get
(
'websocket'
,
'web_socket_host'
)
env_dic
=
{
'online'
:
0
,
'offline'
:
1
}
env
=
env_dic
[
offset
]
keyword
=
request
.
GET
.
get
(
'keyword'
)
dept_id
=
get_user_dept
(
request
)
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
if
is_super_user
(
request
):
if
keyword
:
posts
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
1
)
.
order_by
(
'-start_time'
)
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
1
)
.
order_by
(
'-start_time'
)
posts
=
get_user_log
(
request
,
keyword
,
env
,
username
,
dept_name
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
elif
is_group_admin
(
request
):
if
keyword
:
posts
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
1
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
1
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
elif
is_common_user
(
request
):
if
keyword
:
posts
=
Log
.
objects
.
filter
(
user
=
username
)
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
1
)
.
order_by
(
'-start_time'
)
else
:
posts
=
Log
.
objects
.
filter
(
is_finished
=
1
)
.
filter
(
user
=
username
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jlog/log_offline.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jlog/log_
%
s.html'
%
offset
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_admin
def
log_kill
(
request
,
offset
):
pid
=
offset
if
pid
:
...
...
@@ -97,6 +69,7 @@ def log_kill(request, offset):
return
HttpResponseRedirect
(
'jlog/log_offline.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_login
def
log_history
(
request
):
if
request
.
method
==
'GET'
:
id
=
request
.
GET
.
get
(
'id'
,
0
)
...
...
@@ -109,37 +82,17 @@ def log_history(request):
return
HttpResponse
(
content
)
@require_login
def
log_search
(
request
):
keyword
=
request
.
GET
.
get
(
'keyword'
)
env
=
request
.
GET
.
get
(
'env'
)
offset
=
request
.
GET
.
get
(
'env'
)
dept_id
=
get_user_dept
(
request
)
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
if
is_super_user
(
request
):
if
env
==
'online'
:
posts
=
contact_list
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
0
)
.
order_by
(
'-start_time'
)
elif
env
==
'offline'
:
posts
=
contact_list
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
1
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
elif
is_group_admin
(
request
):
if
env
==
'online'
:
posts
=
contact_list
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
0
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
elif
env
==
'offline'
:
posts
=
contact_list
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
1
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-start_time'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
elif
is_common_user
(
request
):
if
env
==
'online'
:
posts
=
contact_list
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
0
)
.
filter
(
user
=
username
)
.
order_by
(
'-start_time'
)
elif
env
==
'offline'
:
posts
=
contact_list
=
Log
.
objects
.
filter
(
Q
(
user__contains
=
keyword
)
|
Q
(
host__contains
=
keyword
))
\
.
filter
(
is_finished
=
1
)
.
filter
(
user
=
username
)
.
order_by
(
'-start_time'
)
env_dic
=
{
'online'
:
0
,
'offline'
:
1
}
env
=
env_dic
[
offset
]
posts
=
get_user_log
(
request
,
keyword
,
env
,
username
,
dept_name
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jlog/log_search.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
jperm/models.py
View file @
9cfe6c56
...
...
@@ -45,7 +45,7 @@ class Apply(models.Model):
asset
=
models
.
CharField
(
max_length
=
500
)
comment
=
models
.
TextField
(
blank
=
True
,
null
=
True
)
status
=
models
.
IntegerField
(
max_length
=
2
)
date_add
=
models
.
DateTimeField
(
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
date_add
=
models
.
DateTimeField
(
null
=
True
)
date_end
=
models
.
DateTimeField
(
null
=
True
)
def
__unicode__
(
self
):
...
...
jperm/urls.py
View file @
9cfe6c56
...
...
@@ -28,5 +28,6 @@ urlpatterns = patterns('jperm.views',
(
r'^apply_show/(\w+)/$'
,
'perm_apply_log'
),
(
r'^apply_exec/$'
,
'perm_apply_exec'
),
(
r'^apply_info/$'
,
'perm_apply_info'
),
(
r'^apply_del/$'
,
'perm_apply_del'
),
(
r'^apply_search/$'
,
'perm_apply_search'
),
)
jperm/views.py
View file @
9cfe6c56
# coding: utf-8
import
sys
reload
(
sys
)
sys
.
setdefaultencoding
(
'utf8'
)
from
django.core.mail
import
send_mail
from
django.shortcuts
import
render_to_response
from
django.template
import
RequestContext
...
...
@@ -13,6 +11,12 @@ from django.db.models import Q
from
jumpserver.api
import
*
CONF
=
ConfigParser
()
CONF
.
read
(
'
%
s/jumpserver.conf'
%
BASE_DIR
)
send_ip
=
CONF
.
get
(
'base'
,
'ip'
)
send_port
=
CONF
.
get
(
'base'
,
'port'
)
def
asset_cmd_groups_get
(
asset_groups_select
=
''
,
cmd_groups_select
=
''
):
asset_groups_select_list
=
[]
cmd_groups_select_list
=
[]
...
...
@@ -653,9 +657,9 @@ def perm_apply(request):
group_lis
=
', '
.
join
(
group
)
hosts_lis
=
', '
.
join
(
hosts
)
time_now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
Apply
.
objects
.
create
(
applyer
=
applyer
,
dept
=
dept
,
bisgroup
=
group
,
asset
=
hosts
,
status
=
0
,
comment
=
comment
)
uuid
=
Apply
.
objects
.
get
(
applyer
=
applyer
,
asset
=
hosts
,
comment
=
comment
)
.
uuid
url
=
"http://
127.0.0.1:8000/jperm/apply_exec/?uuid=
%
s"
%
uuid
a
=
Apply
.
objects
.
create
(
applyer
=
applyer
,
dept
=
dept
,
bisgroup
=
group
,
date_add
=
datetime
.
datetime
.
now
()
,
asset
=
hosts
,
status
=
0
,
comment
=
comment
)
uuid
=
a
.
uuid
url
=
"http://
%
s:
%
s/jperm/apply_exec/?uuid=
%
s"
%
(
send_ip
,
send_port
,
uuid
)
mail_msg
=
"""
Hi,
%
s:
有新的权限申请, 详情如下:
...
...
@@ -664,12 +668,12 @@ def perm_apply(request):
申请的主机:
%
s
申请时间:
%
s
申请说明:
%
s
请及时审批, 审批完成后
点击以下链接
,告知申请人。
请及时审批, 审批完成后
, 点击以下链接或登录授权管理-权限审批页面点击确认键
,告知申请人。
%
s
"""
%
(
da
.
username
,
applyer
,
group_lis
,
hosts_lis
,
time_now
,
comment
,
url
)
send_mail
(
mail_title
,
mail_msg
,
'j
umpserver@163.com
'
,
[
mail_address
],
fail_silently
=
False
)
send_mail
(
mail_title
,
mail_msg
,
'j
kfunshion@fun.tv
'
,
[
mail_address
],
fail_silently
=
False
)
smg
=
"提交成功,已发邮件通知部门管理员。"
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
))
...
...
@@ -679,6 +683,8 @@ def perm_apply(request):
def
perm_apply_exec
(
request
):
header_title
,
path1
,
path2
=
u'主机权限申请'
,
u'权限管理'
,
u'审批完成'
uuid
=
request
.
GET
.
get
(
'uuid'
)
user_id
=
request
.
session
.
get
(
'user_id'
)
approver
=
User
.
objects
.
get
(
id
=
user_id
)
.
name
if
uuid
:
p_apply
=
Apply
.
objects
.
filter
(
uuid
=
str
(
uuid
))
q_apply
=
Apply
.
objects
.
get
(
uuid
=
str
(
uuid
))
...
...
@@ -689,7 +695,7 @@ def perm_apply_exec(request):
user
=
User
.
objects
.
get
(
username
=
q_apply
.
applyer
)
mail_address
=
user
.
email
time_now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
p_apply
.
update
(
status
=
1
,
date_end
=
time_now
)
p_apply
.
update
(
status
=
1
,
approver
=
approver
,
date_end
=
time_now
)
mail_title
=
'
%
s - 权限审批完成'
%
q_apply
.
applyer
mail_msg
=
"""
Hi,
%
s:
...
...
@@ -699,7 +705,7 @@ def perm_apply_exec(request):
smg
=
'授权完成, 已邮件通知申请人, 十秒钟后返回首页'
return
render_to_response
(
'jperm/perm_apply_exec.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
else
:
smg
=
'没有此授权, 十秒钟后返回首页'
smg
=
'没有此授权
记录
, 十秒钟后返回首页'
return
render_to_response
(
'jperm/perm_apply_exec.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
...
...
@@ -735,55 +741,40 @@ def perm_apply_log(request, offset):
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
if
offset
==
'online'
:
posts
=
get_apply_posts
(
request
,
0
,
username
,
dept_name
,
keyword
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jperm/perm_log_online.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
elif
offset
==
'offline'
:
posts
=
get_apply_posts
(
request
,
1
,
username
,
dept_name
,
keyword
)
status_dic
=
{
'online'
:
0
,
'offline'
:
1
}
status
=
status_dic
[
offset
]
posts
=
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jperm/perm_log_offline.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
return
render_to_response
(
'jperm/perm_log_
%
s.html'
%
offset
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_login
def
perm_apply_info
(
request
):
uuid
=
request
.
GET
.
get
(
'uuid'
)
post
=
Apply
.
objects
.
get
(
uuid
=
uuid
)
return
render_to_response
(
'jperm/perm_apply_info.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_admin
def
perm_apply_del
(
request
):
uuid
=
request
.
GET
.
get
(
'uuid'
)
u_apply
=
Apply
.
objects
.
filter
(
uuid
=
uuid
)
if
u_apply
:
u_apply
.
delete
()
return
HttpResponseRedirect
(
'/jperm/apply_show/online/'
)
@require_login
def
perm_apply_search
(
request
):
keyword
=
request
.
GET
.
get
(
'keyword'
)
env
=
request
.
GET
.
get
(
'env'
)
offset
=
request
.
GET
.
get
(
'env'
)
dept_id
=
get_user_dept
(
request
)
dept_name
=
DEPT
.
objects
.
get
(
id
=
dept_id
)
.
name
user_id
=
request
.
session
.
get
(
'user_id'
)
username
=
User
.
objects
.
get
(
id
=
user_id
)
.
username
if
is_super_user
(
request
):
if
env
==
'online'
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
0
)
.
order_by
(
'-date_add'
)
elif
env
==
'offline'
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
1
)
.
order_by
(
'-date_add'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
elif
is_group_admin
(
request
):
if
env
==
'online'
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
0
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-date_add'
)
elif
env
==
'offline'
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
1
)
.
filter
(
dept_name
=
dept_name
)
.
order_by
(
'-date_add'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
elif
is_common_user
(
request
):
if
env
==
'online'
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
0
)
.
filter
(
user
=
username
)
.
order_by
(
'-date_add'
)
elif
env
==
'offline'
:
posts
=
Apply
.
objects
.
filter
(
Q
(
applyer__contains
=
keyword
)
|
Q
(
approver__contains
=
keyword
))
\
.
filter
(
status
=
1
)
.
filter
(
applyer
=
username
)
.
order_by
(
'-date_add'
)
status_dic
=
{
'online'
:
0
,
'offline'
:
1
}
status
=
status_dic
[
offset
]
posts
=
get_apply_posts
(
request
,
status
,
username
,
dept_name
,
keyword
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jperm/perm_apply_search.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
...
...
jumpserver.conf
View file @
9cfe6c56
#coding: utf8
[
base
]
ip
=
192
.
168
.
173
.
129
port
=
80
[
db
]
host
=
127
.
0
.
0
.
1
port
=
3306
...
...
@@ -7,6 +12,7 @@ user = jumpserver
password
=
mysql234
database
=
jumpserver
[
ldap
]
ldap_enable
=
1
host_url
=
ldap
://
127
.
0
.
0
.
1
:
389
...
...
@@ -14,15 +20,18 @@ base_dn = dc=jumpserver, dc=org
root_dn
=
cn
=
admin
,
dc
=
jumpserver
,
dc
=
org
root_pw
=
secret234
[
websocket
]
web_socket_host
=
127
.
0
.
0
.
1
:
3000
web_socket_host
=
192
.
168
.
173
.
129
:
3000
[
web
]
key
=
88
aaaf7ffe3c6c04
[
mail
]
email_host
=
'mail.funshion.com'
email_port
=
'25'
email_host_user
=
'jkfunshion'
email_host_password
=
'jkmail%'
email_host
=
mail
.
funshion
.
com
email_port
=
25
email_host_user
=
jkfunshion
email_host_password
=
jkmail
%
email_use_tls
=
False
jumpserver/api.py
View file @
9cfe6c56
...
...
@@ -288,8 +288,9 @@ def user_perm_asset_api(username):
asset_group_list
=
user_perm_group_api
(
user
)
for
asset_group
in
asset_group_list
:
asset_list
.
extend
(
asset_group
.
asset_set
.
all
())
asset_list
=
list
(
set
(
asset_list
))
return
asset_list
else
:
return
[]
...
...
@@ -307,6 +308,7 @@ def asset_perm_api(asset):
user_permed_list
=
[]
for
user_group
in
user_group_list
:
user_permed_list
.
extend
(
user_group
.
user_set
.
all
())
user_permed_list
=
list
(
set
(
user_permed_list
))
return
user_permed_list
...
...
jumpserver/context_processors.py
View file @
9cfe6c56
...
...
@@ -9,16 +9,22 @@ def name_proc(request):
if
role_id
==
2
:
user_total_num
=
User
.
objects
.
all
()
.
count
()
user_active_num
=
User
.
objects
.
filter
()
.
count
()
host_total_num
=
Asset
.
objects
.
all
()
.
count
()
host_active_num
=
Asset
.
objects
.
filter
(
is_active
=
True
)
.
count
()
else
:
user
,
dept
=
get_session_user_dept
(
request
)
user_total_num
=
dept
.
user_set
.
all
()
.
count
()
user_active_num
=
dept
.
user_set
.
filter
(
is_active
=
True
)
.
count
()
host_total_num
=
Asset
.
objects
.
all
()
.
count
()
host_active_num
=
Asset
.
objects
.
filter
(
is_active
=
True
)
.
count
()
host_total_num
=
dept
.
asset_set
.
all
()
.
count
()
host_active_num
=
dept
.
asset_set
.
all
()
.
filter
(
is_active
=
True
)
.
count
()
request
.
session
.
set_expiry
(
3600
)
return
{
'session_user_id'
:
user_id
,
'session_role_id'
:
role_id
,
'user_total_num'
:
user_total_num
,
'user_active_num'
:
user_active_num
,
'host_total_num'
:
host_total_num
,
'host_active_num'
:
host_active_num
}
info_dic
=
{
'session_user_id'
:
user_id
,
'session_role_id'
:
role_id
,
'user_total_num'
:
user_total_num
,
'user_active_num'
:
user_active_num
,
'host_total_num'
:
host_total_num
,
'host_active_num'
:
host_active_num
}
return
info_dic
jumpserver/settings.py
View file @
9cfe6c56
...
...
@@ -24,11 +24,11 @@ DB_PASSWORD = config.get('db', 'password')
DB_DATABASE
=
config
.
get
(
'db'
,
'database'
)
# mail config
EMAIL_HOST
=
'mail.funshion.com'
EMAIL_PORT
=
'25'
EMAIL_HOST_USER
=
'jkfunshion'
EMAIL_HOST_PASSWORD
=
'jkmail
%
'
EMAIL_USE_TLS
=
False
EMAIL_HOST
=
config
.
get
(
'mail'
,
'email_host'
)
EMAIL_PORT
=
config
.
get
(
'mail'
,
'email_port'
)
EMAIL_HOST_USER
=
config
.
get
(
'mail'
,
'email_host_user'
)
EMAIL_HOST_PASSWORD
=
config
.
get
(
'mail'
,
'email_host_password'
)
EMAIL_USE_TLS
=
config
.
getboolean
(
'mail'
,
'email_use_tls'
)
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
...
...
jumpserver/templatetags/mytags.py
View file @
9cfe6c56
...
...
@@ -200,6 +200,18 @@ def ast_to_list(lis):
return
restr
@register.filter
(
name
=
'get_group_count'
)
def
get_group_count
(
post
,
dept
):
count
=
post
.
asset_set
.
filter
(
dept
=
dept
)
.
count
()
return
count
@register.filter
(
name
=
'get_idc_count'
)
def
get_idc_count
(
post
,
dept
):
count
=
post
.
asset_set
.
filter
(
dept
=
dept
)
.
count
()
return
count
@register.filter
(
name
=
'ast_to_list_1'
)
def
ast_to_list_1
(
lis
):
return
ast
.
literal_eval
(
lis
)
...
...
jumpserver/views.py
View file @
9cfe6c56
...
...
@@ -109,6 +109,7 @@ def admin_index(request):
# 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
:
...
...
@@ -148,9 +149,15 @@ def index(request):
active_hosts
=
Asset
.
objects
.
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_host
=
format
(
active_hosts
.
count
()
/
hosts
.
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
)
...
...
@@ -170,6 +177,7 @@ def index(request):
# perm apply latest 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
login_10
=
Log
.
objects
.
order_by
(
'-start_time'
)[:
10
]
...
...
templates/index.html
View file @
9cfe6c56
...
...
@@ -89,6 +89,10 @@
<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"
></ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
...
...
@@ -153,7 +157,29 @@
{% endfor %}
</div>
<button
class=
"btn btn-primary btn-block m-t"
><i
class=
"fa fa-arrow-down"
></i>
更多
</button>
<button
id=
"show"
class=
"btn btn-primary btn-block m-t"
><i
class=
"fa fa-arrow-down"
></i>
更多
</button>
<div
id=
'more'
style=
"display: none"
>
<br/>
<div
class=
"feed-activity-list"
>
{% for login in login_more_10 %}
<div
class=
"feed-element"
>
<a
href=
"profile.html"
class=
"pull-left"
>
<img
alt=
"image"
class=
"img-circle"
src=
"/static/img/root.png"
>
</a>
<div
class=
"media-body "
>
{% ifequal login.is_finished 0 %}
<small
class=
"pull-right text-navy"
>
{{ login.start_time|naturaltime }}
</small>
{% else %}
<small
class=
"pull-right"
>
{{ login.start_time|naturaltime }}
</small>
{% endifequal %}
<strong>
{{ login.user }}
</strong>
登录了{{ login.host }}
<br>
<small
class=
"text-muted"
>
{{ login.start_time }}
</small>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
...
...
@@ -172,12 +198,7 @@
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
Config option 1
</a>
</li>
<li><a
href=
"#"
>
Config option 2
</a>
</li>
</ul>
<ul
class=
"dropdown-menu dropdown-user"
></ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
...
...
@@ -218,6 +239,12 @@
</div>
<script>
$
(
document
).
ready
(
function
(){
$
(
'#show'
).
click
(
function
(){
$
(
'#show'
).
css
(
'display'
,
'none'
);
$
(
'#more'
).
css
(
'display'
,
'block'
);
})
})
var
cate
=
{{
li_str
|
safe
}};
$
(
function
()
{
$
(
'#top10'
).
highcharts
({
...
...
templates/jasset/group_list.html
View file @
9cfe6c56
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
...
...
@@ -40,12 +41,16 @@
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
<td
class=
"text-center"
>
{{ post.name }}
</td>
<td
class=
"text-center"
>
{{ post.dept.name }}
</td>
{% ifequal session_role_id 2 %}
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
>
{{ post.asset_set.count }}
</a>
</td>
{% else %}
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
>
{{ post|get_group_count:dept }}
</a>
</td>
{% endifequal %}
<td
class=
"text-center"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/group_detail/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
详情
</a>
<a
href=
"/jasset/group_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/group_del/{{ post.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
<a
href=
"/jasset/group_del/{{ post.id }}
/
"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</tr>
{% endfor %}
...
...
templates/jasset/host_detail.html
0 → 100644
View file @
9cfe6c56
This diff is collapsed.
Click to expand it.
templates/jasset/host_list.html
View file @
9cfe6c56
...
...
@@ -73,7 +73,7 @@
<td
class=
"text-center"
name=
"j_active"
>
{{ post.is_active|bool2str }}
</td>
<td
class=
"text-center"
name=
"j_comment"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<a
value=
"/jasset/{{ post.ip }}/"
class=
"iframe
btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"/jasset/host_detail/?id={{ post.id }}"
class=
"
btn btn-xs btn-primary"
>
详情
</a>
{% ifnotequal session_role_id 0 %}
<a
href=
"/jasset/host_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/host_del/{{ post.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
...
...
templates/jasset/idc_list.html
View file @
9cfe6c56
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
...
...
@@ -8,7 +9,9 @@
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-content"
>
<div
class=
""
>
{% ifequal session_role_id 2 %}
<a
target=
"_blank"
href=
"/jasset/idc_add"
class=
"btn btn-sm btn-primary "
>
添加IDC
</a>
{% endifequal %}
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
...
...
@@ -26,7 +29,9 @@
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
{% ifequal session_role_id 2 %}
<th
class=
"text-center"
><input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
></th>
{% endifequal %}
<th
class=
"text-center"
>
机房名
</th>
<th
class=
"text-center"
>
主机数量
</th>
<th
class=
"text-center"
>
备注
</th>
...
...
@@ -36,14 +41,22 @@
<tbody>
{% for post in contacts.object_list %}
<tr
class=
"gradeX"
>
{% ifequal session_role_id 2 %}
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
{% endifequal %}
<td
class=
"text-center"
>
{{ post.name }}
</td>
{% ifequal session_role_id 2 %}
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
>
{{ post.asset_set.count }}
</a>
</td>
{% else %}
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
>
{{ post|get_idc_count:dept }}
</a>
</td>
{% endifequal %}
<td
class=
"text-center"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
{% ifequal session_role_id 2 %}
<a
href=
"/jasset/idc_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/idc_del/{{ post.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
{% endifequal %}
</td>
</tr>
{% endfor %}
...
...
@@ -51,8 +64,10 @@
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
{% ifequal session_role_id 2 %}
<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')"
/>
{% endifequal %}
</div>
{% include 'paginator.html' %}
</div>
...
...
templates/jlog/log_offline.html
View file @
9cfe6c56
...
...
@@ -125,8 +125,8 @@
var
ip
=
$
(
'#ip'
)[
0
].
innerText
;
var
start_time
=
$
(
'#start_time'
)[
0
].
innerText
;
var
end_time
=
$
(
'#end_time'
)[
0
].
innerText
;
var
div_username
=
'
登录
用户名: '
+
'<span class="text-info">'
+
username
+
''
+
'</span>'
;
var
div_ip
=
'
登录
主机: '
+
'<span class="text-info">'
+
ip
+
'</span>'
;
var
div_username
=
' 用户名: '
+
'<span class="text-info">'
+
username
+
''
+
'</span>'
;
var
div_ip
=
' 主机: '
+
'<span class="text-info">'
+
ip
+
'</span>'
;
var
div_time
=
' 开始时间: '
+
'<span class="text-info">'
+
start_time
+
'</span>'
+
' 结束时间: '
+
'<span class="text-info">'
+
end_time
+
'</span'
var
title
=
'JumpServer命令统计 '
+
div_username
+
div_ip
+
div_time
$
.
ajax
({
url
:
url
,
success
:
function
(
data
){
...
...
@@ -138,16 +138,6 @@
SOCKET_HOST
:
"{{ web_socket_host }}"
}
function
cut
(
num
){
var
g_url
=
"/jlog/log_kill/"
+
num
;
console
.
log
(
g_url
);
$
.
ajax
({
type
:
"GET"
,
url
:
g_url
,
success
:
window
.
open
(
"/jlog/"
,
"_self"
)
});
}
function
log_search
(){
$
.
ajax
({
type
:
"GET"
,
...
...
templates/jlog/log_online.html
View file @
9cfe6c56
...
...
@@ -92,9 +92,9 @@
{% for post in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
id=
"username"
class=
"text-center"
>
{{ post.user }}
</td>
<td
id=
"
ip
"
class=
"text-center"
>
{{ post.dept_name }}
</td>
<td
id=
"
deptname
"
class=
"text-center"
>
{{ post.dept_name }}
</td>
<td
id=
"ip"
class=
"text-center"
>
{{ post.host }}
</td>
<td
id=
"ip"
class=
"text-center"
>
{{ post.remote_ip }}
</td>
<td
id=
"
remote_
ip"
class=
"text-center"
>
{{ post.remote_ip }}
</td>
{% ifnotequal session_role_id 0 %}
<td
class=
"text-center"
><a
class=
"monitor"
filename=
"{{ post.log_path }}"
>
监控
</a></td>
<td
class=
"text-center"
><input
type=
"button"
id=
"cut"
class=
"btn btn-danger btn-xs"
name=
"cut"
value=
"阻断"
onclick=
'cut("{{ post.pid }}")'
/></td>
...
...
@@ -187,7 +187,6 @@
function
log_search
(){
console
.
log
(
'hell0'
)
$
.
ajax
({
type
:
"GET"
,
url
:
"/jlog/search/?env=online"
,
...
...
@@ -210,7 +209,7 @@
$
.
ajax
({
type
:
"GET"
,
url
:
g_url
,
success
:
window
.
open
(
"/jlog/"
,
"_self"
)
success
:
window
.
open
(
"/jlog/
log_list/online/
"
,
"_self"
)
});
}
...
...
templates/jperm/perm_apply_search.html
View file @
9cfe6c56
...
...
@@ -9,7 +9,6 @@
<th
class=
"text-center"
>
申请主机
</th>
<th
class=
"text-center"
>
批准人
</th>
<th
class=
"text-center"
>
申请时间
</th>
<!--<th class="text-center"> 批准时间 </th>-->
<th
class=
"text-center"
>
备注
</th>
<th
class=
"text-center"
>
详情
</th>
...
...
@@ -20,11 +19,10 @@
<tr
class=
"gradeX"
>
<td
class=
"text-center"
id=
"username"
>
{{ post.applyer }}
</td>
<td
class=
"text-center"
id=
"dept"
>
{{ post.dept }}
</td>
<td
class=
"text-center"
id=
"ip"
>
{
% for i in post.bisgroup|ast_to_list %} {{ i }} {% endfor %}...
</td>
<td
class=
"text-center"
id=
"remote_ip"
>
{% for i in post.asset|ast_to_list %} {{ i }} {% endfor %}...
</td>
<td
class=
"text-center"
id=
"ip"
>
{
{ post.bisgroup|ast_to_list }}
</td>
<td
class=
"text-center"
id=
"remote_ip"
>
{{ post.asset|ast_to_list }}
</td>
<td
class=
"text-center"
id=
"approver"
>
{{ post.approver }}
</td>
<td
class=
"text-center"
id=
"start_time"
>
{{ post.date_add|date:"Y-m-d H:i:s"}}
</td>
<!--<td class="text-center" id="end_time"> {{ post.date_end|date:"Y-m-d H:i:s" }} </td>-->
<td
class=
"text-center"
id=
""
>
{{ post.comment }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<a
value=
"/jperm/apply_info/?uuid={{ post.uuid }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
...
...
templates/jperm/perm_log_online.html
View file @
9cfe6c56
...
...
@@ -73,6 +73,10 @@
<td
class=
"text-center"
id=
""
>
{{ post.comment }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<a
value=
"/jperm/apply_info/?uuid={{ post.uuid }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
{% ifnotequal session_role_id 0 %}
<a
href=
"/jperm/apply_exec/?uuid={{ post.uuid }}"
class=
"btn btn-xs btn-info"
>
确认
</a>
<a
href=
"/jperm/apply_del/?uuid={{ post.uuid }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
{% endifnotequal %}
</td>
</tr>
{% endfor %}
...
...
templates/nav.html
View file @
9cfe6c56
...
...
@@ -27,7 +27,7 @@
<a><i
class=
"fa fa-cube"
></i>
<span
class=
"nav-label"
>
资产管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<li
class=
"host_add host_add_multi"
><a
href=
"/jasset/host_add/"
>
添加资产
</a></li>
<li
class=
"host_list"
><a
href=
"/jasset/host_list/"
>
查看资产
&
nbsp
&
nbsp
</span><span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"host_list
host_detail
"
><a
href=
"/jasset/host_list/"
>
查看资产
&
nbsp
&
nbsp
</span><span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"group_add"
><a
href=
"/jasset/group_add/"
>
添加主机组
</a></li>
<li
class=
"group_list group_detail"
><a
href=
"/jasset/group_list/"
>
查看主机组
</a></li>
<li
class=
"idc_add"
><a
href=
"/jasset/idc_add/"
>
添加IDC
</a></li>
...
...
@@ -97,7 +97,7 @@
<a><i
class=
"fa fa-cube"
></i>
<span
class=
"nav-label"
>
资产管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<li
class=
"host_add host_add_multi"
><a
href=
"/jasset/host_add/"
>
添加资产
</a></li>
<li
class=
"host_list"
><a
href=
"/jasset/host_list/"
>
查看资产
&
nbsp
&
nbsp
</span><span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"host_list
host_detail
"
><a
href=
"/jasset/host_list/"
>
查看资产
&
nbsp
&
nbsp
</span><span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"group_add"
><a
href=
"/jasset/group_add/"
>
添加主机组
</a></li>
<li
class=
"group_list group_detail"
><a
href=
"/jasset/group_list/"
>
查看主机组
</a></li>
<li
class=
"idc_list idc_detail"
><a
href=
"/jasset/idc_list/"
>
查看IDC
</a></li>
...
...
templates/nav_bar_header.html
View file @
9cfe6c56
...
...
@@ -13,7 +13,7 @@
</li>
<li
class=
"dropdown"
>
<a
class=
"dropdown-toggle count-info"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-envelope"
></i>
<span
class=
"label label-warning"
>
16
</span>
<i
class=
"fa fa-envelope"
></i>
<span
class=
"label label-warning"
>
{{ message }}
</span>
</a>
<ul
class=
"dropdown-menu dropdown-messages"
>
<li>
...
...
@@ -64,49 +64,6 @@
</li>
</ul>
</li>
<li
class=
"dropdown"
>
<a
class=
"dropdown-toggle count-info"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-bell"
></i>
<span
class=
"label label-primary"
>
8
</span>
</a>
<ul
class=
"dropdown-menu dropdown-alerts"
>
<li>
<a
href=
"mailbox.html"
>
<div>
<i
class=
"fa fa-envelope fa-fw"
></i>
You have 16 messages
<span
class=
"pull-right text-muted small"
>
4 minutes ago
</span>
</div>
</a>
</li>
<li
class=
"divider"
></li>
<li>
<a
href=
"profile.html"
>
<div>
<i
class=
"fa fa-twitter fa-fw"
></i>
3 New Followers
<span
class=
"pull-right text-muted small"
>
12 minutes ago
</span>
</div>
</a>
</li>
<li
class=
"divider"
></li>
<li>
<a
href=
"grid_options.html"
>
<div>
<i
class=
"fa fa-upload fa-fw"
></i>
Server Rebooted
<span
class=
"pull-right text-muted small"
>
4 minutes ago
</span>
</div>
</a>
</li>
<li
class=
"divider"
></li>
<li>
<div
class=
"text-center link-block"
>
<a
href=
"notifications.html"
>
<strong>
See All Alerts
</strong>
<i
class=
"fa fa-angle-right"
></i>
</a>
</div>
</li>
</ul>
</li>
<li>
<a
href=
"/logout/"
>
<i
class=
"fa fa-sign-out"
></i>
Log out
...
...
websocket/npm-debug.log
0 → 100644
View file @
9cfe6c56
This diff is collapsed.
Click to expand it.
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