From dc4c05ec5b704c23a29e1d30a549f402a09ab36b Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Wed, 25 Mar 2020 13:36:29 +0000 Subject: [PATCH] Changed the object factory instances of nomcom private key and cert to be byte objects (matching the production settings), and fixed the issue with nomcom key handling under Py3 found by fenton@bluepopcorn.net. Did some renaming in nomcom/tests.py to better match setup/teardown function names to functionality. - Legacy-Id: 17536 --- ietf/nomcom/factories.py | 4 ++-- ietf/nomcom/tests.py | 48 ++++++++++++++++++++-------------------- ietf/nomcom/utils.py | 4 ++-- ietf/nomcom/views.py | 9 ++++---- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/ietf/nomcom/factories.py b/ietf/nomcom/factories.py index 5d7cf503c..95b68c771 100644 --- a/ietf/nomcom/factories.py +++ b/ietf/nomcom/factories.py @@ -13,7 +13,7 @@ from ietf.person.factories import PersonFactory, UserFactory import debug # pyflakes:ignore -cert = '''-----BEGIN CERTIFICATE----- +cert = b'''-----BEGIN CERTIFICATE----- MIIDHjCCAgagAwIBAgIJAKDCCjbQboJzMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV BAMMCE5vbUNvbTE1MB4XDTE0MDQwNDIxMTQxNFoXDTE2MDQwMzIxMTQxNFowEzER MA8GA1UEAwwITm9tQ29tMTUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB @@ -34,7 +34,7 @@ toX3j+FUe2UiUak3ACXdrOPSsFP0KRrFwuMnuHHXkGj/Uw== -----END CERTIFICATE----- ''' -key = '''-----BEGIN PRIVATE KEY----- +key = b'''-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2QXCsAitYSOgP Yor77zQnEeHuVqlcuhpH1wpKB+N6WcScA5N3AnX9uZEFOt6McJ+MCiHECdqDlH6n pQTJlpCpIVgAD4B6xzjRBRww8d3lClA/kKwsKzuX93RS0Uv30hAD6q9wjqK/m6vR diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index f757ea570..2f71b4f1b 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -18,7 +18,7 @@ from django.conf import settings from django.core.files import File from django.contrib.auth.models import User from django.urls import reverse -from django.utils.encoding import force_text +from django.utils.encoding import force_text, force_str import debug # pyflakes:ignore @@ -52,12 +52,12 @@ def get_cert_files(): client_test_cert_files = generate_cert() return client_test_cert_files -def build_test_public_keys_dir(obj): +def setup_test_public_keys_dir(obj): obj.saved_nomcom_public_keys_dir = settings.NOMCOM_PUBLIC_KEYS_DIR obj.nomcom_public_keys_dir = obj.tempdir('nomcom-public-keys') settings.NOMCOM_PUBLIC_KEYS_DIR = obj.nomcom_public_keys_dir -def clean_test_public_keys_dir(obj): +def teardown_test_public_keys_dir(obj): settings.NOMCOM_PUBLIC_KEYS_DIR = obj.saved_nomcom_public_keys_dir shutil.rmtree(obj.nomcom_public_keys_dir) @@ -70,7 +70,7 @@ class NomcomViewsTest(TestCase): return response def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) nomcom_test_data() self.cert_file, self.privatekey_file = get_cert_files() self.year = NOMCOM_YEAR @@ -99,7 +99,7 @@ class NomcomViewsTest(TestCase): self.public_nominate_newperson_url = reverse('ietf.nomcom.views.public_nominate_newperson', kwargs={'year': self.year}) def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def access_member_url(self, url): login_testing_unauthorized(self, COMMUNITY_USER, url) @@ -943,12 +943,12 @@ class NomineePositionStateSaveTest(TestCase): """Tests for the NomineePosition save override method""" def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) nomcom_test_data() self.nominee = Nominee.objects.get(email__person__user__username=COMMUNITY_USER) def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_state_autoset(self): """Verify state is autoset correctly""" @@ -978,13 +978,13 @@ class NomineePositionStateSaveTest(TestCase): class FeedbackTest(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) nomcom_test_data() self.cert_file, self.privatekey_file = get_cert_files() def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_encrypted_comments(self): @@ -1011,7 +1011,7 @@ class FeedbackTest(TestCase): class ReminderTest(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) nomcom_test_data() self.nomcom = get_nomcom_by_year(NOMCOM_YEAR) self.cert_file, self.privatekey_file = get_cert_files() @@ -1053,7 +1053,7 @@ class ReminderTest(TestCase): feedback.nominees.add(n) def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_is_time_to_send(self): self.nomcom.reminder_interval = 4 @@ -1109,14 +1109,14 @@ class ReminderTest(TestCase): class InactiveNomcomTests(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) self.nc = NomComFactory.create(**nomcom_kwargs_for_year(group__state_id='conclude')) self.plain_person = PersonFactory.create() self.chair = self.nc.group.role_set.filter(name='chair').first().person self.member = self.nc.group.role_set.filter(name='member').first().person def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_feedback_closed(self): for view in ['ietf.nomcom.views.public_feedback', 'ietf.nomcom.views.private_feedback']: @@ -1303,7 +1303,7 @@ class InactiveNomcomTests(TestCase): class FeedbackLastSeenTests(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) self.nc = NomComFactory.create(**nomcom_kwargs_for_year()) self.author = PersonFactory.create().email_set.first().address self.member = self.nc.group.role_set.filter(name='member').first().person @@ -1322,7 +1322,7 @@ class FeedbackLastSeenTests(TestCase): self.second_from_now = now + datetime.timedelta(seconds=1) def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_feedback_index_badges(self): url = reverse('ietf.nomcom.views.view_feedback',kwargs={'year':self.nc.year()}) @@ -1409,13 +1409,13 @@ class FeedbackLastSeenTests(TestCase): class NewActiveNomComTests(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) self.nc = NomComFactory.create(**nomcom_kwargs_for_year()) self.chair = self.nc.group.role_set.filter(name='chair').first().person self.saved_days_to_expire_nomination_link = settings.DAYS_TO_EXPIRE_NOMINATION_LINK def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) settings.DAYS_TO_EXPIRE_NOMINATION_LINK = self.saved_days_to_expire_nomination_link def test_help(self): @@ -1485,7 +1485,7 @@ class NewActiveNomComTests(TestCase): login_testing_unauthorized(self,self.chair.user.username,url) response = self.client.get(url) self.assertEqual(response.status_code,200) - response = self.client.post(url,{'key':key}) + response = self.client.post(url,{'key': force_str(key)}) self.assertEqual(response.status_code,302) def test_email_pasting(self): @@ -1872,13 +1872,13 @@ class NoPublicKeyTests(TestCase): class AcceptingTests(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) self.nc = NomComFactory(**nomcom_kwargs_for_year()) self.plain_person = PersonFactory.create() self.member = self.nc.group.role_set.filter(name='member').first().person def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_public_accepting_nominations(self): url = reverse('ietf.nomcom.views.public_nominate',kwargs={'year':self.nc.year()}) @@ -1979,12 +1979,12 @@ class AcceptingTests(TestCase): class ShowNomineeTests(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) self.nc = NomComFactory(**nomcom_kwargs_for_year()) self.plain_person = PersonFactory.create() def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def test_feedback_pictures(self): url = reverse('ietf.nomcom.views.public_nominate',kwargs={'year':self.nc.year()}) @@ -2000,13 +2000,13 @@ class ShowNomineeTests(TestCase): class TopicTests(TestCase): def setUp(self): - build_test_public_keys_dir(self) + setup_test_public_keys_dir(self) self.nc = NomComFactory(**nomcom_kwargs_for_year(populate_topics=False)) self.plain_person = PersonFactory.create() self.chair = self.nc.group.role_set.filter(name='chair').first().person def tearDown(self): - clean_test_public_keys_dir(self) + teardown_test_public_keys_dir(self) def testAddEditListRemoveTopic(self): self.assertFalse(self.nc.topic_set.exists()) diff --git a/ietf/nomcom/utils.py b/ietf/nomcom/utils.py index fcb27510c..ed228daba 100644 --- a/ietf/nomcom/utils.py +++ b/ietf/nomcom/utils.py @@ -169,7 +169,7 @@ def retrieve_nomcom_private_key(request, year): command = "%s bf -d -in /dev/stdin -k \"%s\" -a" code, out, error = pipe(command % (settings.OPENSSL_COMMAND, - settings.SECRET_KEY), private_key.encode('utf-8')) + settings.SECRET_KEY), private_key) if code != 0: log("openssl error: %s:\n Error %s: %s" %(command, code, error)) return out @@ -181,7 +181,7 @@ def store_nomcom_private_key(request, year, private_key): else: command = "%s bf -e -in /dev/stdin -k \"%s\" -a" code, out, error = pipe(command % (settings.OPENSSL_COMMAND, - settings.SECRET_KEY), private_key.encode('utf-8')) + settings.SECRET_KEY), private_key) if code != 0: log("openssl error: %s:\n Error %s: %s" %(command, code, error)) if error: diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index 5480cc12c..93a312861 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -9,15 +9,16 @@ import re from collections import OrderedDict, Counter from django.conf import settings +from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.auth.models import AnonymousUser -from django.contrib import messages from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger -from django.urls import reverse +from django.forms.models import modelformset_factory, inlineformset_factory from django.http import Http404, HttpResponseRedirect, HttpResponseForbidden from django.shortcuts import render, get_object_or_404, redirect from django.template.loader import render_to_string -from django.forms.models import modelformset_factory, inlineformset_factory +from django.urls import reverse +from django.utils.encoding import force_bytes from ietf.dbtemplate.models import DBTemplate @@ -119,7 +120,7 @@ def private_key(request, year): if request.method == 'POST': form = PrivateKeyForm(data=request.POST) if form.is_valid(): - store_nomcom_private_key(request, year, form.cleaned_data.get('key', '')) + store_nomcom_private_key(request, year, force_bytes(form.cleaned_data.get('key', ''))) return HttpResponseRedirect(back_url) else: form = PrivateKeyForm()