Example #1
0
def obfuscate(value, juice=None):
    """
    Template filter that obfuscates whatever text it is applied to. The text is
    supposed to be a URL, but it will obfuscate anything.

    Usage:
        Extremely unfriendly URL:
        {{ "/my-secret-path/"|obfuscate }}

        Include some SEO juice:
        {{ "/my-secret-path/"|obfuscate:"some SEO friendly text" }}
    """
    kwargs = {
        'key':
        encrypt(value,
                settings.UNFRIENDLY_SECRET,
                settings.UNFRIENDLY_IV,
                checksum=settings.UNFRIENDLY_ENFORCE_CHECKSUM),
    }
    if juice:
        kwargs['juice'] = slugify(juice)

    if settings.UNFRIENDLY_ENABLE:
        return reverse('unfriendly-deobfuscate', kwargs=kwargs)
    else:
        return value
Example #2
0
 def test_obfuscate_filter(self):
     """
     Test the obfuscate filter.
     """
     test_url = reverse('unfriendly-test')
     obfuscated_url = obfuscate(test_url)
     view_url = reverse('unfriendly-deobfuscate', kwargs={
         'key': encrypt(test_url, settings.UNFRIENDLY_SECRET),
     })
     self.assertEqual(view_url, obfuscated_url)
Example #3
0
 def test_obfuscate_long_filter(self):
     """
     Test the obfuscate filter.
     """
     test_url = reverse("unfriendly-test-long")
     obfuscated_url = obfuscate(test_url)
     view_url = reverse(
         "unfriendly-deobfuscate",
         kwargs={"key": encrypt(test_url, settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)},
     )
     self.assertEqual(view_url, obfuscated_url)
Example #4
0
    def test_encryption_oddkey(self):
        """
        Test the encryption with an odd length secret key.
        """
        original = self.juice

        obfuscated = encrypt(original, settings.UNFRIENDLY_SECRET[0:11], settings.UNFRIENDLY_IV)
        self.assertNotEqual(original, obfuscated)

        deobfuscated = decrypt(obfuscated, settings.UNFRIENDLY_SECRET[0:11], settings.UNFRIENDLY_IV)
        self.assertEqual(original, deobfuscated)
Example #5
0
    def test_encryption(self):
        """
        Test the encryption.
        """
        original = self.juice

        obfuscated = encrypt(original, settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)
        self.assertNotEqual(original, obfuscated)

        deobfuscated = decrypt(obfuscated, settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)
        self.assertEqual(original, deobfuscated)
Example #6
0
    def test_encryption(self):
        """
        Test the encryption.
        """
        original = self.juice

        obfuscated = encrypt(original, settings.UNFRIENDLY_SECRET)
        self.assertNotEqual(original, obfuscated)

        deobfuscated = decrypt(obfuscated, settings.UNFRIENDLY_SECRET)
        self.assertEqual(original, deobfuscated)
Example #7
0
 def test_obfuscate_long_filter(self):
     """
     Test the obfuscate filter.
     """
     test_url = reverse('unfriendly-test-long')
     obfuscated_url = obfuscate(test_url)
     view_url = reverse('unfriendly-deobfuscate', kwargs={
         'key': encrypt(test_url, settings.UNFRIENDLY_SECRET,
                        settings.UNFRIENDLY_IV),
     })
     self.assertEqual(view_url, obfuscated_url)
Example #8
0
 def test_obfuscate_filter_disabled(self):
     """
     Test the obfuscate filter when disabled in settings.
     """
     test_url = reverse("unfriendly-test")
     obfuscated_url = obfuscate(test_url)
     view_url = reverse(
         "unfriendly-deobfuscate",
         kwargs={"key": encrypt(test_url, settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)},
     )
     self.assertNotEqual(view_url, obfuscated_url)
     self.assertNotEqual(view_url, test_url)
Example #9
0
 def test_obfuscate_filter_with_juice(self):
     """
     Test the obfuscate filter.
     """
     test_url = reverse('unfriendly-test')
     obfuscated_url = obfuscate(test_url, self.juice)
     view_url = reverse('unfriendly-deobfuscate', kwargs={
         'juice': slugify(self.juice),
         'key': encrypt(test_url, settings.UNFRIENDLY_SECRET,
                        settings.UNFRIENDLY_IV),
     })
     self.assertEqual(view_url, obfuscated_url)
Example #10
0
 def test_obfuscate_filter_disabled(self):
     """
     Test the obfuscate filter when disabled in settings.
     """
     test_url = reverse('unfriendly-test')
     obfuscated_url = obfuscate(test_url)
     view_url = reverse('unfriendly-deobfuscate', kwargs={
         'key': encrypt(test_url, settings.UNFRIENDLY_SECRET,
                        settings.UNFRIENDLY_IV),
     })
     self.assertNotEqual(view_url, obfuscated_url)
     self.assertNotEqual(view_url, test_url)
Example #11
0
 def test_obfuscate_filter_with_juice(self):
     """
     Test the obfuscate filter.
     """
     test_url = reverse('unfriendly-test')
     obfuscated_url = obfuscate(test_url, self.juice)
     view_url = reverse('unfriendly-deobfuscate', kwargs={
         'juice': slugify(self.juice),
         'key': encrypt(test_url, settings.UNFRIENDLY_SECRET,
                        settings.UNFRIENDLY_IV),
     })
     self.assertEqual(view_url, obfuscated_url)
Example #12
0
    def test_encryption_oddkey(self):
        """
        Test the encryption with an odd length secret key.
        """
        original = self.juice

        obfuscated = encrypt(original, settings.UNFRIENDLY_SECRET[0:11],
                             settings.UNFRIENDLY_IV)
        self.assertNotEqual(original, obfuscated)

        deobfuscated = decrypt(obfuscated, settings.UNFRIENDLY_SECRET[0:11],
                               settings.UNFRIENDLY_IV)
        self.assertEqual(original, deobfuscated)
Example #13
0
 def test_obfuscate_filter_with_juice(self):
     """
     Test the obfuscate filter.
     """
     test_url = reverse("unfriendly-test")
     obfuscated_url = obfuscate(test_url, self.juice)
     view_url = reverse(
         "unfriendly-deobfuscate",
         kwargs={
             "juice": slugify(self.juice),
             "key": encrypt(test_url, settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV),
         },
     )
     self.assertEqual(view_url, obfuscated_url)
Example #14
0
    def test_encryption_checksum(self):
        """
        Test the encryption with bad checksums.
        """
        original = self.juice

        obfuscated = encrypt(original, settings.UNFRIENDLY_SECRET,
                             settings.UNFRIENDLY_IV)

        # Add characters to the end (cannot unpack checksum)
        self.assertRaises(CheckSumError, decrypt, obfuscated + 'oops',
                          settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)

        # Replace last few characters (checksum mismatch)
        self.assertRaises(CheckSumError, decrypt, obfuscated[-4:] + 'oops',
                          settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)
Example #15
0
    def test_encryption_checksum(self):
        """
        Test the encryption with bad checksums.
        """
        original = self.juice

        obfuscated = encrypt(original, settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV)

        # Add characters to the end (cannot unpack checksum)
        self.assertRaises(
            CheckSumError, decrypt, obfuscated + "oops", settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV
        )

        # Replace last few characters (checksum mismatch)
        self.assertRaises(
            CheckSumError, decrypt, obfuscated[-4:] + "oops", settings.UNFRIENDLY_SECRET, settings.UNFRIENDLY_IV
        )
def obfuscate(value, juice=None):
    """
    Template filter that obfuscates whatever text it is applied to. The text is
    supposed to be a URL, but it will obfuscate anything.

    Usage:
        Extremely unfriendly URL:
        {{ "/my-secret-path/"|obfuscate }}

        Include some SEO juice:
        {{ "/my-secret-path/"|obfuscate:"some SEO friendly text" }}
    """
    kwargs = {
        'key': encrypt(value,
                       settings.UNFRIENDLY_SECRET,
                       checksum=settings.UNFRIENDLY_ENFORCE_CHECKSUM),
    }
    if juice:
        kwargs['juice'] = slugify(juice)

    return reverse('unfriendly-deobfuscate', kwargs=kwargs)