Skip to content

Commit 186eec8

Browse files
committed
fix(file): prevent validation exception for presigned url expiry
1 parent fea6b20 commit 186eec8

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

alexandria/core/tests/test_views.py

+10
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,16 @@ def test_download_file(admin_client, file, presigned, expected_status):
484484
assert result.status_code == expected_status
485485

486486

487+
def test_download_file_expired(admin_client, file, freezer):
488+
freezer.move_to("2025-03-20")
489+
response = admin_client.get(reverse("file-detail", args=(file.pk,)))
490+
url = response.json()["data"]["attributes"]["download-url"]
491+
freezer.move_to("2025-03-21")
492+
493+
result = admin_client.get(url)
494+
assert result.status_code == HTTP_403_FORBIDDEN
495+
496+
487497
@pytest.mark.parametrize(
488498
"mime_type,expected_content_disposition",
489499
[("application/pdf", "inline"), ("text/html", "attachment")],

alexandria/core/views.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -271,10 +271,15 @@ def multi(self, request, **kwargs):
271271
@permission_classes([AllowAny])
272272
@action(methods=["get"], detail=True)
273273
def download(self, request, pk=None):
274-
if not verify_presigned_request(reverse("file-download", args=[pk]), request):
275-
raise PermissionDenied(
276-
_("For downloading a file use the presigned download URL.")
277-
)
274+
try:
275+
if not verify_presigned_request(
276+
reverse("file-download", args=[pk]), request
277+
):
278+
raise PermissionDenied(
279+
_("For downloading a file use the presigned download URL.")
280+
)
281+
except DjangoCoreValidationError as exp:
282+
raise PermissionDenied(*exp.messages)
278283

279284
obj = models.File.objects.get(pk=pk)
280285

0 commit comments

Comments
 (0)