def test_no_encryption(self): """With no encryption settings, fields still work""" with self.settings(GNUPG_HOME=''): di = DonorInfo(agency_tracking_id='TRACK', account=self.account, xml='Plain Text') di.save() # Was saved in plain text in the DB values = DonorInfo.objects.filter(pk=di.pk).values_list('xml') byte_str = values[0][0] if isinstance(byte_str, memoryview): byte_str = byte_str.tobytes() self.assertEqual(byte_str.decode('utf-8'), 'Plain Text') # Decodes correctly from_db = DonorInfo.objects.get(pk=di.pk) self.assertEqual(from_db.xml, 'Plain Text')
def test_encryption(self): """Verify that fields *are* encrypted when GNUPG_HOME is set""" with self.settings(GNUPG_HOME=os.path.join('peacecorps', 'tests', 'gpg'), GPG_RECIPIENTS={ 'peacecorps.DonorInfo.xml': 'C68F6B22'}): di = DonorInfo(agency_tracking_id='TRACK', account=self.account, xml='Plain Text') di.save() # Was *not* saved in plain text in the DB values = DonorInfo.objects.filter(pk=di.pk).values_list('xml') byte_str = values[0][0] self.assertTrue('BEGIN PGP' in byte_str.decode('utf-8')) # Decodes correctly from_db = DonorInfo.objects.get(pk=di.pk) self.assertEqual(from_db.xml, 'Plain Text')
def convert_to_paygov(data, account, callback_base): """Convert the form data into a pay.gov model (including appropriate XML) and return.""" data = dict(data) # shallow copy tracking_id = generate_agency_tracking_id() data['agency_tracking_id'] = tracking_id data['agency_memo'] = generate_agency_memo(data) data['form_id'] = settings.PAY_GOV_FORM_ID # payer_name could be the individual or organization field data['payer_name'] = data.get('payer_name', data.get('organization_name', '')) data['success_url'], data['failure_url'] = ( callback_base + url for url in redirect_urls(account)) data.update(generate_custom_fields(data)) xml = generate_collection_request(data) return DonorInfo(agency_tracking_id=tracking_id, account=account, xml=tostring(xml).decode('utf-8'))