From d99757658c4bb110b273b9f7269e9a4cd2320afa Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 8 Feb 2019 17:36:10 +0100
Subject: [PATCH] Fix #705: Can now use a local file with
 FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request

---
 api/funkwhale_api/common/middleware.py | 4 ++++
 api/tests/common/test_middleware.py    | 6 ++++++
 changes/changelog.d/705.enhancement    | 1 +
 3 files changed, 11 insertions(+)
 create mode 100644 changes/changelog.d/705.enhancement

diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py
index 96e9c45a..59d50b30 100644
--- a/api/funkwhale_api/common/middleware.py
+++ b/api/funkwhale_api/common/middleware.py
@@ -56,6 +56,10 @@ def serve_spa(request):
 
 
 def get_spa_html(spa_url):
+    if spa_url.startswith("/"):
+        # we try to open a local file
+        with open(spa_url) as f:
+            return f.read()
     cache_key = "spa-html:{}".format(spa_url)
     cached = caches["local"].get(cache_key)
     if cached:
diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py
index 2ed875a5..dd7cd763 100644
--- a/api/tests/common/test_middleware.py
+++ b/api/tests/common/test_middleware.py
@@ -126,6 +126,12 @@ def test_get_spa_html_from_http(local_cache, r_mock, mocker, settings):
     )
 
 
+def test_get_spa_html_from_disk(tmpfile):
+    with open(tmpfile.name, "wb") as f:
+        f.write(b"hello world")
+    assert middleware.get_spa_html(tmpfile.name) == "hello world"
+
+
 def test_get_route_head_tags(mocker, settings):
     match = mocker.Mock(args=[], kwargs={"pk": 42}, func=mocker.Mock())
     resolve = mocker.patch("django.urls.resolve", return_value=match)
diff --git a/changes/changelog.d/705.enhancement b/changes/changelog.d/705.enhancement
new file mode 100644
index 00000000..9f25c9cb
--- /dev/null
+++ b/changes/changelog.d/705.enhancement
@@ -0,0 +1 @@
+Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705)
-- 
GitLab