Skip to content

Commit 454128b

Browse files
committed
Check valid public key. Fixes ietf-tools#1004
- Legacy-Id: 5711
1 parent 868a82a commit 454128b

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

ietf/nomcom/forms.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
INEXISTENT_PERSON_TEMPLATE, NOMINEE_EMAIL_TEMPLATE, \
2727
NOMINATION_RECEIPT_TEMPLATE, FEEDBACK_RECEIPT_TEMPLATE, \
2828
get_user_email, get_hash_nominee_position, get_year_by_nomcom, \
29-
HEADER_QUESTIONNAIRE_TEMPLATE, validate_private_key
29+
HEADER_QUESTIONNAIRE_TEMPLATE, validate_private_key, \
30+
validate_public_key
3031
from ietf.nomcom.decorators import member_required
3132

3233

@@ -284,6 +285,15 @@ class Meta:
284285
fields = ('public_key', 'initial_text',
285286
'send_questionnaire', 'reminder_interval')
286287

288+
def clean_public_key(self):
289+
public_key = self.cleaned_data.get('public_key', None)
290+
if not public_key:
291+
return
292+
(validation, error) = validate_public_key(public_key)
293+
if validation:
294+
return public_key
295+
raise forms.ValidationError('Invalid public key. Error was: %s' % error)
296+
287297

288298
class MergeForm(BaseNomcomForm, forms.Form):
289299

ietf/nomcom/utils.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,17 @@ def validate_private_key(key):
171171

172172
os.unlink(key_file.name)
173173
return (not error, error)
174+
175+
176+
def validate_public_key(public_key):
177+
key_file = tempfile.NamedTemporaryFile(delete=False)
178+
for chunk in public_key.chunks():
179+
key_file.write(chunk)
180+
key_file.close()
181+
182+
command = "%s x509 -in %s -noout"
183+
code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
184+
key_file.name))
185+
186+
os.unlink(key_file.name)
187+
return (not error, error)

0 commit comments

Comments
 (0)