From 2102ff82fa7b1e79f8a2684f6528f99f1af4c136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Sun, 6 Aug 2023 22:09:33 +0200 Subject: [PATCH] Use 'Application' for relay actor type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- changelog.d/relay-actor-type.fix | 1 + lib/pleroma/user.ex | 13 +++++++------ lib/pleroma/web/activity_pub/relay.ex | 3 ++- test/pleroma/user_test.exs | 14 ++++++++++++++ 4 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 changelog.d/relay-actor-type.fix diff --git a/changelog.d/relay-actor-type.fix b/changelog.d/relay-actor-type.fix new file mode 100644 index 000000000..dac8b118b --- /dev/null +++ b/changelog.d/relay-actor-type.fix @@ -0,0 +1 @@ +Instance relay now uses actor type Application \ No newline at end of file diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index ce125d608..aec341023 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2079,12 +2079,12 @@ defmodule Pleroma.User do Creates an internal service actor by URI if missing. Optionally takes nickname for addressing. """ - @spec get_or_create_service_actor_by_ap_id(String.t(), String.t()) :: User.t() | nil - def get_or_create_service_actor_by_ap_id(uri, nickname) do + @spec get_or_create_service_actor_by_ap_id(String.t(), String.t(), String.t()) :: User.t() | nil + def get_or_create_service_actor_by_ap_id(uri, nickname, actor_type \\ "Person") do {_, user} = case get_cached_by_ap_id(uri) do nil -> - with {:error, %{errors: errors}} <- create_service_actor(uri, nickname) do + with {:error, %{errors: errors}} <- create_service_actor(uri, nickname, actor_type) do Logger.error("Cannot create service actor: #{uri}/.\n#{inspect(errors)}") {:error, nil} end @@ -2106,15 +2106,16 @@ defmodule Pleroma.User do |> update_and_set_cache() end - @spec create_service_actor(String.t(), String.t()) :: + @spec create_service_actor(String.t(), String.t(), String.t()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} - defp create_service_actor(uri, nickname) do + defp create_service_actor(uri, nickname, actor_type) do %User{ invisible: true, local: true, ap_id: uri, nickname: nickname, - follower_address: uri <> "/followers" + follower_address: uri <> "/followers", + actor_type: actor_type } |> change |> put_private_key() diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index 2010351d1..53fc81883 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -11,12 +11,13 @@ defmodule Pleroma.Web.ActivityPub.Relay do require Logger @nickname "relay" + @actor_type "Application" @spec ap_id() :: String.t() def ap_id, do: "#{Pleroma.Web.Endpoint.url()}/#{@nickname}" @spec get_actor() :: User.t() | nil - def get_actor, do: User.get_or_create_service_actor_by_ap_id(ap_id(), @nickname) + def get_actor, do: User.get_or_create_service_actor_by_ap_id(ap_id(), @nickname, @actor_type) @spec follow(String.t()) :: {:ok, Activity.t()} | {:error, any()} def follow(target_instance) do diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 7f60b959a..48717c5fc 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -63,6 +63,20 @@ defmodule Pleroma.UserTest do end) =~ "Cannot create service actor:" end + test "returns user of given type" do + uri = "#{Pleroma.Web.Endpoint.url()}/relay" + followers_uri = "#{uri}/followers" + + assert %User{ + nickname: "relay", + invisible: true, + local: true, + ap_id: ^uri, + follower_address: ^followers_uri, + actor_type: "Application" + } = User.get_or_create_service_actor_by_ap_id(uri, "relay", "Application") + end + test "returns invisible actor" do uri = "#{Pleroma.Web.Endpoint.url()}/internal/fetch-test" followers_uri = "#{uri}/followers"