Merge remote-tracking branch 'origin/develop' into manifest
authorAlex Gleason <alex@alexgleason.me>
Sun, 19 Dec 2021 17:33:10 +0000 (11:33 -0600)
committerAlex Gleason <alex@alexgleason.me>
Sun, 19 Dec 2021 17:33:10 +0000 (11:33 -0600)
lib/pleroma/web/manifest_controller.ex [new file with mode: 0644]
lib/pleroma/web/router.ex
lib/pleroma/web/views/manifest_view.ex [new file with mode: 0644]
test/pleroma/web/manifest_controller_test.exs [new file with mode: 0644]
test/pleroma/web/plugs/frontend_static_plug_test.exs

diff --git a/lib/pleroma/web/manifest_controller.ex b/lib/pleroma/web/manifest_controller.ex
new file mode 100644 (file)
index 0000000..5258954
--- /dev/null
@@ -0,0 +1,14 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ManifestController do
+  use Pleroma.Web, :controller
+
+  plug(:skip_auth when action == :show)
+
+  @doc "GET /manifest.json"
+  def show(conn, _params) do
+    render(conn, "manifest.json")
+  end
+end
index 197e1f3462d13b75b4f0b87cfe95fe15dcf5a2b4..c1713c6cf1d93ef53910f17b3b10ec185ce81c0e 100644 (file)
@@ -742,6 +742,12 @@ defmodule Pleroma.Web.Router do
     get("/:version", Nodeinfo.NodeinfoController, :nodeinfo)
   end
 
+  scope "/", Pleroma.Web do
+    pipe_through(:api)
+
+    get("/manifest.json", ManifestController, :show)
+  end
+
   scope "/", Pleroma.Web do
     pipe_through(:pleroma_html)
 
diff --git a/lib/pleroma/web/views/manifest_view.ex b/lib/pleroma/web/views/manifest_view.ex
new file mode 100644 (file)
index 0000000..cc78ea3
--- /dev/null
@@ -0,0 +1,28 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ManifestView do
+  use Pleroma.Web, :view
+  alias Pleroma.Config
+  alias Pleroma.Web.Endpoint
+
+  def render("manifest.json", _params) do
+    %{
+      name: Config.get([:instance, :name]),
+      description: Config.get([:instance, :description]),
+      icons: Config.get([:manifest, :icons]),
+      theme_color: Config.get([:manifest, :theme_color]),
+      background_color: Config.get([:manifest, :background_color]),
+      display: "standalone",
+      scope: Endpoint.url(),
+      start_url: "/",
+      categories: [
+        "social"
+      ],
+      serviceworker: %{
+        src: "/sw.js"
+      }
+    }
+  end
+end
diff --git a/test/pleroma/web/manifest_controller_test.exs b/test/pleroma/web/manifest_controller_test.exs
new file mode 100644 (file)
index 0000000..b7a4940
--- /dev/null
@@ -0,0 +1,17 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ManifestControllerTest do
+  use Pleroma.Web.ConnCase
+
+  setup do
+    clear_config([:instance, :name], "Manifest Test")
+    clear_config([:manifest, :theme_color], "#ff0000")
+  end
+
+  test "manifest.json", %{conn: conn} do
+    conn = get(conn, "/manifest.json")
+    assert %{"name" => "Manifest Test", "theme_color" => "#ff0000"} = json_response(conn, 200)
+  end
+end
index 82e955c25ddae611c4ba1e87bb5e1d6d81a88da6..031f7a69d788469ef1205f65dc8c431514fec5ab 100644 (file)
@@ -94,6 +94,7 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do
       "internal",
       ".well-known",
       "nodeinfo",
+      "manifest.json",
       "auth",
       "proxy",
       "test",