From d44abf6e499d96b227860cff0c150b3dbd1819fb Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Tue, 1 Oct 2019 17:55:33 +0200
Subject: [PATCH] See #925: ensure we always have a proper content-type in
 audio response

---
 api/funkwhale_api/music/views.py | 6 ++++--
 api/tests/music/test_views.py    | 5 ++++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py
index 4783a8d4..6822c058 100644
--- a/api/funkwhale_api/music/views.py
+++ b/api/funkwhale_api/music/views.py
@@ -418,10 +418,12 @@ def handle_serve(upload, user, format=None, max_bitrate=None, proxy_media=True):
         response = Response(status=302)
         response["Location"] = f.audio_file.url
         return response
+
     if mt:
-        response = Response(content_type=mt)
+        # we need a non-empty response otherwise rest_framework removes our content-type
+        response = Response(b"noop", content_type=mt)
     else:
-        response = Response()
+        response = Response(b"noop")
     filename = f.filename
     mapping = {"nginx": "X-Accel-Redirect", "apache2": "X-Sendfile"}
     file_header = mapping[settings.REVERSE_PROXY_TYPE]
diff --git a/api/tests/music/test_views.py b/api/tests/music/test_views.py
index 4a423ddb..5bcbdb73 100644
--- a/api/tests/music/test_views.py
+++ b/api/tests/music/test_views.py
@@ -451,13 +451,16 @@ def test_handle_serve_create_mp3_version(factories, now):
 
 def test_listen_transcode(factories, now, logged_in_api_client, mocker, settings):
     upload = factories["music.Upload"](
-        import_status="finished", library__actor__user=logged_in_api_client.user
+        import_status="finished",
+        library__actor__user=logged_in_api_client.user,
+        mimetype="audio/mpeg",
     )
     url = reverse("api:v1:listen-detail", kwargs={"uuid": upload.track.uuid})
     handle_serve = mocker.spy(views, "handle_serve")
     response = logged_in_api_client.get(url, {"to": "mp3"})
 
     assert response.status_code == 200
+    assert response["Content-Type"] == "audio/mpeg"
 
     handle_serve.assert_called_once_with(
         upload,
-- 
GitLab