Check valid public key. Fixes #1004

- Legacy-Id: 5711
This commit is contained in:
Emilio A. Sánchez López 2013-05-08 12:39:50 +00:00
parent 868a82a327
commit 454128b165
2 changed files with 25 additions and 1 deletions

View file

@ -26,7 +26,8 @@ from ietf.nomcom.utils import QUESTIONNAIRE_TEMPLATE, NOMINATION_EMAIL_TEMPLATE,
INEXISTENT_PERSON_TEMPLATE, NOMINEE_EMAIL_TEMPLATE, \
NOMINATION_RECEIPT_TEMPLATE, FEEDBACK_RECEIPT_TEMPLATE, \
get_user_email, get_hash_nominee_position, get_year_by_nomcom, \
HEADER_QUESTIONNAIRE_TEMPLATE, validate_private_key
HEADER_QUESTIONNAIRE_TEMPLATE, validate_private_key, \
validate_public_key
from ietf.nomcom.decorators import member_required
@ -284,6 +285,15 @@ class EditNomcomForm(BaseNomcomForm, forms.ModelForm):
fields = ('public_key', 'initial_text',
'send_questionnaire', 'reminder_interval')
def clean_public_key(self):
public_key = self.cleaned_data.get('public_key', None)
if not public_key:
return
(validation, error) = validate_public_key(public_key)
if validation:
return public_key
raise forms.ValidationError('Invalid public key. Error was: %s' % error)
class MergeForm(BaseNomcomForm, forms.Form):

View file

@ -171,3 +171,17 @@ def validate_private_key(key):
os.unlink(key_file.name)
return (not error, error)
def validate_public_key(public_key):
key_file = tempfile.NamedTemporaryFile(delete=False)
for chunk in public_key.chunks():
key_file.write(chunk)
key_file.close()
command = "%s x509 -in %s -noout"
code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
key_file.name))
os.unlink(key_file.name)
return (not error, error)