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')
Ejemplo n.º 3
0
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'))