List available frontends also when no static/frontends folder is present yet
authorIlja <pleroma@spectraltheorem.be>
Sat, 14 Aug 2021 18:42:12 +0000 (18:42 +0000)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Sat, 28 Aug 2021 16:23:49 +0000 (18:23 +0200)
* To see what front ends are installed, it ls static/frontends. When this folder doesn't exists yet, it will return an empty array.
* Installing still works since the folder is created during installation already

Backport of: https://git.pleroma.social/pleroma/pleroma/-/merge_requests/3510

CHANGELOG.md
lib/pleroma/web/admin_api/controllers/frontend_controller.ex
test/pleroma/web/admin_api/controllers/frontend_controller_test.exs

index 02d9d59cbe4e9d3ca5f85cf60c913a6a410bac63..90e0ca82abfe3b3813595fd6de8c0e12e731a7a0 100644 (file)
@@ -27,6 +27,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - AdminAPI: Fix rendering reports containing a `nil` object
 - Mastodon API: Activity Search fallbacks on status fetching after a DB Timeout/Error
 - Mastodon API: Fix crash in Streamer related to reblogging
+- AdminAPI: List available frontends when `static/frontends` folder is missing
 
 ## 2.4.0 - 2021-08-08
 
index 722f51bd2e119183527ba053775db91ffd13b4fd..442e6a5a00b9fabdf2c1bf88ad43648b012444fa 100644 (file)
@@ -35,6 +35,12 @@ defmodule Pleroma.Web.AdminAPI.FrontendController do
   end
 
   defp installed do
-    File.ls!(Pleroma.Frontend.dir())
+    frontend_directory = Pleroma.Frontend.dir()
+
+    if File.exists?(frontend_directory) do
+      File.ls!(frontend_directory)
+    else
+      []
+    end
   end
 end
index bc827cc12ee48cb2f10905ca66864b29346ac7b9..200682ba92d6dde618c305b04a0aa87de3219a3a 100644 (file)
@@ -42,6 +42,20 @@ defmodule Pleroma.Web.AdminAPI.FrontendControllerTest do
 
       refute Enum.any?(response, fn frontend -> frontend["installed"] == true end)
     end
+
+    test "it lists available frontends when no frontend folder was created yet", %{conn: conn} do
+      File.rm_rf(@dir)
+
+      response =
+        conn
+        |> get("/api/pleroma/admin/frontends")
+        |> json_response_and_validate_schema(:ok)
+
+      assert Enum.map(response, & &1["name"]) ==
+               Enum.map(Config.get([:frontends, :available]), fn {_, map} -> map["name"] end)
+
+      refute Enum.any?(response, fn frontend -> frontend["installed"] == true end)
+    end
   end
 
   describe "POST /api/pleroma/admin/frontends/install" do