Skip to content

Commit 0745853

Browse files
lunikaAntoLC
authored andcommitted
♻️(back) return the media-check url on the attachment_upload response
We want to have the media-check url returned on the attachment-upload response instead of the media url directly. The front will know the endpoint to use to check the media status.
1 parent f1b398e commit 0745853

File tree

2 files changed

+44
-12
lines changed

2 files changed

+44
-12
lines changed

src/backend/core/api/viewsets.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import json
55
import logging
66
import uuid
7-
from urllib.parse import unquote, urlparse
7+
from urllib.parse import unquote, urlencode, urlparse
88

99
from django.conf import settings
1010
from django.contrib.postgres.aggregates import ArrayAgg
@@ -18,6 +18,7 @@
1818
from django.db.models.expressions import RawSQL
1919
from django.db.models.functions import Left, Length
2020
from django.http import Http404, StreamingHttpResponse
21+
from django.urls import reverse
2122
from django.utils.text import capfirst, slugify
2223
from django.utils.translation import gettext_lazy as _
2324

@@ -1193,8 +1194,16 @@ def attachment_upload(self, request, *args, **kwargs):
11931194

11941195
malware_detection.analyse_file(key, document_id=document.id)
11951196

1197+
url = reverse(
1198+
"documents-media-check",
1199+
kwargs={"pk": document.id},
1200+
)
1201+
parameters = urlencode({"key": key})
1202+
11961203
return drf.response.Response(
1197-
{"file": f"{settings.MEDIA_URL:s}{key:s}"},
1204+
{
1205+
"file": f"{url:s}?{parameters:s}",
1206+
},
11981207
status=drf.status.HTTP_201_CREATED,
11991208
)
12001209

src/backend/core/tests/documents/test_api_documents_attachment_upload.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import re
66
import uuid
77
from unittest import mock
8+
from urllib.parse import parse_qs, urlparse
89

910
from django.core.files.storage import default_storage
1011
from django.core.files.uploadedfile import SimpleUploadedFile
@@ -66,8 +67,12 @@ def test_api_documents_attachment_upload_anonymous_success():
6667

6768
assert response.status_code == 201
6869

69-
pattern = re.compile(rf"^/media/{document.id!s}/attachments/(.*)\.png")
70-
file_path = response.json()["file"]
70+
pattern = re.compile(rf"^{document.id!s}/attachments/(.*)\.png")
71+
url_parsed = urlparse(response.json()["file"])
72+
assert url_parsed.path == f"/api/v1.0/documents/{document.id!s}/media-check/"
73+
query = parse_qs(url_parsed.query)
74+
assert query["key"][0] is not None
75+
file_path = query["key"][0]
7176
match = pattern.search(file_path)
7277
file_id = match.group(1)
7378
# Validate that file_id is a valid UUID
@@ -148,8 +153,13 @@ def test_api_documents_attachment_upload_authenticated_success(reach, role):
148153

149154
assert response.status_code == 201
150155

151-
pattern = re.compile(rf"^/media/{document.id!s}/attachments/(.*)\.png")
152-
match = pattern.search(response.json()["file"])
156+
pattern = re.compile(rf"^{document.id!s}/attachments/(.*)\.png")
157+
url_parsed = urlparse(response.json()["file"])
158+
assert url_parsed.path == f"/api/v1.0/documents/{document.id!s}/media-check/"
159+
query = parse_qs(url_parsed.query)
160+
assert query["key"][0] is not None
161+
file_path = query["key"][0]
162+
match = pattern.search(file_path)
153163
file_id = match.group(1)
154164

155165
mock_analyse_file.assert_called_once_with(
@@ -224,8 +234,12 @@ def test_api_documents_attachment_upload_success(via, role, mock_user_teams):
224234

225235
assert response.status_code == 201
226236

227-
file_path = response.json()["file"]
228-
pattern = re.compile(rf"^/media/{document.id!s}/attachments/(.*)\.png")
237+
pattern = re.compile(rf"^{document.id!s}/attachments/(.*)\.png")
238+
url_parsed = urlparse(response.json()["file"])
239+
assert url_parsed.path == f"/api/v1.0/documents/{document.id!s}/media-check/"
240+
query = parse_qs(url_parsed.query)
241+
assert query["key"][0] is not None
242+
file_path = query["key"][0]
229243
match = pattern.search(file_path)
230244
file_id = match.group(1)
231245

@@ -320,8 +334,13 @@ def test_api_documents_attachment_upload_fix_extension(
320334

321335
assert response.status_code == 201
322336

323-
file_path = response.json()["file"]
324-
pattern = re.compile(rf"^/media/{document.id!s}/attachments/(.*)\.{extension:s}")
337+
pattern = re.compile(rf"^{document.id!s}/attachments/(.*)\.{extension:s}")
338+
url_parsed = urlparse(response.json()["file"])
339+
assert url_parsed.path == f"/api/v1.0/documents/{document.id!s}/media-check/"
340+
query = parse_qs(url_parsed.query)
341+
assert query["key"][0] is not None
342+
file_path = query["key"][0]
343+
325344
match = pattern.search(file_path)
326345
file_id = match.group(1)
327346

@@ -386,8 +405,12 @@ def test_api_documents_attachment_upload_unsafe():
386405

387406
assert response.status_code == 201
388407

389-
file_path = response.json()["file"]
390-
pattern = re.compile(rf"^/media/{document.id!s}/attachments/(.*)\.exe")
408+
pattern = re.compile(rf"^{document.id!s}/attachments/(.*)\.exe")
409+
url_parsed = urlparse(response.json()["file"])
410+
assert url_parsed.path == f"/api/v1.0/documents/{document.id!s}/media-check/"
411+
query = parse_qs(url_parsed.query)
412+
assert query["key"][0] is not None
413+
file_path = query["key"][0]
391414
match = pattern.search(file_path)
392415
file_id = match.group(1)
393416

0 commit comments

Comments
 (0)