From cf555b8aec33a3b39c3437a919c8b3fc8751fc98 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Thu, 9 Jan 2020 10:08:52 +0100
Subject: [PATCH] Fixed broken HTML manifest regex

---
 api/funkwhale_api/common/middleware.py | 2 +-
 api/tests/common/test_middleware.py    | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py
index 69d34e2b..9e2a59dc 100644
--- a/api/funkwhale_api/common/middleware.py
+++ b/api/funkwhale_api/common/middleware.py
@@ -77,7 +77,7 @@ def serve_spa(request):
     return http.HttpResponse(head + tail)
 
 
-MANIFEST_LINK_REGEX = re.compile(r"<link .*rel=(?:'|\")?manifest(?:'|\")?.*>")
+MANIFEST_LINK_REGEX = re.compile(r"<link [^>]*rel=(?:'|\")?manifest(?:'|\")?[^>]*>")
 
 
 def replace_manifest_url(head, new_url):
diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py
index c67982f8..d3908e3f 100644
--- a/api/tests/common/test_middleware.py
+++ b/api/tests/common/test_middleware.py
@@ -274,7 +274,9 @@ def test_throttle_status_middleware_returns_proper_response(mocker):
 def test_rewrite_manifest_json_url(link, new_url, expected, mocker, settings):
     settings.FUNKWHALE_SPA_REWRITE_MANIFEST = True
     settings.FUNKWHALE_SPA_REWRITE_MANIFEST_URL = new_url
-    spa_html = "<html><head>{}</head></html>".format(link)
+    spa_html = "<html><head><link rel=before>{}<link rel=after></head></html>".format(
+        link
+    )
     request = mocker.Mock(path="/")
     mocker.patch.object(middleware, "get_spa_html", return_value=spa_html)
     mocker.patch.object(
@@ -283,7 +285,9 @@ def test_rewrite_manifest_json_url(link, new_url, expected, mocker, settings):
     response = middleware.serve_spa(request)
 
     assert response.status_code == 200
-    expected_html = "<html><head>{}\n\n</head></html>".format(expected)
+    expected_html = "<html><head><link rel=before>{}<link rel=after>\n\n</head></html>".format(
+        expected
+    )
     assert response.content == expected_html.encode()
 
 
-- 
GitLab