diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mix/tasks/pleroma/database.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/gopher/server.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/user.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/internal_fetch_actor.ex | 7 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/publisher.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/relay.ex | 12 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 4 | ||||
-rw-r--r-- | lib/pleroma/web/metadata/utils.ex | 14 | ||||
-rw-r--r-- | lib/pleroma/web/static_fe/static_fe_view.ex | 1 | ||||
-rw-r--r-- | lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/views/masto_fe_view.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/web.ex | 34 | ||||
-rw-r--r-- | lib/pleroma/web/web_finger/web_finger.ex | 22 |
14 files changed, 72 insertions, 39 deletions
diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index e2b5251bc..fc971f198 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -88,8 +88,7 @@ defmodule Mix.Tasks.Pleroma.Database do ^Pleroma.Constants.as_public() ), where: o.inserted_at < ^time_deadline, - where: - fragment("split_part(?->>'actor', '/', 3) != ?", o.data, ^Pleroma.Web.Endpoint.host()) + where: fragment("split_part(?->>'actor', '/', 3) != ?", o.data, ^Pleroma.Web.base_host()) ) |> Repo.delete_all(timeout: :infinity) diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index d4e4f3e55..c5dcc06e9 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -64,7 +64,7 @@ defmodule Pleroma.Gopher.Server.ProtocolHandler do end def link(name, selector, type \\ 1) do - address = Pleroma.Web.Endpoint.host() + address = Pleroma.Web.base_host() port = Pleroma.Config.get([:gopher, :port], 1234) dstport = Pleroma.Config.get([:gopher, :dstport], port) "#{type}#{name}\t#{selector}\t#{address}\t#{dstport}\r\n" diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 3c86cdb38..89cba3e5e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -780,7 +780,7 @@ defmodule Pleroma.User do def get_by_nickname(nickname) do Repo.get_by(User, nickname: nickname) || - if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do + if Regex.match?(~r(@#{Web.base_host()})i, nickname) do Repo.get_by(User, nickname: local_nickname(nickname)) end end diff --git a/lib/pleroma/web/activity_pub/internal_fetch_actor.ex b/lib/pleroma/web/activity_pub/internal_fetch_actor.ex index 9213ddde7..7c74b9f90 100644 --- a/lib/pleroma/web/activity_pub/internal_fetch_actor.ex +++ b/lib/pleroma/web/activity_pub/internal_fetch_actor.ex @@ -13,8 +13,11 @@ defmodule Pleroma.Web.ActivityPub.InternalFetchActor do get_actor() end + @spec get_actor() :: User.t() def get_actor do - "#{Pleroma.Web.Endpoint.url()}/internal/fetch" - |> User.get_or_create_service_actor_by_ap_id("internal.fetch") + User.get_or_create_service_actor_by_ap_id( + Pleroma.Web.base_url(%{path: "/internal/fetch"}), + "internal.fetch" + ) end end 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/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index 48a1b71e0..51450344e 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -11,16 +11,16 @@ defmodule Pleroma.Web.ActivityPub.Relay do @relay_nickname "relay" + @spec get_actor() :: User.t() def get_actor do - actor = - relay_ap_id() - |> User.get_or_create_service_actor_by_ap_id(@relay_nickname) - - actor + User.get_or_create_service_actor_by_ap_id( + relay_ap_id(), + @relay_nickname + ) end def relay_ap_id do - "#{Pleroma.Web.Endpoint.url()}/relay" + Pleroma.Web.base_url(%{path: "/relay"}) end @spec follow(String.t()) :: {:ok, Activity.t()} | {:error, any()} diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 2b8bfc3bd..73acfe02e 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do alias Pleroma.Object.Containment alias Pleroma.Repo alias Pleroma.User + alias Pleroma.Web alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility @@ -1035,7 +1036,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do # Expand internal representation tags into AS2 tags. tag when is_binary(tag) -> %{ - "href" => Pleroma.Web.Endpoint.url() <> "/tags/#{tag}", + "href" => Web.base_url(%{path: "/tags/#{tag}"}), "name" => "##{tag}", "type" => "Hashtag" } diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index a9b164d9a..f80cd04ec 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -16,9 +16,9 @@ defmodule Pleroma.Web.CommonAPI.Utils do alias Pleroma.Plugs.AuthenticationPlug alias Pleroma.Repo alias Pleroma.User + alias Pleroma.Web alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.ActivityPub.Visibility - alias Pleroma.Web.Endpoint alias Pleroma.Web.MediaProxy require Logger @@ -438,7 +438,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do |> Enum.map(fn {shortcode, %Emoji{file: path}} -> %{ "type" => "Emoji", - "icon" => %{"type" => "Image", "url" => "#{Endpoint.url()}#{path}"}, + "icon" => %{"type" => "Image", "url" => Web.base_url(%{path: path})}, "name" => ":#{shortcode}:" } end) diff --git a/lib/pleroma/web/metadata/utils.ex b/lib/pleroma/web/metadata/utils.ex index 000bd9f66..ee913ee7d 100644 --- a/lib/pleroma/web/metadata/utils.ex +++ b/lib/pleroma/web/metadata/utils.ex @@ -41,13 +41,13 @@ defmodule Pleroma.Web.Metadata.Utils do MediaProxy.url(url) end - def user_name_string(user) do - "#{user.name} " <> - if user.local do - "(@#{user.nickname}@#{Pleroma.Web.Endpoint.host()})" - else - "(@#{user.nickname})" - end + @spec user_name_string(Pleroma.User.t()) :: String.t() + def user_name_string(%{name: name, nickname: nickname, local: true}) do + "#{name} (@#{nickname}@#{Pleroma.Web.web_host()})" + end + + def user_name_string(%{name: name, nickname: nickname}) do + "#{name} (@#{nickname})" end @spec fetch_media_type(list(String.t()), String.t()) :: String.t() | nil diff --git a/lib/pleroma/web/static_fe/static_fe_view.ex b/lib/pleroma/web/static_fe/static_fe_view.ex index 821ece9a9..bc4f82c26 100644 --- a/lib/pleroma/web/static_fe/static_fe_view.ex +++ b/lib/pleroma/web/static_fe/static_fe_view.ex @@ -8,7 +8,6 @@ defmodule Pleroma.Web.StaticFE.StaticFEView do alias Calendar.Strftime alias Pleroma.Emoji.Formatter alias Pleroma.User - alias Pleroma.Web.Endpoint alias Pleroma.Web.Gettext alias Pleroma.Web.MediaProxy alias Pleroma.Web.Metadata.Utils diff --git a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex index 94063c92d..71fe10f70 100644 --- a/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex +++ b/lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex @@ -8,7 +8,7 @@ <button type="submit" class="collapse">Remote follow</button> </form> <%= raw Formatter.emojify(@user.name, emoji_for_user(@user)) %> | - <%= link "@#{@user.nickname}@#{Endpoint.host()}", to: User.profile_url(@user) %> + <%= link "@#{@user.nickname}@#{Pleroma.Web.web_host()}", to: User.profile_url(@user) %> </h3> <p><%= raw @user.bio %></p> </header> diff --git a/lib/pleroma/web/views/masto_fe_view.ex b/lib/pleroma/web/views/masto_fe_view.ex index c39b7f095..9983ecd24 100644 --- a/lib/pleroma/web/views/masto_fe_view.ex +++ b/lib/pleroma/web/views/masto_fe_view.ex @@ -47,7 +47,7 @@ defmodule Pleroma.Web.MastoFEView do streaming_api_base_url: Pleroma.Web.Endpoint.websocket_url(), access_token: token, locale: "en", - domain: Pleroma.Web.Endpoint.host(), + domain: Pleroma.Web.base_host(), admin: "1", me: "#{user.id}", unfollow_modal: false, diff --git a/lib/pleroma/web/web.ex b/lib/pleroma/web/web.ex index 687346554..0675a2f04 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,35 @@ defmodule Pleroma.Web do apply(__MODULE__, which, []) end - def base_url do - Pleroma.Web.Endpoint.url() + def base_url, do: Endpoint.url() + + def base_url(map) do + Endpoint.url() + |> URI.parse() + |> Map.merge(map) + |> URI.to_string() + end + + def base_host, do: Endpoint.host() + + 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 |