Util functions to encrypt/decrypt the private key. Decorator to redirect to the private key input view if there is no key defined in the user session. Templatetag 'decrypt' that decrypts text using the private key provided to the templatetag. Fixes #947 - Legacy-Id: 5335
114 lines
4.4 KiB
Python
114 lines
4.4 KiB
Python
from django.conf import settings
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from ietf.dbtemplate.models import DBTemplate
|
|
from ietf.person.models import Email
|
|
from ietf.utils.pipe import pipe
|
|
|
|
MAIN_NOMCOM_TEMPLATE_PATH = '/nomcom/defaults/'
|
|
QUESTIONNAIRE_TEMPLATE = 'position/questionnaire.txt'
|
|
HEADER_QUESTIONNAIRE_TEMPLATE = 'position/header_questionnaire.txt'
|
|
REQUIREMENTS_TEMPLATE = 'position/requirements.txt'
|
|
HOME_TEMPLATE = 'home.rst'
|
|
INEXISTENT_PERSON_TEMPLATE = 'email/inexistent_person.txt'
|
|
NOMINEE_EMAIL_TEMPLATE = 'email/new_nominee.txt'
|
|
NOMINATION_EMAIL_TEMPLATE = 'email/new_nomination.txt'
|
|
DEFAULT_NOMCOM_TEMPLATES = [HOME_TEMPLATE, INEXISTENT_PERSON_TEMPLATE, NOMINATION_EMAIL_TEMPLATE, NOMINEE_EMAIL_TEMPLATE]
|
|
|
|
|
|
def get_nomcom_by_year(year):
|
|
from ietf.nomcom.models import NomCom
|
|
return get_object_or_404(NomCom,
|
|
group__acronym__icontains=year,
|
|
group__state__slug='active')
|
|
|
|
|
|
def get_user_email(user):
|
|
emails = Email.objects.filter(person__user=user)
|
|
email = emails and emails[0] or None
|
|
return email
|
|
|
|
|
|
def is_nomcom_member(user, nomcom):
|
|
is_group_member = nomcom.group.is_member(user)
|
|
if not is_group_member:
|
|
raise PermissionDenied("Must be nomcom member")
|
|
|
|
|
|
def is_nomcom_chair(user, nomcom):
|
|
is_group_chair = nomcom.group.is_chair(user)
|
|
if not is_group_chair:
|
|
raise PermissionDenied("Must be nomcom chair")
|
|
|
|
|
|
def initialize_templates_for_group(group):
|
|
for template_name in DEFAULT_NOMCOM_TEMPLATES:
|
|
template_path = MAIN_NOMCOM_TEMPLATE_PATH + template_name
|
|
template = DBTemplate.objects.get(path=template_path)
|
|
DBTemplate.objects.create(
|
|
group=group.group,
|
|
title=template.title,
|
|
path='/nomcom/' + group.group.acronym + '/' + template_name,
|
|
variables=template.variables,
|
|
type_id=template.type_id,
|
|
content=template.content)
|
|
|
|
|
|
def initialize_questionnaire_for_position(position):
|
|
questionnaire_path = MAIN_NOMCOM_TEMPLATE_PATH + QUESTIONNAIRE_TEMPLATE
|
|
header_questionnaire_path = MAIN_NOMCOM_TEMPLATE_PATH + HEADER_QUESTIONNAIRE_TEMPLATE
|
|
template = DBTemplate.objects.get(path=questionnaire_path)
|
|
header_template = DBTemplate.objects.get(path=header_questionnaire_path)
|
|
DBTemplate.objects.create(
|
|
group=position.nomcom.group,
|
|
title=header_template.title + ' [%s]' % position.name,
|
|
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + HEADER_QUESTIONNAIRE_TEMPLATE,
|
|
variables=header_template.variables,
|
|
type_id=header_template.type_id,
|
|
content=header_template.content)
|
|
questionnaire = DBTemplate.objects.create(
|
|
group=position.nomcom.group,
|
|
title=template.title + '[%s]' % position.name,
|
|
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + QUESTIONNAIRE_TEMPLATE,
|
|
variables=template.variables,
|
|
type_id=template.type_id,
|
|
content=template.content)
|
|
return questionnaire
|
|
|
|
|
|
def initialize_requirements_for_position(position):
|
|
requirements_path = MAIN_NOMCOM_TEMPLATE_PATH + REQUIREMENTS_TEMPLATE
|
|
template = DBTemplate.objects.get(path=requirements_path)
|
|
return DBTemplate.objects.create(
|
|
group=position.nomcom.group,
|
|
title=template.title + ' [%s]' % position.name,
|
|
path='/nomcom/' + position.nomcom.group.acronym + '/' + str(position.id) + '/' + REQUIREMENTS_TEMPLATE,
|
|
variables=template.variables,
|
|
type_id=template.type_id,
|
|
content=template.content)
|
|
|
|
|
|
def retrieve_nomcom_private_key(request, year):
|
|
private_key = request.session.get('NOMCOM_PRIVATE_KEY_%s' % year, None)
|
|
|
|
if not private_key:
|
|
return private_key
|
|
|
|
command = "%s bf -d -in /dev/stdin -k \"%s\" -a"
|
|
code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
|
|
settings.SECRET_KEY), private_key)
|
|
return out
|
|
|
|
|
|
def store_nomcom_private_key(request, year, private_key):
|
|
if not private_key:
|
|
request.session['NOMCOM_PRIVATE_KEY_%s' % year] = ''
|
|
else:
|
|
command = "%s bf -e -in /dev/stdin -k \"%s\" -a"
|
|
code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
|
|
settings.SECRET_KEY), private_key)
|
|
if error:
|
|
out = ''
|
|
request.session['NOMCOM_PRIVATE_KEY_%s' % year] = out
|