diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py index 06c1ae997..2f6df30cc 100644 --- a/ietf/submit/forms.py +++ b/ietf/submit/forms.py @@ -9,8 +9,9 @@ from django.core.urlresolvers import reverse as urlreverse import debug # pyflakes:ignore -from ietf.group.models import Group from ietf.doc.models import Document +from ietf.group.models import Group +from ietf.ietfauth.utils import has_role from ietf.meeting.models import Meeting from ietf.submit.models import Submission, Preapproval from ietf.submit.utils import validate_submission_rev, validate_submission_document_date @@ -32,6 +33,7 @@ class UploadForm(forms.Form): self.remote_ip = request.META.get('REMOTE_ADDR', None) + self.request = request self.in_first_cut_off = False self.cutoff_warning = "" self.shutdown = False @@ -104,7 +106,7 @@ class UploadForm(forms.Form): return self.clean_file("xml", XMLParser) def clean(self): - if self.shutdown: + if self.shutdown and not has_role(self.request.user, "Secretariat"): raise forms.ValidationError('The tool is shut down') # sanity check that paths exist (for development servers) diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index e1a845a79..d73e76725 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -13,6 +13,7 @@ from ietf.utils.test_utils import login_testing_unauthorized from ietf.utils.test_data import make_test_data from ietf.utils.mail import outbox from ietf.utils.test_utils import TestCase +from ietf.meeting.models import Meeting from ietf.submit.utils import expirable_submissions, expire_submission, ensure_person_email_info_exists from ietf.person.models import Person from ietf.group.models import Group @@ -608,6 +609,29 @@ class SubmitTests(TestCase): r = self.client.get(urlreverse("submit_tool_instructions")) self.assertEquals(r.status_code, 200) + def test_blackout_access(self): + make_test_data() + + # get + url = urlreverse('submit_upload_submission') + # set meeting to today so we're in blackout period + meeting = Meeting.get_current_meeting() + meeting.date = datetime.datetime.today() + meeting.save() + + # regular user, no access + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + q = PyQuery(r.content) + self.assertEqual(len(q('input[type=file][name=txt]')), 0) + + # Secretariat has access + self.client.login(username="secretary", password="secretary+password") + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + q = PyQuery(r.content) + self.assertEqual(len(q('input[type=file][name=txt]')), 1) + class ApprovalsTestCase(TestCase): def test_approvals(self): make_test_data() diff --git a/ietf/templates/submit/upload_submission.html b/ietf/templates/submit/upload_submission.html index bfdff00ba..3fd3f6daf 100644 --- a/ietf/templates/submit/upload_submission.html +++ b/ietf/templates/submit/upload_submission.html @@ -1,7 +1,7 @@ {% extends "submit/submit_base.html" %} {# Copyright The IETF Trust 2015, All Rights Reserved #} {% load origin %} - +{% load ietf_filters %} {% load bootstrap3 %} {% block title %}Upload{% endblock %} @@ -10,6 +10,10 @@ {% origin %} {% bootstrap_messages %} + {% if form.shutdown and user|has_role:"Secretariat" %} +
WARNING: currently in draft submission blackout period
+ {% endif %} + {% if form.cutoff_warning %}If you run into problems when submitting an Internet-Draft using this and the following pages, you may alternatively submit your draft by email to