Replaced the ad_hoc nomcom_member_required() decorator with our generic role_required() decorator. Changed access permission for nomcom-chair only pages to also permit nomcom advisor access (this lets the previous nomcom chair explain and assist as needed). Also tweaked some text strings in the email feedback pipe script.

- Legacy-Id: 6160
This commit is contained in:
Henrik Levkowetz 2013-09-16 21:05:25 +00:00
parent d60210484f
commit 641bcccfba
4 changed files with 28 additions and 40 deletions

View file

@ -7,19 +7,6 @@ from ietf.ietfauth.decorators import passes_test_decorator
from ietf.nomcom.utils import get_nomcom_by_year
def nomcom_member_required(role=None):
def _is_nomcom_member(user, *args, **kwargs):
year = kwargs.get('year', None)
if year:
nomcom = get_nomcom_by_year(year=year)
if role == 'chair':
return nomcom.group.is_chair(user)
else:
return nomcom.group.is_member(user)
return False
return passes_test_decorator(_is_nomcom_member, 'Restricted to NomCom %s' % role)
def nomcom_private_key_required(view_func):
def inner(request, *args, **kwargs):
year = kwargs.get('year', None)

View file

@ -21,8 +21,7 @@ from ietf.nomcom.models import NomCom, Nomination, Nominee, NomineePosition, \
from ietf.nomcom.utils import (NOMINATION_RECEIPT_TEMPLATE, FEEDBACK_RECEIPT_TEMPLATE,
get_user_email, validate_private_key, validate_public_key,
get_or_create_nominee, create_feedback_email)
from ietf.nomcom.decorators import nomcom_member_required
from ietf.ietfauth.utils import role_required
ROLODEX_URL = getattr(settings, 'ROLODEX_URL', None)
@ -121,7 +120,7 @@ class EditMembersFormPreview(FormPreview):
form_template = 'nomcom/edit_members.html'
preview_template = 'nomcom/edit_members_preview.html'
@method_decorator(nomcom_member_required(role='chair'))
@method_decorator(role_required("Nomcom Chair", "Nomcom Advisor"))
def __call__(self, request, *args, **kwargs):
year = kwargs['year']
group = get_group_or_404(year)

View file

@ -11,10 +11,10 @@ from ietf.nomcom.fields import EncryptedException
import debug
class Command(BaseCommand):
help = (u"Receive email feedback, encrypt and save it.")
help = (u"Receive nomcom email, encrypt and save it.")
option_list = BaseCommand.option_list + (
make_option('--nomcom-year', dest='year', help='NomCom year'),
make_option('--email-file', dest='email', help='Feedback email filename (default: stdin)'),)
make_option('--email-file', dest='email', help='File containing email (default: stdin)'),)
def handle(self, *args, **options):
email = options.get('email', None)
@ -24,6 +24,7 @@ class Command(BaseCommand):
help_message = 'Usage: feeback_email --nomcom-year <nomcom-year> --email-file <email-file>'
if not year:
log("Error: missing nomcom-year")
raise CommandError("Missing nomcom-year\n\n"+help_message)
if not email:
@ -39,6 +40,6 @@ class Command(BaseCommand):
try:
feedback = create_feedback_email(nomcom, msg)
log(u"Read feedback email by %s" % feedback.author)
log(u"Received nomcom email from %s" % feedback.author)
except (EncryptedException, ValueError) as e:
raise CommandError(e)

View file

@ -21,7 +21,7 @@ from ietf.dbtemplate.models import DBTemplate
from ietf.dbtemplate.views import template_edit
from ietf.name.models import NomineePositionState, FeedbackType
from ietf.nomcom.decorators import nomcom_member_required, nomcom_private_key_required
from ietf.nomcom.decorators import nomcom_private_key_required
from ietf.nomcom.forms import (NominateForm, FeedbackForm, QuestionnaireForm,
MergeForm, NomComTemplateForm, PositionForm,
PrivateKeyForm, EditNomcomForm, EditNomineeForm,
@ -31,6 +31,7 @@ from ietf.nomcom.models import Position, NomineePosition, Nominee, Feedback, Nom
from ietf.nomcom.utils import (get_nomcom_by_year, store_nomcom_private_key,
get_hash_nominee_position, send_reminder_to_nominees,
HOME_TEMPLATE, NOMINEE_REMINDER_TEMPLATE)
from ietf.ietfauth.utils import role_required
def index(request):
@ -50,7 +51,7 @@ def year_index(request, year):
'template': template}, RequestContext(request))
@nomcom_member_required(role='member')
@role_required("Nomcom")
def private_key(request, year):
nomcom = get_nomcom_by_year(year)
message = None
@ -76,7 +77,7 @@ def private_key(request, year):
'selected': 'private_key'}, RequestContext(request))
@nomcom_member_required(role='member')
@role_required("Nomcom")
def private_index(request, year):
nomcom = get_nomcom_by_year(year)
all_nominee_positions = NomineePosition.objects.get_by_nomcom(nomcom).not_duplicated()
@ -142,7 +143,7 @@ def private_index(request, year):
'message': message}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def send_reminder_mail(request, year):
nomcom = get_nomcom_by_year(year)
nominees = Nominee.objects.get_by_nomcom(nomcom).not_duplicated().filter(nomineeposition__state='pending').distinct()
@ -169,7 +170,7 @@ def send_reminder_mail(request, year):
'message': message}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def private_merge(request, year):
nomcom = get_nomcom_by_year(year)
message = None
@ -214,7 +215,7 @@ def public_nominate(request, year):
return nominate(request, year, True)
@nomcom_member_required(role='member')
@role_required("Nomcom")
def private_nominate(request, year):
return nominate(request, year, False)
@ -257,7 +258,7 @@ def public_feedback(request, year):
return feedback(request, year, True)
@nomcom_member_required(role='member')
@role_required("Nomcom")
def private_feedback(request, year):
return feedback(request, year, False)
@ -312,7 +313,7 @@ def feedback(request, year, public):
'selected': 'feedback'}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def private_feedback_email(request, year):
nomcom = get_nomcom_by_year(year)
has_publickey = nomcom.public_key and True or False
@ -345,7 +346,7 @@ def private_feedback_email(request, year):
'selected': 'feedback_email'}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def private_questionnaire(request, year):
nomcom = get_nomcom_by_year(year)
has_publickey = nomcom.public_key and True or False
@ -417,7 +418,7 @@ def process_nomination_status(request, year, nominee_position_id, state, date, h
'selected': 'feedback'}, RequestContext(request))
@nomcom_member_required(role='member')
@role_required("Nomcom")
@nomcom_private_key_required
def view_feedback(request, year):
nomcom = get_nomcom_by_year(year)
@ -446,7 +447,7 @@ def view_feedback(request, year):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
@nomcom_private_key_required
def view_feedback_pending(request, year):
nomcom = get_nomcom_by_year(year)
@ -558,7 +559,7 @@ def view_feedback_pending(request, year):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='member')
@role_required("Nomcom")
@nomcom_private_key_required
def view_feedback_unrelated(request, year):
nomcom = get_nomcom_by_year(year)
@ -574,7 +575,7 @@ def view_feedback_unrelated(request, year):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='member')
@role_required("Nomcom")
@nomcom_private_key_required
def view_feedback_nominee(request, year, nominee_id):
nomcom = get_nomcom_by_year(year)
@ -589,7 +590,7 @@ def view_feedback_nominee(request, year, nominee_id):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def edit_nominee(request, year, nominee_id):
nomcom = get_nomcom_by_year(year)
nominee = get_object_or_404(Nominee, id=nominee_id)
@ -613,7 +614,7 @@ def edit_nominee(request, year, nominee_id):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def edit_nomcom(request, year):
nomcom = get_nomcom_by_year(year)
has_publickey = nomcom.public_key and True or False
@ -649,7 +650,7 @@ def edit_nomcom(request, year):
'selected': 'edit_nomcom'}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def delete_nomcom(request, year):
nomcom = get_nomcom_by_year(year)
post_delete_redirect = reverse('nomcom_deleted')
@ -665,7 +666,7 @@ def delete_nomcom(request, year):
extra_context=extra_context)
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def list_templates(request, year):
nomcom = get_nomcom_by_year(year)
positions = nomcom.position_set.all()
@ -679,7 +680,7 @@ def list_templates(request, year):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def edit_template(request, year, template_id):
nomcom = get_nomcom_by_year(year)
return_url = request.META.get('HTTP_REFERER', None)
@ -692,7 +693,7 @@ def edit_template(request, year, template_id):
'nomcom': nomcom})
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def list_positions(request, year):
nomcom = get_nomcom_by_year(year)
positions = nomcom.position_set.all()
@ -704,7 +705,7 @@ def list_positions(request, year):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def remove_position(request, year, position_id):
nomcom = get_nomcom_by_year(year)
try:
@ -721,7 +722,7 @@ def remove_position(request, year, position_id):
'nomcom': nomcom}, RequestContext(request))
@nomcom_member_required(role='chair')
@role_required("Nomcom Chair", "Nomcom Advisor")
def edit_position(request, year, position_id=None):
nomcom = get_nomcom_by_year(year)
if position_id: