From d369142a8e11b02066b734ef8900b27d7cd52bad Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 8 Jun 2021 14:04:46 -0500 Subject: Introduce Pleroma.Config.url/0 to bypass compile-time deps on Endpoint --- lib/pleroma/config.ex | 21 +++++++++++++++++++++ .../activity_pub/object_validators/context_id.ex | 4 ++-- test/pleroma/config_test.exs | 22 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index 54e332595..2709f39bf 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -103,4 +103,25 @@ def oauth_consumer_enabled?, do: oauth_consumer_strategies() != [] def feature_enabled?(feature_name) do get([:features, feature_name]) not in [nil, false, :disabled, :auto] end + + @doc """ + Get the URI directly from application config, bypassing the Endpoint module. + """ + def uri do + # `Pleroma.Web.Endpoint` is only being used as a key here (for equality check), + # so it's okay to use `Module.concat/1` to have the compiler ignore it. + endpoint_key = Module.concat(["Pleroma.Web.Endpoint"]) + + url = + get([endpoint_key, :url]) + |> Map.new() + + struct(URI, url) + end + + @doc """ + Similar to `Pleroma.Web.Endpoint.url/0`. + May be used where needed to avoid a compile-time dep on Endpoint. + """ + def url, do: URI.to_string(uri()) end diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex index 15f47d45f..880749266 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/context_id.ex @@ -6,7 +6,7 @@ defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.ContextID do use Ecto.Type alias Ecto.UUID - alias Pleroma.Web.Endpoint + alias Pleroma.Config def type, do: :string @@ -19,6 +19,6 @@ def dump(data), do: {:ok, data} def load(data), do: {:ok, data} def autogenerate do - "#{Endpoint.url()}/contexts/#{UUID.generate()}" + "#{Config.url()}/contexts/#{UUID.generate()}" end end diff --git a/test/pleroma/config_test.exs b/test/pleroma/config_test.exs index 3158a2ec8..2a1bad84d 100644 --- a/test/pleroma/config_test.exs +++ b/test/pleroma/config_test.exs @@ -136,4 +136,26 @@ test "fetch/1" do Pleroma.Config.delete([:lorem]) Pleroma.Config.delete([:ipsum]) end + + describe "URI functions" do + setup do + url = [host: "lain.com", scheme: "https", port: 443] + clear_config([Pleroma.Web.Endpoint, :url], url) + end + + test "uri/0" do + expected = %URI{ + scheme: "https", + host: "lain.com", + port: 443 + } + + assert Pleroma.Config.uri() == expected + end + + test "url/0" do + expected = "https://lain.com" + assert Pleroma.Config.url() == expected + end + end end -- cgit v1.2.3