From 0c8f4400b0cafba60c210353790565583482e2ce Mon Sep 17 00:00:00 2001
From: Blopware <blopware@blopware.com>
Date: Thu, 29 Apr 2021 19:22:33 +0200
Subject: [PATCH] Sanitize remote tracks' saving locations with slashes on
 their names

For that case, the resulting saved file made use of these slashes to
store the tracks in subdirectories of federation_cache/xx/xx/xx, instead of
in the federation_cache/xx/xx/xx directory itself. As a consequence, the
tracks are downloaded in the wrong location, and upon any trial of
playing the tracks, funkwhale responds with the message
"The track cannot be loaded. You can have connectivity issues"

An example of a podcast with this kind of RSS items is located in
https://www.rtve.es/api/programas/2082/audios.rss

This commit overcomes this by a simple replacement of the offending
slashes to hyphens.
---
 api/funkwhale_api/common/utils.py | 4 ++++
 changes/changelog.d/1435.bug      | 1 +
 2 files changed, 5 insertions(+)
 create mode 100644 changes/changelog.d/1435.bug

diff --git a/api/funkwhale_api/common/utils.py b/api/funkwhale_api/common/utils.py
index 5d7d401d73..afb773725f 100644
--- a/api/funkwhale_api/common/utils.py
+++ b/api/funkwhale_api/common/utils.py
@@ -75,11 +75,15 @@ def set_query_parameter(url, **kwargs):
 
 @deconstructible
 class ChunkedPath(object):
+    def sanitize_filename(self, filename):
+        return filename.replace("/", "-")
+
     def __init__(self, root, preserve_file_name=True):
         self.root = root
         self.preserve_file_name = preserve_file_name
 
     def __call__(self, instance, filename):
+        self.sanitize_filename(filename)
         uid = str(uuid.uuid4())
         chunk_size = 2
         chunks = [uid[i : i + chunk_size] for i in range(0, len(uid), chunk_size)]
diff --git a/changes/changelog.d/1435.bug b/changes/changelog.d/1435.bug
new file mode 100644
index 0000000000..7329f8b4a2
--- /dev/null
+++ b/changes/changelog.d/1435.bug
@@ -0,0 +1 @@
+Sanitize remote tracks' saving locations with slashes on their names (#1435)
\ No newline at end of file
-- 
GitLab