|
2 | 2 |
|
3 | 3 | import logging |
4 | 4 | import sys |
| 5 | +import operator |
5 | 6 | from datetime import datetime |
6 | 7 |
|
7 | 8 | from django.conf import settings |
8 | 9 | from django.contrib import messages |
9 | 10 | from django.contrib.auth.decorators import user_passes_test |
10 | 11 | from django.core.urlresolvers import reverse |
| 12 | +from django.db.models import Q |
11 | 13 | from django.http import HttpResponseRedirect, HttpResponseForbidden, Http404, HttpResponse |
12 | 14 | from django.shortcuts import render, get_object_or_404 |
| 15 | +from django.views.decorators.cache import cache_page |
13 | 16 | from pytz import timezone |
14 | 17 |
|
15 | 18 | from dojo.filters import TemplateFindingFilter |
16 | 19 | from dojo.forms import NoteForm, TestForm, FindingForm, \ |
17 | 20 | DeleteTestForm, AddFindingForm, \ |
18 | 21 | ImportScanForm, ReImportScanForm, FindingBulkUpdateForm, JIRAFindingForm |
19 | 22 | from dojo.models import Finding, Test, Notes, \ |
20 | | - BurpRawRequestResponse, Endpoint, Stub_Finding, Finding_Template, JIRA_PKey, Cred_User, Cred_Mapping |
| 23 | + BurpRawRequestResponse, Endpoint, Stub_Finding, Finding_Template, JIRA_PKey, Cred_User, Cred_Mapping, Dojo_User |
21 | 24 | from dojo.tools.factory import import_parser_factory |
22 | 25 | from dojo.utils import get_page_items, add_breadcrumb, get_cal_event, message, process_notifications, get_system_setting |
23 | 26 | from dojo.tasks import add_issue_task |
@@ -157,6 +160,26 @@ def delete_test_note(request, tid, nid): |
157 | 160 | return HttpResponseForbidden() |
158 | 161 |
|
159 | 162 |
|
| 163 | +@user_passes_test(lambda u: u.is_staff) |
| 164 | +@cache_page(60 * 5) # cache for 5 minutes |
| 165 | +def test_calendar(request): |
| 166 | + if not 'lead' in request.GET or '0' in request.GET.getlist('lead'): |
| 167 | + tests = Test.objects.all() |
| 168 | + else: |
| 169 | + filters = [] |
| 170 | + leads = request.GET.getlist('lead','') |
| 171 | + if '-1' in request.GET.getlist('lead'): |
| 172 | + leads.remove('-1') |
| 173 | + filters.append(Q(lead__isnull=True)) |
| 174 | + filters.append(Q(lead__in=leads)) |
| 175 | + tests = Test.objects.filter(reduce(operator.or_, filters)) |
| 176 | + add_breadcrumb(title="Test Calendar", top_level=True, request=request) |
| 177 | + return render(request, 'dojo/calendar.html', { |
| 178 | + 'caltype': 'tests', |
| 179 | + 'leads': request.GET.getlist('lead', ''), |
| 180 | + 'tests': tests, |
| 181 | + 'users': Dojo_User.objects.all()}) |
| 182 | + |
160 | 183 | @user_passes_test(lambda u: u.is_staff) |
161 | 184 | def test_ics(request, tid): |
162 | 185 | test = get_object_or_404(Test, id=tid) |
|
0 commit comments