diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 14900ca98..b104bf389 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -241,7 +241,7 @@ def get_file_path(audio_file): 'You need to specify MUSIC_DIRECTORY_SERVE_PATH and ' 'MUSIC_DIRECTORY_PATH to serve in-place imported files' ) - path = audio_file.replace(prefix, serve_path, 1) + path = audio_file.replace(prefix, serve_path, 1).encode('utf-8') return path diff --git a/api/tests/music/test_views.py b/api/tests/music/test_views.py index b22ab7fd5..e641b45d5 100644 --- a/api/tests/music/test_views.py +++ b/api/tests/music/test_views.py @@ -104,6 +104,24 @@ def test_serve_file_in_place( assert response[headers[proxy]] == expected +@pytest.mark.parametrize('proxy,serve_path,expected', [ + ('apache2', '/host/music', '/host/music/hello/worldéà.mp3'), + ('apache2', '/app/music', '/app/music/hello/worldéà.mp3'), + ('nginx', '/host/music', '/_protected/music/hello/worldéà.mp3'), + ('nginx', '/app/music', '/_protected/music/hello/worldéà.mp3'), +]) +def test_serve_file_in_place_utf8( + proxy, serve_path, expected, factories, api_client, settings): + settings.PROTECT_AUDIO_FILES = False + settings.PROTECT_FILE_PATH = '/_protected/music' + settings.REVERSE_PROXY_TYPE = proxy + settings.MUSIC_DIRECTORY_PATH = '/app/music' + settings.MUSIC_DIRECTORY_SERVE_PATH = serve_path + path = views.get_file_path('/app/music/hello/worldéà.mp3') + + assert path == expected.encode('utf-8') + + @pytest.mark.parametrize('proxy,serve_path,expected', [ ('apache2', '/host/music', '/host/media/tracks/hello/world.mp3'), # apache with container not supported yet diff --git a/changes/changelog.d/196.bug b/changes/changelog.d/196.bug deleted file mode 100644 index 6f59a28d1..000000000 --- a/changes/changelog.d/196.bug +++ /dev/null @@ -1 +0,0 @@ -Tracks with special UTF-8 characters don't break anymore, fixing Bug #196 diff --git a/changes/changelog.d/196.bugfix b/changes/changelog.d/196.bugfix new file mode 100644 index 000000000..655df7d79 --- /dev/null +++ b/changes/changelog.d/196.bugfix @@ -0,0 +1 @@ +In-place imported tracks non-ascii characters don't break reverse-proxy serving (#196)