diff options
| -rw-r--r-- | lib/pleroma/web/manifest_controller.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/views/manifest_view.ex | 28 | ||||
| -rw-r--r-- | test/pleroma/web/manifest_controller_test.exs | 17 | ||||
| -rw-r--r-- | test/pleroma/web/plugs/frontend_static_plug_test.exs | 1 | 
5 files changed, 66 insertions, 0 deletions
| diff --git a/lib/pleroma/web/manifest_controller.ex b/lib/pleroma/web/manifest_controller.ex new file mode 100644 index 000000000..52589540b --- /dev/null +++ b/lib/pleroma/web/manifest_controller.ex @@ -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 diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 3f708a985..fa1d1b93f 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -744,6 +744,12 @@ defmodule Pleroma.Web.Router do    end    scope "/", Pleroma.Web do +    pipe_through(:api) + +    get("/manifest.json", ManifestController, :show) +  end + +  scope "/", Pleroma.Web do      pipe_through(:pleroma_html)      post("/auth/password", TwitterAPI.PasswordController, :request) diff --git a/lib/pleroma/web/views/manifest_view.ex b/lib/pleroma/web/views/manifest_view.ex new file mode 100644 index 000000000..cc78ea347 --- /dev/null +++ b/lib/pleroma/web/views/manifest_view.ex @@ -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 index 000000000..b7a4940db --- /dev/null +++ b/test/pleroma/web/manifest_controller_test.exs @@ -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 diff --git a/test/pleroma/web/plugs/frontend_static_plug_test.exs b/test/pleroma/web/plugs/frontend_static_plug_test.exs index 45cd70a2c..52379b86a 100644 --- a/test/pleroma/web/plugs/frontend_static_plug_test.exs +++ b/test/pleroma/web/plugs/frontend_static_plug_test.exs @@ -94,6 +94,7 @@ defmodule Pleroma.Web.Plugs.FrontendStaticPlugTest do        "internal",        ".well-known",        "nodeinfo", +      "manifest.json",        "auth",        "proxy",        "phoenix", | 
