diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/publisher.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/web.ex | 25 | ||||
-rw-r--r-- | lib/pleroma/web/web_finger/web_finger.ex | 22 |
3 files changed, 36 insertions, 14 deletions
diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index e4e3ab44a..eb6b8899d 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.Publisher do alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User + alias Pleroma.Web alias Pleroma.Web.ActivityPub.Relay alias Pleroma.Web.ActivityPub.Transmogrifier @@ -267,7 +268,7 @@ defmodule Pleroma.Web.ActivityPub.Publisher do }, %{ "rel" => "http://ostatus.org/schema/1.0/subscribe", - "template" => "#{Pleroma.Web.base_url()}/ostatus_subscribe?acct={uri}" + "template" => Web.web_url(%{path: "/ostatus_subscribe", query: "acct={uri}"}) } ] end diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index 687346554..5fc24b285 100644 --- a/lib/pleroma/web/web.ex +++ b/lib/pleroma/web/web.ex @@ -20,6 +20,8 @@ defmodule Pleroma.Web do below. """ + alias Pleroma.Web.Endpoint + def controller do quote do use Phoenix.Controller, namespace: Pleroma.Web @@ -103,7 +105,26 @@ defmodule Pleroma.Web do apply(__MODULE__, which, []) end - def base_url do - Pleroma.Web.Endpoint.url() + def base_url, do: Endpoint.url() + + def web_url(map \\ %{}) do + Pleroma.Web.web_endpoint() + |> URI.parse() + |> Map.merge(map) + |> URI.to_string() + end + + def web_endpoint do + Pleroma.Config.get([Endpoint, :web_endpoint], Endpoint.url()) + end + + def web_host do + Pleroma.Web.web_endpoint() + |> URI.parse() + |> Map.get(:host) + end + + def domains do + Enum.uniq([Pleroma.Web.web_host(), Pleroma.Web.Endpoint.host()]) end end diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex index b4cc80179..0b644c57f 100644 --- a/lib/pleroma/web/web_finger/web_finger.ex +++ b/lib/pleroma/web/web_finger/web_finger.ex @@ -13,8 +13,6 @@ defmodule Pleroma.Web.WebFinger do require Logger def host_meta do - base_url = Web.base_url() - { :XRD, %{xmlns: "http://docs.oasis-open.org/ns/xri/xrd-1.0"}, @@ -23,7 +21,7 @@ defmodule Pleroma.Web.WebFinger do %{ rel: "lrdd", type: "application/xrd+xml", - template: "#{base_url}/.well-known/webfinger?resource={uri}" + template: Web.web_url(%{path: "/.well-known/webfinger", query: "resource={uri}"}) } } } @@ -31,8 +29,8 @@ defmodule Pleroma.Web.WebFinger do end def webfinger(resource, fmt) when fmt in ["XML", "JSON"] do - host = Pleroma.Web.Endpoint.host() - regex = ~r/(acct:)?(?<username>[a-z0-9A-Z_\.-]+)@#{host}/ + hosts = Enum.join(Pleroma.Web.domains(), "|") + regex = ~r/(acct:)?(?<username>[a-z0-9A-Z_\.-]+)@(#{hosts})/ with %{"username" => username} <- Regex.named_captures(regex, resource), %User{} = user <- User.get_cached_by_nickname(username) do @@ -62,7 +60,7 @@ defmodule Pleroma.Web.WebFinger do {:ok, user} = User.ensure_keys_present(user) %{ - "subject" => "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}", + "subject" => acct_uri(user), "aliases" => [user.ap_id], "links" => gather_links(user) } @@ -72,20 +70,22 @@ defmodule Pleroma.Web.WebFinger do {:ok, user} = User.ensure_keys_present(user) links = - gather_links(user) + user + |> gather_links() |> Enum.map(fn link -> {:Link, link} end) { :XRD, %{xmlns: "http://docs.oasis-open.org/ns/xri/xrd-1.0"}, - [ - {:Subject, "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}"}, - {:Alias, user.ap_id} - ] ++ links + [{:Subject, acct_uri(user)}, {:Alias, user.ap_id}] ++ links } |> XmlBuilder.to_doc() end + defp acct_uri(%User{nickname: nickname}) do + "acct:#{nickname}@#{Pleroma.Web.web_host()}" + end + defp get_magic_key("data:application/magic-public-key," <> magic_key) do {:ok, magic_key} end |