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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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 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)