From 9cfe6c569d35979a083753b5e21e882cb51b566c Mon Sep 17 00:00:00 2001 From: halcyon <864072399@qq.com> Date: Sat, 11 Apr 2015 12:52:00 +0800 Subject: [PATCH] hehe --- jasset/urls.py | 30 +- jasset/views.py | 74 +- jlog/urls.py | 5 +- jlog/views.py | 129 ++-- jperm/models.py | 2 +- jperm/urls.py | 1 + jperm/views.py | 81 +-- jumpserver.conf | 19 +- jumpserver/api.py | 6 +- jumpserver/context_processors.py | 18 +- jumpserver/settings.py | 10 +- jumpserver/templatetags/mytags.py | 12 + jumpserver/views.py | 16 +- templates/index.html | 41 +- templates/jasset/group_list.html | 9 +- templates/jasset/host_detail.html | 212 ++++++ templates/jasset/host_list.html | 2 +- templates/jasset/idc_list.html | 31 +- templates/jlog/log_offline.html | 14 +- templates/jlog/log_online.html | 7 +- templates/jperm/perm_apply_search.html | 6 +- templates/jperm/perm_log_online.html | 6 +- templates/nav.html | 4 +- templates/nav_bar_header.html | 45 +- websocket/npm-debug.log | 920 +++++++++++++++++++++++++ 25 files changed, 1403 insertions(+), 297 deletions(-) create mode 100644 templates/jasset/host_detail.html create mode 100644 websocket/npm-debug.log diff --git a/jasset/urls.py b/jasset/urls.py index 1002ee691..d11dcb6eb 100644 --- a/jasset/urls.py +++ b/jasset/urls.py @@ -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_host), + url(r'^host_add/$', host_add), + url(r"^host_add_multi/$", host_add_batch), + url(r'^host_list/$', host_list), 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 diff --git a/jasset/views.py b/jasset/views.py index 37d4864e7..c04a82243 100644 --- a/jasset/views.py +++ b/jasset/views.py @@ -17,11 +17,10 @@ class RaiseError(Exception): pass -def f_add_host(ip, port, idc, jtype, group, dept, active, comment, username='', password=''): +def f_host_add(ip, port, idc, jtype, group, dept, active, comment, username='', password=''): groups, depts = [], [] idc = IDC.objects.get(name=idc) if jtype == 'M': - print username, password a = Asset(ip=ip, port=port, login_type=jtype, idc=idc, is_active=int(active), @@ -50,14 +49,13 @@ def f_add_host(ip, port, idc, jtype, group, dept, active, comment, username='', a.save() -def jasset_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 f_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user='', j_password=''): groups, depts = [], [] is_active = {u'是': '1', u'否': '2'} login_types = {'LDAP': 'L', 'MAP': 'M'} for group in j_group[0].split(): c = BisGroup.objects.get(name=group.strip()) groups.append(c) - print j_dept for d in j_dept[0].split(): p = DEPT.objects.get(name=d.strip()) depts.append(p) @@ -88,7 +86,7 @@ def jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_activ @require_admin -def add_host(request): +def host_add(request): login_types = {'L': 'LDAP', 'M': 'MAP'} header_title, path1, path2 = u'添加主机', u'资产管理', u'添加主机' eidc = IDC.objects.exclude(name='ALL') @@ -123,16 +121,16 @@ def add_host(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_dept, j_active, j_comment, j_user, j_password) + f_host_add(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_dept, j_active, j_comment) + f_host_add(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment) smg = u'主机 %s 添加成功' % j_ip return render_to_response('jasset/host_add.html', locals(), context_instance=RequestContext(request)) @require_admin -def add_host_multi(request): +def host_add_batch(request): header_title, path1, path2 = u'批量添加主机', u'资产管理', u'批量添加主机' login_types = {'LDAP': 'L', 'MAP': 'M'} dept_id = get_user_dept(request) @@ -154,9 +152,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_dept, j_active, j_comment, j_user, j_password) + f_host_add(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_dept, j_active, j_comment) + f_host_add(j_ip, j_port, j_idc, j_type, j_group, j_dept, j_active, j_comment) smg = u'批量添加添加成功' return HttpResponseRedirect('/jasset/host_list/') @@ -165,7 +163,7 @@ def add_host_multi(request): @require_admin -def batch_host_edit(request): +def host_edit_batch(request): if request.method == 'POST': len_table = request.POST.get('len_table') for i in range(int(len_table)): @@ -182,7 +180,7 @@ def batch_host_edit(request): j_id = request.POST.get(j_id).strip() j_ip = request.POST.get(j_ip).strip() j_port = request.POST.get(j_port).strip() - j_dept = request.POST.getlist(j_dept).strip() + j_dept = request.POST.getlist(j_dept) j_idc = request.POST.get(j_idc).strip() j_type = request.POST.get(j_type).strip() j_group = request.POST.getlist(j_group) @@ -195,16 +193,15 @@ def batch_host_edit(request): j_user = request.POST.get(j_user).strip() password = request.POST.get(j_password).strip() j_password = cryptor.encrypt(password) - jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user, - j_password) + f_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment, j_user, j_password) else: - jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment) + f_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment) return render_to_response('jasset/host_list.html') @require_login -def batch_host_edit_common(request): +def host_edit_common_batch(request): user_id = request.session.get('user_id', '') u = User.objects.get(id=user_id) if request.method == 'POST': @@ -226,7 +223,7 @@ def batch_host_edit_common(request): @require_login -def list_host(request): +def host_list(request): header_title, path1, path2 = u'查看主机', u'资产管理', u'查看主机' login_types = {'L': 'LDAP', 'M': 'MAP'} keyword = request.GET.get('keyword', '') @@ -298,9 +295,7 @@ def host_del(request, offset): for i in range(int(len_list)): key = "id_list[" + str(i) + "]" jid = request.POST.get(key) - print jid if is_group_admin(request) and not validate(request, asset=[jid]): - emg = u'删除失败,您无权操作!' return HttpResponseRedirect('/jasset/host_list/') a = Asset.objects.get(id=jid).ip Asset.objects.filter(id=jid).delete() @@ -308,7 +303,6 @@ def host_del(request, offset): else: jid = int(offset) if is_group_admin(request) and not validate(request, asset=[jid]): - emg = u'删除失败,您无权操作!' return HttpResponseRedirect('/jasset/host_list/') a = Asset.objects.get(id=jid).ip BisGroup.objects.filter(name=a).delete() @@ -323,7 +317,7 @@ def host_edit(request): header_title, path1, path2 = u'修改主机', u'资产管理', u'修改主机' groups, e_group, e_dept, depts = [], [], [], [] eidc = IDC.objects.all() - egroup = BisGroup.objects.all() + egroup = BisGroup.objects.exclude(name='ALL') edept = DEPT.objects.all() offset = request.GET.get('id') for g in Asset.objects.get(id=int(offset)).bis_group.all(): @@ -382,23 +376,26 @@ def host_edit(request): a.dept = depts a.save() smg = u'主机 %s 修改成功' % j_ip - return HttpResponseRedirect('/jasset/host_list') + return HttpResponseRedirect('/jasset/host_detail/?id=%s' % offset) return render_to_response('jasset/host_edit.html', locals(), context_instance=RequestContext(request)) @require_login -def jlist_ip(request, offset): +def host_detail(request): header_title, path1, path2 = u'主机详细信息', u'资产管理', u'主机详情' + host_id = int(request.GET.get('id')) + post = Asset.objects.get(id=host_id) + host_ip = post.ip login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'} - post = contact_list = Asset.objects.get(ip=str(offset)) - log = Log.objects.filter(host=str(offset)) - user_permed_list = asset_perm_api(Asset.objects.get(ip=str(offset))) - return render_to_response('jasset/jlist_ip.html', locals(), context_instance=RequestContext(request)) + log_all = Log.objects.filter(host=host_ip) + log, log_more = log_all[:10], log_all[10:] + user_permed_list = asset_perm_api(post) + return render_to_response('jasset/host_detail.html', locals(), context_instance=RequestContext(request)) @require_super_user -def add_idc(request): +def idc_add(request): header_title, path1, path2 = u'添加IDC', u'资产管理', u'添加IDC' if request.method == 'POST': j_idc = request.POST.get('j_idc') @@ -414,8 +411,10 @@ def add_idc(request): @require_admin -def list_idc(request): +def idc_list(request): header_title, path1, path2 = u'查看IDC', u'资产管理', u'查看IDC' + dept_id = get_user_dept(request) + dept = DEPT.objects.get(id=dept_id) keyword = request.GET.get('keyword', '') if keyword: posts = IDC.objects.filter(Q(name__contains=keyword) | Q(comment__contains=keyword)) @@ -426,7 +425,7 @@ def list_idc(request): @require_super_user -def edit_idc(request): +def idc_edit(request): header_title, path1, path2 = u'编辑IDC', u'资产管理', u'编辑IDC' edit = 1 idc_id = request.GET.get('id') @@ -455,7 +454,7 @@ def edit_idc(request): @require_super_user -def del_idc(request, offset): +def idc_del(request, offset): if offset == 'multi': len_list = request.POST.get("len_list") for i in range(int(len_list)): @@ -469,7 +468,7 @@ def del_idc(request, offset): @require_admin -def add_group(request): +def group_add(request): header_title, path1, path2 = u'添加主机组', u'资产管理', u'添加主机组' if is_super_user(request): posts = Asset.objects.all() @@ -505,7 +504,7 @@ def add_group(request): @require_admin -def list_group(request): +def group_list(request): header_title, path1, path2 = u'查看主机组', u'资产管理', u'查看主机组' dept_id = get_user_dept(request) dept = DEPT.objects.get(id=dept_id) @@ -544,7 +543,7 @@ def list_group(request): @require_admin -def edit_group(request): +def group_edit(request): header_title, path1, path2 = u'编辑主机组', u'资产管理', u'编辑主机组' group_id = request.GET.get('id') group = BisGroup.objects.get(id=group_id) @@ -578,7 +577,7 @@ def edit_group(request): @require_admin -def detail_group(request): +def group_detail(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) @@ -597,7 +596,7 @@ def detail_group(request): @require_admin -def detail_idc(request): +def idc_detail(request): header_title, path1, path2 = u'IDC详情', u'资产管理', u'IDC详情' login_types = {'L': 'LDAP', 'M': 'MAP'} idc_id = request.GET.get('id') @@ -647,7 +646,7 @@ def group_del(request, offset): else: gid = int(offset) BisGroup.objects.filter(id=gid).delete() - return HttpResponseRedirect('/jasset/jgroup_list/') + return HttpResponseRedirect('/jasset/group_list/') @require_login @@ -672,7 +671,6 @@ def host_search(request): Q(bis_group__name__contains=keyword) | Q(comment__contains=keyword)) \ .distinct().order_by('ip') posts = list(set(post_all) & set(post_perm)) - print posts 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)) \ No newline at end of file diff --git a/jlog/urls.py b/jlog/urls.py index 6f1fabd15..032b89fd0 100644 --- a/jlog/urls.py +++ b/jlog/urls.py @@ -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), diff --git a/jlog/views.py b/jlog/views.py index 33d32b83c..488987827 100644 --- a/jlog/views.py +++ b/jlog/views.py @@ -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): +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=env).order_by('-start_time') + else: + 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=env).filter(dept_name=dept_name).order_by('-start_time') + else: + 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=env).order_by('-start_time') + else: + posts = Log.objects.filter(is_finished=env).filter(user=username).order_by('-start_time') + return posts + + +@require_login +def log_list(request, offset): header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户' - keyword = request.GET.get('keyword') 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 + 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) - 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) - - 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): - 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') - 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)) - - -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') - 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) - - 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') - contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) + 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)) diff --git a/jperm/models.py b/jperm/models.py index 2f9c13063..091478012 100644 --- a/jperm/models.py +++ b/jperm/models.py @@ -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): diff --git a/jperm/urls.py b/jperm/urls.py index 19cdf9a49..41a7b26ed 100644 --- a/jperm/urls.py +++ b/jperm/urls.py @@ -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'), ) diff --git a/jperm/views.py b/jperm/views.py index 3e6d2085c..52e394ff2 100644 --- a/jperm/views.py +++ b/jperm/views.py @@ -1,10 +1,8 @@ # 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, 'jumpserver@163.com', [mail_address], fail_silently=False) + send_mail(mail_title, mail_msg, 'jkfunshion@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,56 +741,41 @@ 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) - 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)) + 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_%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') - contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) + 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)) diff --git a/jumpserver.conf b/jumpserver.conf index 099bd2bd9..c9f53f810 100644 --- a/jumpserver.conf +++ b/jumpserver.conf @@ -1,5 +1,10 @@ #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 = 88aaaf7ffe3c6c04 + [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 diff --git a/jumpserver/api.py b/jumpserver/api.py index 83be10278..66b347843 100644 --- a/jumpserver/api.py +++ b/jumpserver/api.py @@ -288,9 +288,10 @@ 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 - return [] + else: + return [] def asset_perm_api(asset): @@ -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 diff --git a/jumpserver/context_processors.py b/jumpserver/context_processors.py index baa3f091b..cda6f64a1 100644 --- a/jumpserver/context_processors.py +++ b/jumpserver/context_processors.py @@ -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 diff --git a/jumpserver/settings.py b/jumpserver/settings.py index c8527ba28..d44a781ee 100644 --- a/jumpserver/settings.py +++ b/jumpserver/settings.py @@ -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/ diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index a9c0539aa..5e26a884d 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -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) diff --git a/jumpserver/views.py b/jumpserver/views.py index d72f8f9be..981974bd9 100644 --- a/jumpserver/views.py +++ b/jumpserver/views.py @@ -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,10 +149,16 @@ def index(request): active_hosts = Asset.objects.filter(is_active=1) # percent of dashboard - 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%') - percent_online_host = format(online_host.count() / hosts.count(), '.0%') + 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) today = datetime.datetime.now().day @@ -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] diff --git a/templates/index.html b/templates/index.html index c7b5829fe..f4dbb773b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -89,6 +89,10 @@ + + + + @@ -153,7 +157,29 @@ {% endfor %} - + + @@ -172,12 +198,7 @@ - + @@ -218,6 +239,12 @@ + + +{% endblock %} \ No newline at end of file diff --git a/templates/jasset/host_list.html b/templates/jasset/host_list.html index e443bb396..7364e0a3e 100644 --- a/templates/jasset/host_list.html +++ b/templates/jasset/host_list.html @@ -73,7 +73,7 @@ {{ post.is_active|bool2str }} {{ post.comment }} - 详情 + 详情 {% ifnotequal session_role_id 0 %} 编辑 删除 diff --git a/templates/jasset/idc_list.html b/templates/jasset/idc_list.html index cef24d96d..78a4c5fd3 100644 --- a/templates/jasset/idc_list.html +++ b/templates/jasset/idc_list.html @@ -1,4 +1,5 @@ {% extends 'base.html' %} +{% load mytags %} {% block content %} {% include 'nav_cat_bar.html' %} @@ -8,7 +9,9 @@
- 添加IDC + {% ifequal session_role_id 2 %} + 添加IDC + {% endifequal %}