Merge branch 'manifest' into 'develop'
authorAlex Gleason <alex@alexgleason.me>
Sun, 19 Dec 2021 18:18:59 +0000 (18:18 +0000)
committerAlex Gleason <alex@alexgleason.me>
Sun, 19 Dec 2021 18:18:59 +0000 (18:18 +0000)
Expose /manifest.json for PWA

Closes #882

See merge request pleroma/pleroma!3544

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 3f708a9855c338611395441837be3034cba14b1c..fa1d1b93f104c79bc256a363f1223dfabf17e641 100644 (file)
@@ -743,6 +743,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 45cd70a2c32cf80f8b6932cd18e08e1f773139b2..52379b86a6d3355cb0076afb47228afc198bde74 100644 (file)
@@ -94,6 +94,7 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do
       "internal",
       ".well-known",
       "nodeinfo",
+      "manifest.json",
       "auth",
       "proxy",
       "phoenix",