diff --git a/templates/nav.html b/templates/nav.html
index 93731d699..99583f76e 100644
--- a/templates/nav.html
+++ b/templates/nav.html
@@ -103,7 +103,6 @@
From fef224459c7fd0754d2af95289d7184694d45769 Mon Sep 17 00:00:00 2001
From: halcyon <864072399@qq.com>
Date: Thu, 19 Mar 2015 18:32:10 +0800
Subject: [PATCH 11/12] =?UTF-8?q?=E9=89=B4=E6=9D=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
connect.py | 6 +-
docs/AddUserAsset.py | 17 +-
jasset/views.py | 94 +-
jlog/models.py | 1 +
jlog/views.py | 77 +-
jumpserver/api.py | 7 +
jumpserver/context_processors.py | 6 +-
jumpserver/templatetags/mytags.py | 16 -
.../css/plugins/fullcalendar/fullcalendar.css | 977 ++++++++++++++++++
.../fullcalendar/fullcalendar.print.css | 202 ++++
.../plugins/fullcalendar/fullcalendar.min.js | 8 +
static/js/plugins/fullcalendar/moment.min.js | 7 +
templates/foot_script.html | 2 +
templates/jasset/group_add.html | 8 +-
templates/jasset/host_add.html | 10 -
templates/jasset/host_add_multi.html | 2 +-
templates/jlog/log_offline.html | 4 +-
templates/jlog/log_online.html | 2 +
templates/jlog/log_search.html | 2 +
templates/link_css.html | 1 +
templates/nav.html | 57 +-
21 files changed, 1409 insertions(+), 97 deletions(-)
create mode 100755 static/css/plugins/fullcalendar/fullcalendar.css
create mode 100755 static/css/plugins/fullcalendar/fullcalendar.print.css
create mode 100755 static/js/plugins/fullcalendar/fullcalendar.min.js
create mode 100755 static/js/plugins/fullcalendar/moment.min.js
diff --git a/connect.py b/connect.py
index dd0b39315..0eea28796 100755
--- a/connect.py
+++ b/connect.py
@@ -43,7 +43,8 @@ LOG_DIR = os.path.join(BASE_DIR, 'logs')
SSH_KEY_DIR = os.path.join(BASE_DIR, 'keys')
SERVER_KEY_DIR = os.path.join(SSH_KEY_DIR, 'server')
KEY = CONF.get('web', 'key')
-LOGIN_NAME = getpass.getuser()
+#LOGIN_NAME = getpass.getuser()
+LOGIN_NAME = 'wy01'
def color_print(msg, color='blue'):
@@ -103,6 +104,7 @@ def log_record(username, host):
today_connect_log_dir = os.path.join(connect_log_dir, today)
log_filename = '%s_%s_%s.log' % (username, host, time_now)
log_file_path = os.path.join(today_connect_log_dir, log_filename)
+ dept_name = User.objects.get(username=username).dept
pid = os.getpid()
ip_list = []
remote_ip = os.popen("who |grep `ps aux |gawk '{if ($2==%s) print $1}'` |gawk '{print $5}'|tr -d '()'" % pid).readlines()
@@ -122,7 +124,7 @@ def log_record(username, host):
except IOError:
raise ServerError('Create logfile failed, Please modify %s permission.' % today_connect_log_dir)
- log = Log(user=username, host=host, remote_ip=ip_list, log_path=log_file_path, start_time=datetime.now(), pid=pid)
+ log = Log(user=username, host=host, remote_ip=ip_list, dept_name=dept_name, log_path=log_file_path, start_time=datetime.now(), pid=pid)
log_file.write('Starttime is %s\n' % datetime.now())
log.save()
return log_file, log
diff --git a/docs/AddUserAsset.py b/docs/AddUserAsset.py
index 77de5371a..f8faea53a 100644
--- a/docs/AddUserAsset.py
+++ b/docs/AddUserAsset.py
@@ -13,7 +13,6 @@ django.setup()
from juser.views import db_add_user, md5_crypt, CRYPTOR, db_add_group
from jasset.models import Asset, IDC, BisGroup
from juser.models import UserGroup, DEPT, User
-from jasset.views import jasset_group_add
from jperm.models import CmdGroup
from jlog.models import Log
@@ -123,18 +122,18 @@ def test_add_log():
end_time = datetime.datetime.now()
log_path = '/var/log/jumpserver/test.log'
host = '192.168.1.' + str(ip)
- Log.objects.create(user=user, host=host, log_path=log_path, pid=168, start_time=start_time,
+ Log.objects.create(user=user, host=host, remote_ip='8.8.8.8', dept_name='运维部', log_path=log_path, pid=168, start_time=start_time,
is_finished=1, log_finished=1, end_time=end_time)
if __name__ == '__main__':
- install()
- test_add_dept()
- test_add_group()
- test_add_user()
- test_add_idc()
- test_add_asset_group()
- test_add_asset()
+ #install()
+ #test_add_dept()
+ #test_add_group()
+ #test_add_user()
+ #test_add_idc()
+ #test_add_asset_group()
+ #test_add_asset()
test_add_log()
diff --git a/jasset/views.py b/jasset/views.py
index add2728d4..a08b3430f 100644
--- a/jasset/views.py
+++ b/jasset/views.py
@@ -1,18 +1,20 @@
# coding:utf-8
+import ast
+
from django.db.models import Q
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.shortcuts import render_to_response
from models import IDC, Asset, BisGroup
-from juser.models import UserGroup, DEPT, User
+from juser.models import UserGroup, DEPT
from connect import PyCrypt, KEY
from jlog.models import Log
from jumpserver.views import jasset_host_edit, pages
from jumpserver.api import asset_perm_api
from jumpserver.api import user_perm_group_api, require_login, require_super_user, \
- require_admin, is_group_admin, is_super_user, get_user_dept
+ require_admin, is_group_admin, is_super_user, is_common_user, get_user_dept
cryptor = PyCrypt(KEY)
@@ -61,7 +63,7 @@ def add_host(request):
eidc = IDC.objects.all()
if is_super_user(request):
edept = DEPT.objects.all()
- egroup = BisGroup.objects.all()
+ egroup = BisGroup.objects.exclude(name='ALL')
eusergroup = UserGroup.objects.all()
elif is_group_admin(request):
dept_id = get_user_dept(request)
@@ -93,21 +95,20 @@ def add_host(request):
return render_to_response('jasset/host_add.html', locals(), context_instance=RequestContext(request))
+@require_admin
def add_host_multi(request):
header_title, path1, path2 = u'批量添加主机', u'资产管理', u'批量添加主机'
- login_types = {'LDAP': 'L', 'SSH_KEY': 'S', 'PASSWORD': 'P', 'MAP': 'M'}
- j_group = []
+ login_types = {'LDAP': 'L', 'MAP': 'M'}
+ dept_id = get_user_dept(request)
if request.method == 'POST':
multi_hosts = request.POST.get('j_multi').split('\n')
for host in multi_hosts:
if host == '':
break
- j_ip, j_port, j_type, j_idc, j_groups, j_active, j_comment = host.split()
+ j_ip, j_port, j_type, j_idc, j_groups, j_depts, j_active, j_comment = host.split()
j_type = login_types[j_type]
- j_groups = j_groups.split(',')
- for group in j_groups:
- g = group.strip('[]').encode('utf-8').strip()
- j_group.append(g)
+ j_group = ast.literal_eval(j_groups)
+ j_dept = ast.literal_eval(j_depts)
if Asset.objects.filter(ip=str(j_ip)):
emg = u'该IP %s 已存在!' % j_ip
@@ -117,9 +118,9 @@ def add_host_multi(request):
if j_type == 'M':
j_user = request.POST.get('j_user')
j_password = cryptor.encrypt(request.POST.get('j_password'))
- f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_active, j_comment, j_user, j_password)
+ f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password)
else:
- f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_active, j_comment)
+ f_add_host(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment)
smg = u'批量添加添加成功'
return HttpResponseRedirect('/jasset/host_list/')
@@ -127,6 +128,7 @@ def add_host_multi(request):
return render_to_response('jasset/host_add_multi.html', locals(), context_instance=RequestContext(request))
+@require_admin
def batch_host_edit(request):
if request.method == 'POST':
len_table = request.POST.get('len_table')
@@ -161,7 +163,8 @@ def batch_host_edit(request):
return render_to_response('jasset/host_list.html')
-@require_admin
+
+@require_login
def list_host(request):
header_title, path1, path2 = u'查看主机', u'资产管理', u'查看主机'
login_types = {'L': 'LDAP', 'M': 'MAP'}
@@ -172,22 +175,23 @@ def list_host(request):
if keyword:
posts = 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')
- contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
-
else:
posts = Asset.objects.all().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)
elif is_group_admin(request):
if keyword:
posts = Asset.objects.filter(Q(ip__contains=keyword) | Q(idc__name__contains=keyword) |
Q(bis_group__name__contains=keyword) | Q(comment__contains=keyword)).filter(dept=dept).distinct().order_by('ip')
- contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
else:
posts = Asset.objects.all().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)
+
+ elif is_common_user(request):
+ pass
return render_to_response('jasset/host_list.html', locals(), context_instance=RequestContext(request))
+@require_admin
def host_del(request, offset):
if offset == 'multi':
len_list = request.POST.get("len_list")
@@ -205,6 +209,7 @@ def host_del(request, offset):
return HttpResponseRedirect('/jasset/host_list/')
+@require_admin
def host_edit(request):
actives = {1: u'激活', 0: u'禁用'}
login_types = {'L': 'LDAP', 'M': 'MAP'}
@@ -271,6 +276,7 @@ def host_edit(request):
return render_to_response('jasset/host_edit.html', locals(), context_instance=RequestContext(request))
+@require_login
def jlist_ip(request, offset):
header_title, path1, path2 = u'主机详细信息', u'资产管理', u'主机详情'
login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
@@ -280,6 +286,7 @@ def jlist_ip(request, offset):
return render_to_response('jasset/jlist_ip.html', locals(), context_instance=RequestContext(request))
+@require_super_user
def add_idc(request):
header_title, path1, path2 = u'添加IDC', u'资产管理', u'添加IDC'
if request.method == 'POST':
@@ -295,6 +302,7 @@ def add_idc(request):
return render_to_response('jasset/idc_add.html', locals(), context_instance=RequestContext(request))
+@require_admin
def list_idc(request):
header_title, path1, path2 = u'查看IDC', u'资产管理', u'查看IDC'
keyword = request.GET.get('keyword', '')
@@ -306,6 +314,7 @@ def list_idc(request):
return render_to_response('jasset/idc_list.html', locals(), context_instance=RequestContext(request))
+@require_super_user
def edit_idc(request):
header_title, path1, path2 = u'编辑IDC', u'资产管理', u'编辑IDC'
edit = 1
@@ -334,6 +343,7 @@ def edit_idc(request):
return render_to_response('jasset/idc_add.html', locals(), context_instance=RequestContext(request))
+@require_super_user
def del_idc(request, offset):
if offset == 'multi':
len_list = request.POST.get("len_list")
@@ -387,14 +397,14 @@ def list_group(request):
keyword = request.GET.get('keyword', '')
if is_super_user(request):
if keyword:
- posts = BisGroup.objects.filter(Q(name__contains=keyword) | Q(comment__contains=keyword))
+ posts = BisGroup.objects.exclude(name='ALL').filter(Q(name__contains=keyword) | Q(comment__contains=keyword))
else:
- posts = BisGroup.objects.all().order_by('id')
+ posts = BisGroup.objects.exclude(name='ALL').order_by('id')
elif is_group_admin(request):
if keyword:
posts = BisGroup.objects.filter(Q(name__contains=keyword) | Q(comment__contains=keyword)).filter(dept=dept)
else:
- posts = BisGroup.objects.all().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)
return render_to_response('jasset/group_list.html', locals(), context_instance=RequestContext(request))
@@ -406,14 +416,17 @@ def edit_group(request):
group = BisGroup.objects.get(id=group_id)
all = Asset.objects.all()
dept_id = get_user_dept(request)
- edept = DEPT.objects.get(id=dept_id)
eposts = contact_list = Asset.objects.filter(bis_group=group).order_by('ip')
+
if is_super_user(request):
+ edept = DEPT.objects.all()
posts = [g for g in all if g not in eposts]
+
elif is_group_admin(request):
dept = DEPT.objects.get(id=dept_id)
all_dept = Asset.objects.filter(dept=dept)
posts = [g for g in all_dept if g not in eposts]
+
if request.method == 'POST':
j_group = request.POST.get('j_group')
j_hosts = request.POST.getlist('j_hosts')
@@ -430,30 +443,43 @@ def edit_group(request):
return render_to_response('jasset/group_add.html', locals(), context_instance=RequestContext(request))
+@require_admin
def detail_group(request):
header_title, path1, path2 = u'主机组详情', u'资产管理', u'主机组详情'
login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
+ dept_id = get_user_dept(request)
+ dept = DEPT.objects.get(id=dept_id)
group_id = request.GET.get('id')
group_name = BisGroup.objects.get(id=group_id).name
b = BisGroup.objects.get(id=group_id)
- posts = Asset.objects.filter(bis_group=b).order_by('ip')
- contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
+ if is_super_user(request):
+ posts = Asset.objects.filter(bis_group=b).order_by('ip')
+ contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
+ elif is_group_admin(request):
+ posts = Asset.objects.filter(bis_group=b).filter(dept=dept).order_by('ip')
+ 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))
def detail_idc(request):
header_title, path1, path2 = u'IDC详情', u'资产管理', u'IDC详情'
- login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
+ login_types = {'L': 'LDAP', 'M': 'MAP'}
idc_id = request.GET.get('id')
idc_name = IDC.objects.get(id=idc_id).name
b = IDC.objects.get(id=idc_id)
- posts = Asset.objects.filter(idc=b).order_by('ip')
+ dept_id = get_user_dept(request)
+ dept = DEPT.objects.get(id=dept_id)
+ if is_super_user(request):
+ posts = Asset.objects.filter(idc=b).order_by('ip')
+ elif is_group_admin(request):
+ posts = Asset.objects.filter(idc=b).filter(dept=dept).order_by('ip')
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))
+@require_admin
def group_del_host(request, offset):
if request.method == 'POST':
group_name = request.POST.get('group_name')
@@ -475,6 +501,7 @@ def group_del_host(request, offset):
return HttpResponseRedirect('/jasset/%s_detail/?id=%s' % (offset, group.id))
+@require_admin
def group_del(request, offset):
if offset == 'multi':
len_list = request.POST.get("len_list")
@@ -490,10 +517,17 @@ def group_del(request, offset):
def host_search(request):
keyword = request.GET.get('keyword')
- login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'}
- posts = 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')
+ login_types = {'L': 'LDAP', 'M': 'MAP'}
+ dept_id = get_user_dept(request)
+ dept = DEPT.objects.get(id=dept_id)
+ if is_super_user(request):
+ posts = 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')
+ elif is_group_admin(request):
+ posts = Asset.objects.filter(Q(ip__contains=keyword) | Q(idc__name__contains=keyword) |
+ Q(bis_group__name__contains=keyword) | Q(
+ comment__contains=keyword)).filter(dept=dept).distinct().order_by('ip')
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))
diff --git a/jlog/models.py b/jlog/models.py
index a716765c3..0e22c5d07 100644
--- a/jlog/models.py
+++ b/jlog/models.py
@@ -5,6 +5,7 @@ class Log(models.Model):
user = models.CharField(max_length=20, null=True)
host = models.CharField(max_length=20, null=True)
remote_ip = models.CharField(max_length=100)
+ dept_name = models.CharField(max_length=20)
log_path = models.CharField(max_length=100)
start_time = models.DateTimeField(null=True)
pid = models.IntegerField(max_length=10)
diff --git a/jlog/views.py b/jlog/views.py
index c423334ac..59a448b93 100644
--- a/jlog/views.py
+++ b/jlog/views.py
@@ -12,6 +12,8 @@ from django.shortcuts import render_to_response
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
CONF = ConfigParser.ConfigParser()
CONF.read('%s/jumpserver.conf' % BASE_DIR)
@@ -21,14 +23,30 @@ 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')
- if keyword:
- posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
- .filter(is_finished=0).order_by('-start_time')
+ 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=0).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)
- else:
- posts = Log.objects.filter(is_finished=0).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')
+ 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)
+ elif is_common_user(request):
+ posts = Log.objects.filter(is_finished=0).filter(user=username).order_by('-start_time')
+
return render_to_response('jlog/log_online.html', locals(), context_instance=RequestContext(request))
@@ -36,14 +54,29 @@ def log_list_offline(request):
header_title, path1, path2 = u'查看日志', u'查看日志', u'历史记录'
keyword = request.GET.get('keyword')
web_socket_host = CONF.get('websocket', 'web_socket_host')
- if keyword:
- posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
- .filter(is_finished=1).order_by('-start_time')
+ 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')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
- else:
- posts = Log.objects.filter(is_finished=1).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=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):
+ posts = Log.objects.filter(is_finished=1).filter(user=username).order_by('-start_time')
+
return render_to_response('jlog/log_offline.html', locals(), context_instance=RequestContext(request))
@@ -70,13 +103,23 @@ def log_history(request):
def log_search(request):
keyword = request.GET.get('keyword')
env = request.GET.get('env')
- 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')
- contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
- 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')
+ dept_id = get_user_dept(request)
+ dept_name = DEPT.objects.get(id=dept_id).name
+ 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)
return render_to_response('jlog/log_search.html', locals(), context_instance=RequestContext(request))
diff --git a/jumpserver/api.py b/jumpserver/api.py
index 314db5ba2..6f2125238 100644
--- a/jumpserver/api.py
+++ b/jumpserver/api.py
@@ -94,6 +94,13 @@ def is_group_admin(request):
return False
+def is_common_user(request):
+ if request.session.get('role_id') == 0:
+ return True
+ else:
+ return False
+
+
def get_user_dept(request):
user_id = request.session.get('user_id')
if user_id:
diff --git a/jumpserver/context_processors.py b/jumpserver/context_processors.py
index 160cdd8c0..0d8308ff4 100644
--- a/jumpserver/context_processors.py
+++ b/jumpserver/context_processors.py
@@ -1,4 +1,5 @@
from juser.models import User
+from jasset.models import Asset
def name_proc(request):
@@ -6,8 +7,11 @@ def name_proc(request):
role_id = request.session.get('role_id')
user_total_num = User.objects.all().count()
user_active_num = User.objects.filter(is_active=True).count()
+ host_total_num = Asset.objects.all().count()
+ host_active_num = Asset.objects.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}
+ 'user_total_num': user_total_num, 'user_active_num': user_active_num,
+ 'host_total_num': host_total_num, 'host_active_num': host_active_num}
diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py
index bd2dc09db..3b922b49b 100644
--- a/jumpserver/templatetags/mytags.py
+++ b/jumpserver/templatetags/mytags.py
@@ -159,22 +159,6 @@ def string_length(string, length):
return '%s ...' % string[0:length]
-@register.filter(name='filter_private')
-def filter_private(group):
- agroup = []
- pattern = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
- p = BisGroup.objects.get(name='ALL')
- for g in group:
- if not pattern.match(g.name):
- agroup.append(g)
- try:
- agroup.remove(p)
- except ValueError:
- pass
-
- return agroup
-
-
@register.filter(name='to_name')
def to_name(user_id):
try:
diff --git a/static/css/plugins/fullcalendar/fullcalendar.css b/static/css/plugins/fullcalendar/fullcalendar.css
new file mode 100755
index 000000000..b2feb028e
--- /dev/null
+++ b/static/css/plugins/fullcalendar/fullcalendar.css
@@ -0,0 +1,977 @@
+/*!
+ * FullCalendar v2.2.0 Stylesheet
+ * Docs & License: http://arshaw.com/fullcalendar/
+ * (c) 2013 Adam Shaw
+ */
+
+
+.fc {
+ direction: ltr;
+ text-align: left;
+}
+
+.fc-rtl {
+ text-align: right;
+}
+
+body .fc { /* extra precedence to overcome jqui */
+ font-size: 1em;
+}
+
+
+/* Colors
+--------------------------------------------------------------------------------------------------*/
+
+.fc-unthemed th,
+.fc-unthemed td,
+.fc-unthemed hr,
+.fc-unthemed thead,
+.fc-unthemed tbody,
+.fc-unthemed .fc-row,
+.fc-unthemed .fc-popover {
+ border-color: #ddd;
+}
+
+.fc-unthemed .fc-popover {
+ background-color: #fff;
+}
+
+.fc-unthemed hr,
+.fc-unthemed .fc-popover .fc-header {
+ background: #eee;
+}
+
+.fc-unthemed .fc-popover .fc-header .fc-close {
+ color: #666;
+}
+
+.fc-unthemed .fc-today {
+ background: #fcf8e3;
+}
+
+.fc-highlight { /* when user is selecting cells */
+ background: #bce8f1;
+ opacity: .3;
+ filter: alpha(opacity=30); /* for IE */
+}
+
+.fc-bgevent { /* default look for background events */
+ background: rgb(143, 223, 130);
+ opacity: .3;
+ filter: alpha(opacity=30); /* for IE */
+}
+
+.fc-nonbusiness { /* default look for non-business-hours areas */
+ /* will inherit .fc-bgevent's styles */
+ background: #ccc;
+}
+
+
+/* Icons (inline elements with styled text that mock arrow icons)
+--------------------------------------------------------------------------------------------------*/
+
+.fc-icon {
+ display: inline-block;
+ font-size: 2em;
+ line-height: .5em;
+ height: .5em; /* will make the total height 1em */
+ font-family: "Courier New", Courier, monospace;
+}
+
+.fc-icon-left-single-arrow:after {
+ content: "\02039";
+ font-weight: bold;
+}
+
+.fc-icon-right-single-arrow:after {
+ content: "\0203A";
+ font-weight: bold;
+}
+
+.fc-icon-left-double-arrow:after {
+ content: "\000AB";
+}
+
+.fc-icon-right-double-arrow:after {
+ content: "\000BB";
+}
+
+.fc-icon-x:after {
+ content: "\000D7";
+}
+
+
+/* Buttons (styled