From 2747ae68792ff0eb353a075e6ed376b25b187942 Mon Sep 17 00:00:00 2001
From: Agate <me@agate.blue>
Date: Fri, 28 Aug 2020 12:06:42 +0200
Subject: [PATCH] Fix #12: sanitization error

---
 funkwhale_cli/utils.py |  2 ++
 tests/test_cli.py      | 44 ++++++++++++++++++++++++++++--------------
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/funkwhale_cli/utils.py b/funkwhale_cli/utils.py
index 27f3f8e..9e075a7 100644
--- a/funkwhale_cli/utils.py
+++ b/funkwhale_cli/utils.py
@@ -81,6 +81,8 @@ def sanitize_recursive(value):
     elif isinstance(value, list):
         return [sanitize_recursive(v) for v in value]
     else:
+        if value and str(value).startswith("/"):
+            value = str(value)[1:]
         return pathvalidate.sanitize_filepath(str(value))
 
 
diff --git a/tests/test_cli.py b/tests/test_cli.py
index fb071b1..c84831c 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -211,11 +211,20 @@ def test_uploads_create_channel(cli_ctx, session, responses, get_requests, tmpdi
     command = cli.uploads.uploads_create
     upload_data = {
         "uuid": upload_id,
-        "import_metadata": {"title": "test.mp3", "album": 12, "license": "cc-by-sa-4.0"}
+        "import_metadata": {
+            "title": "test.mp3",
+            "album": 12,
+            "license": "cc-by-sa-4.0",
+        },
     }
     responses.post("https://test.funkwhale/api/v1/uploads/", payload=upload_data)
     responses.get("https://test.funkwhale/api/v1/channels/{}/".format(channel_id))
-    responses.get("https://test.funkwhale/api/v1/uploads/{}/audio-file-metadata/".format(upload_id), payload={"title": 'test title'})
+    responses.get(
+        "https://test.funkwhale/api/v1/uploads/{}/audio-file-metadata/".format(
+            upload_id
+        ),
+        payload={"title": "test title"},
+    )
     responses.patch("https://test.funkwhale/api/v1/uploads/{}/".format(upload_id))
 
     command.callback(
@@ -234,7 +243,9 @@ def test_uploads_create_channel(cli_ctx, session, responses, get_requests, tmpdi
         "import_reference": "test-import",
         "source": "upload://test.mp3",
         "import_status": "draft",
-        "import_metadata": json.dumps({"title": "test.mp3", "album": 12, "license": "cc-by-sa-4.0"}),
+        "import_metadata": json.dumps(
+            {"title": "test.mp3", "album": 12, "license": "cc-by-sa-4.0"}
+        ),
     }
     upload_requests = get_requests("post", "https://test.funkwhale/api/v1/uploads/")
     assert len(upload_requests) == 1
@@ -246,12 +257,18 @@ def test_uploads_create_channel(cli_ctx, session, responses, get_requests, tmpdi
         "get", "https://test.funkwhale/api/v1/channels/{}/".format(channel_id)
     )
     assert len(channels_requests) == 1
-    publish_requests = get_requests("patch", "https://test.funkwhale/api/v1/uploads/{}/".format(upload_id))
+    publish_requests = get_requests(
+        "patch", "https://test.funkwhale/api/v1/uploads/{}/".format(upload_id)
+    )
     assert len(publish_requests) == 1
     data = publish_requests[0].kwargs["json"]
     expected_data = {
         "import_status": "pending",
-        "import_metadata": {"title": "test title", "album": 12, "license": "cc-by-sa-4.0"},
+        "import_metadata": {
+            "title": "test title",
+            "album": 12,
+            "license": "cc-by-sa-4.0",
+        },
     }
     assert data == expected_data
 
@@ -538,11 +555,11 @@ def test_channel_create_music(cli_ctx, session, responses, get_requests):
         username="hello",
         content_category="music",
         description="description text",
-        tags='punk,rock, ska',
+        tags="punk,rock, ska",
         language=None,
         itunes_category=None,
         raw=False,
-        _async_reraise=True
+        _async_reraise=True,
     )
 
     requests = get_requests("post", url)
@@ -568,11 +585,11 @@ def test_channel_create_podcast(cli_ctx, session, responses, get_requests):
         username="hello",
         content_category="podcast",
         description="description text",
-        tags='punk,rock, ska',
+        tags="punk,rock, ska",
         language="en",
         itunes_category="Leisure",
         raw=False,
-        _async_reraise=True
+        _async_reraise=True,
     )
 
     requests = get_requests("post", url)
@@ -584,10 +601,7 @@ def test_channel_create_podcast(cli_ctx, session, responses, get_requests):
         "content_category": "podcast",
         "description": {"text": "description text", "content_type": "text/markdown"},
         "tags": ["punk", "rock", "ska"],
-        "metadata": {
-            "itunes_category": "Leisure",
-            "language": "en",
-        }
+        "metadata": {"itunes_category": "Leisure", "language": "en",},
     }
 
 
@@ -623,7 +637,9 @@ def test_channels_rm(cli_ctx, session, responses, get_requests):
     responses.delete(url + "uuid1/")
     responses.delete(url + "uuid2/")
 
-    command.callback(id=["uuid1", "uuid2"], raw=False, no_input=True, _async_reraise=True)
+    command.callback(
+        id=["uuid1", "uuid2"], raw=False, no_input=True, _async_reraise=True
+    )
 
     assert len(get_requests("delete", url + "uuid1/")) == 1
     assert len(get_requests("delete", url + "uuid2/")) == 1
-- 
GitLab