mirror of
https://github.com/jazzband/django-downloadview.git
synced 2026-03-16 22:40:25 +00:00
61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
"""
|
|
Test signature generation and validation.
|
|
"""
|
|
|
|
import unittest
|
|
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.core.signing import TimestampSigner
|
|
|
|
from django_downloadview.decorators import _signature_is_valid
|
|
from django_downloadview.storage import SignedURLMixin
|
|
|
|
|
|
class TestStorage:
|
|
def url(self, name):
|
|
return "https://example.com/{name}".format(name=name)
|
|
|
|
|
|
class SignedTestStorage(SignedURLMixin, TestStorage):
|
|
pass
|
|
|
|
|
|
class SignatureGeneratorTestCase(unittest.TestCase):
|
|
def test_signed_storage(self):
|
|
"""
|
|
django_downloadview.storage.SignedURLMixin adds X-Signature to URLs.
|
|
"""
|
|
|
|
storage = SignedTestStorage()
|
|
url = storage.url("test")
|
|
self.assertIn("https://example.com/test?X-Signature=", url)
|
|
|
|
|
|
class SignatureValidatorTestCase(unittest.TestCase):
|
|
def test_verify_signature(self):
|
|
"""
|
|
django_downloadview.decorators._signature_is_valid returns True on
|
|
valid signatures.
|
|
"""
|
|
|
|
signer = TimestampSigner()
|
|
request = unittest.mock.MagicMock()
|
|
|
|
request.path = "test"
|
|
request.GET = {"X-Signature": signer.sign("test")}
|
|
|
|
self.assertIsNone(_signature_is_valid(request))
|
|
|
|
def test_verify_signature_invalid(self):
|
|
"""
|
|
django_downloadview.decorators._signature_is_valid raises PermissionDenied
|
|
on invalid signatures.
|
|
"""
|
|
|
|
request = unittest.mock.MagicMock()
|
|
|
|
request.path = "test"
|
|
request.GET = {"X-Signature": "not-valid"}
|
|
|
|
with self.assertRaises(PermissionDenied):
|
|
_signature_is_valid(request)
|