def setUpClass(cls):
     cls.tmpdir = tempfile.mkdtemp()
     keyczart.Create(cls.tmpdir,
                     "test",
                     keyinfo.DECRYPT_AND_ENCRYPT,
                     asymmetric=True)
     keyczart.AddKey(cls.tmpdir, "PRIMARY", size=4096)
Beispiel #2
0
def main():
    # Dynamically configure the Django settings with the minimum necessary to
    # get Django running tests.
    KEY_LOCS = {}
    try:
        try:
            # If KeyCzar is available, set up the environment.
            from keyczar import keyczart, keyinfo

            # Create an RSA private key.
            keys_dir = tempfile.mkdtemp(
                "django_extensions_tests_keyzcar_rsa_dir")
            keyczart.Create(keys_dir,
                            "test",
                            keyinfo.DECRYPT_AND_ENCRYPT,
                            asymmetric=True)
            keyczart.AddKey(keys_dir, "PRIMARY", size=4096)
            KEY_LOCS['DECRYPT_AND_ENCRYPT'] = keys_dir

            # Create an RSA public key.
            pub_dir = tempfile.mkdtemp(
                "django_extensions_tests_keyzcar_pub_dir")
            keyczart.PubKey(keys_dir, pub_dir)
            KEY_LOCS['ENCRYPT'] = pub_dir
        except ImportError:
            pass

        settings.configure(
            INSTALLED_APPS=[
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.admin',
                'django.contrib.sessions',
                'django_extensions',
                'django_extensions.tests',
            ],
            # Django replaces this, but it still wants it. *shrugs*
            DATABASE_ENGINE='django.db.backends.sqlite3',
            DATABASES={'default': {
                'ENGINE': 'django.db.backends.sqlite3',
            }},
            MEDIA_ROOT='/tmp/django_extensions_test_media/',
            MEDIA_PATH='/media/',
            ROOT_URLCONF='django_extensions.tests.urls',
            DEBUG=True,
            TEMPLATE_DEBUG=True,
            ENCRYPTED_FIELD_KEYS_DIR=KEY_LOCS,
        )

        from django.test.utils import get_runner
        test_runner = get_runner(settings)(verbosity=2, interactive=True)
        failures = test_runner.run_tests(['django_extensions'])
        sys.exit(failures)

    finally:
        for name, path in KEY_LOCS.items():
            # cleanup crypto key temp dirs
            shutil.rmtree(path)
def main():
    # Dynamically configure the Django settings with the minimum necessary to
    # get Django running tests
    ENCRYPTED_FIELD_KEYS_DIR = None
    try:
        try:
            from keyczar import keyczart, keyinfo
            ENCRYPTED_FIELD_KEYS_DIR = tempfile.mkdtemp(
                "django_extensions_tests_keyzcar_keys_dir")
            # TODO: move this to the unit test for encrypted fields
            keyczart.Create(ENCRYPTED_FIELD_KEYS_DIR, "test",
                            keyinfo.DECRYPT_AND_ENCRYPT)
            keyczart.AddKey(ENCRYPTED_FIELD_KEYS_DIR, "PRIMARY")
        except ImportError:
            pass

        settings.configure(
            INSTALLED_APPS=[
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.admin',
                'django.contrib.sessions',
                'django_extensions',
                'django_extensions.tests',
            ],
            # Django replaces this, but it still wants it. *shrugs*
            DATABASE_ENGINE='django.db.backends.sqlite3',
            DATABASES={'default': {
                'ENGINE': 'django.db.backends.sqlite3',
            }},
            MEDIA_ROOT='/tmp/django_extensions_test_media/',
            MEDIA_PATH='/media/',
            ROOT_URLCONF='django_extensions.tests.urls',
            DEBUG=True,
            TEMPLATE_DEBUG=True,
            ENCRYPTED_FIELD_KEYS_DIR=ENCRYPTED_FIELD_KEYS_DIR,
        )

        from django.test.utils import get_runner
        test_runner = get_runner(settings)(verbosity=2, interactive=True)
        failures = test_runner.run_tests(['django_extensions'])
        sys.exit(failures)

    finally:
        if ENCRYPTED_FIELD_KEYS_DIR:
            # cleanup crypto key temp dir
            shutil.rmtree(ENCRYPTED_FIELD_KEYS_DIR)
    def test_happy_path(self):

        with TempDirectory() as dir_name:
            keyczart.Create(dir_name, "some purpose",
                            keyczart.keyinfo.SIGN_AND_VERIFY)

            keyczart.AddKey(dir_name, keyczart.keyinfo.PRIMARY)

            signer = keyczar.Signer.Read(dir_name)

            doc = {
                "dave": "was",
                "here": "today",
            }
            pre_sign_doc_len = len(doc)
            tamper.sign(signer, doc)
            self.assertEqual(len(doc), 1 + pre_sign_doc_len)
            self.assertTrue(tamper.verify(signer, doc))
Beispiel #5
0
    def setUpClass(cls):
        """Setup the integration tests environment. Specifically:

        -- create a temporary database including creating a design doc
        which permits reading persistant instances of Fruit
        -- create a tampering signer
        -- configure the async model I/O classes to use the newly
        created tampering signer and temporary database

        """
        # in case a previous test didn't clean itself up delete database
        # totally ignoring the result
        response = requests.delete(_database_url)
        # create database
        response = requests.put(_database_url)
        assert response.status_code == httplib.CREATED

        # install design doc
        url = "%s/_design/%s" % (_database_url, _design_doc_name)
        response = requests.put(
            url,
            data=_design_doc,
            headers={"Content-Type": "application/json; charset=utf8"})
        assert response.status_code == httplib.CREATED

        # get async_model_actions using our temp database
        async_model_actions.database = _database_url

        # create a tampering signer and get async_model_actions using it
        tampering_dir_name = tempfile.mkdtemp()

        keyczart.Create(
            tampering_dir_name,
            "some purpose",
            keyczart.keyinfo.SIGN_AND_VERIFY)
        keyczart.AddKey(
            tampering_dir_name,
            keyczart.keyinfo.PRIMARY)
        tampering_signer = keyczar.Signer.Read(tampering_dir_name)

        shutil.rmtree(tampering_dir_name, ignore_errors=True)

        # get async_model_actions using our tampering signer
        async_model_actions.tampering_signer = tampering_signer
def keyczar_keys(request):
    # If KeyCzar is available, set up the environment.
    if keyczar_active:
        # Create an RSA private key.
        keys_dir = tempfile.mkdtemp("django_extensions_tests_keyzcar_rsa_dir")
        keyczart.Create(keys_dir, "test", keyinfo.DECRYPT_AND_ENCRYPT, asymmetric=True)
        keyczart.AddKey(keys_dir, "PRIMARY", size=4096)
        KEY_LOCS['DECRYPT_AND_ENCRYPT'] = keys_dir

        # Create an RSA public key.
        pub_dir = tempfile.mkdtemp("django_extensions_tests_keyzcar_pub_dir")
        keyczart.PubKey(keys_dir, pub_dir)
        KEY_LOCS['ENCRYPT'] = pub_dir

    # cleanup crypto key temp dirs
    def cleanup():
        import shutil
        for name, path in KEY_LOCS.items():
            shutil.rmtree(path)
    request.addfinalizer(cleanup)
    def test_verify_fails_when_sig_tampered_with(self):

        with TempDirectory() as dir_name:
            keyczart.Create(dir_name, "some purpose",
                            keyczart.keyinfo.SIGN_AND_VERIFY)

            keyczart.AddKey(dir_name, keyczart.keyinfo.PRIMARY)

            signer = keyczar.Signer.Read(dir_name)

            doc = {
                "dave": "was",
                "here": "today",
            }
            pre_sign_doc_len = len(doc)
            tamper.sign(signer, doc)
            self.assertEqual(len(doc), 1 + pre_sign_doc_len)

            doc[tamper._tampering_sig_prop_name] = "dave"

            self.assertFalse(tamper.verify(signer, doc))
Beispiel #8
0
def main():
    # Dynamically configure the Django settings with the minimum necessary to
    # get Django running tests.
    KEY_LOCS = {}
    try:
        try:
            # If KeyCzar is available, set up the environment.
            from keyczar import keyczart, keyinfo

            # Create an RSA private key.
            keys_dir = tempfile.mkdtemp("django_extensions_tests_keyzcar_rsa_dir")
            keyczart.Create(keys_dir, "test", keyinfo.DECRYPT_AND_ENCRYPT, asymmetric=True)
            keyczart.AddKey(keys_dir, "PRIMARY", size=4096)
            KEY_LOCS['DECRYPT_AND_ENCRYPT'] = keys_dir

            # Create an RSA public key.
            pub_dir = tempfile.mkdtemp("django_extensions_tests_keyzcar_pub_dir")
            keyczart.PubKey(keys_dir, pub_dir)
            KEY_LOCS['ENCRYPT'] = pub_dir
        except ImportError:
            pass

        settings.configure(
            INSTALLED_APPS=[
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.admin',
                'django.contrib.sessions',
                'django_extensions.tests.testapp',
                'django_extensions',
            ],
            # Django replaces this, but it still wants it. *shrugs*
            DATABASE_ENGINE='django.db.backends.sqlite3',
            DATABASES={
                'default': {
                    'ENGINE': 'django.db.backends.sqlite3',
                    'NAME': ':memory:',
                }
            },
            MEDIA_ROOT='/tmp/django_extensions_test_media/',
            MEDIA_PATH='/media/',
            ROOT_URLCONF='django_extensions.tests.urls',
            DEBUG=True,
            TEMPLATE_DEBUG=True,
            ENCRYPTED_FIELD_KEYS_DIR=KEY_LOCS,
        )

        if django.VERSION[:2] >= (1, 7):
            django.setup()

        apps = ['django_extensions']
        if django.VERSION[:2] >= (1, 6):
            apps.append('django_extensions.tests.testapp')
            apps.append('django_extensions.tests')

        from django.core.management import call_command
        from django.test.utils import get_runner

        try:
            from django.contrib.auth import get_user_model
        except ImportError:
            USERNAME_FIELD = "username"
        else:
            USERNAME_FIELD = get_user_model().USERNAME_FIELD

        DjangoTestRunner = get_runner(settings)

        class TestRunner(DjangoTestRunner):
            def setup_databases(self, *args, **kwargs):
                result = super(TestRunner, self).setup_databases(*args, **kwargs)
                kwargs = {
                    "interactive": False,
                    "email": "*****@*****.**",
                    USERNAME_FIELD: "admin",
                }
                call_command("createsuperuser", **kwargs)
                return result

        failures = TestRunner(verbosity=2, interactive=True).run_tests(apps)
        sys.exit(failures)

    finally:
        for name, path in KEY_LOCS.items():
            # cleanup crypto key temp dirs
            shutil.rmtree(path)