uploads: Allow access to the /download/ variant anonymously.

This was mistakenly left off of b799ec32b0.
This commit is contained in:
Alex Vandiver 2023-06-07 20:26:04 +00:00 committed by Tim Abbott
parent 0dbe111ab3
commit fbb831ff3b
3 changed files with 15 additions and 3 deletions

View File

@ -263,6 +263,15 @@ class FileUploadTest(UploadSerializeMixin, ZulipTestCase):
response = self.client_get(url) response = self.client_get(url)
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
# Check that the /download/ variant works as well
download_url = url.replace("/user_uploads/", "/user_uploads/download/")
with ratelimit_rule(86400, 1000, domain="spectator_attachment_access_by_file"):
response = self.client_get(download_url)
self.assertEqual(response.status_code, 200)
with ratelimit_rule(86400, 0, domain="spectator_attachment_access_by_file"):
response = self.client_get(download_url)
self.assertEqual(response.status_code, 403)
# Deny random file access # Deny random file access
response = self.client_get( response = self.client_get(
"/user_uploads/2/71/QYB7LA-ULMYEad-QfLMxmI2e/zulip-non-existent.txt" "/user_uploads/2/71/QYB7LA-ULMYEad-QfLMxmI2e/zulip-non-existent.txt"

View File

@ -137,10 +137,13 @@ def serve_local(
def serve_file_download_backend( def serve_file_download_backend(
request: HttpRequest, user_profile: UserProfile, realm_id_str: str, filename: str request: HttpRequest,
maybe_user_profile: Union[UserProfile, AnonymousUser],
realm_id_str: str,
filename: str,
) -> HttpResponseBase: ) -> HttpResponseBase:
return serve_file( return serve_file(
request, user_profile, realm_id_str, filename, url_only=False, force_download=True request, maybe_user_profile, realm_id_str, filename, url_only=False, force_download=True
) )

View File

@ -646,7 +646,7 @@ urls += [
), ),
rest_path( rest_path(
"user_uploads/download/<realm_id_str>/<path:filename>", "user_uploads/download/<realm_id_str>/<path:filename>",
GET=(serve_file_download_backend, {"override_api_url_scheme"}), GET=(serve_file_download_backend, {"override_api_url_scheme", "allow_anonymous_user_web"}),
), ),
rest_path( rest_path(
"user_uploads/<realm_id_str>/<path:filename>", "user_uploads/<realm_id_str>/<path:filename>",