Use 'Application' for relay actor type

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2023-08-06 22:09:33 +02:00
parent 4e355b8595
commit 2102ff82fa
4 changed files with 24 additions and 7 deletions

View file

@ -0,0 +1 @@
Instance relay now uses actor type Application

View file

@ -2079,12 +2079,12 @@ defmodule Pleroma.User do
Creates an internal service actor by URI if missing. Creates an internal service actor by URI if missing.
Optionally takes nickname for addressing. Optionally takes nickname for addressing.
""" """
@spec get_or_create_service_actor_by_ap_id(String.t(), String.t()) :: User.t() | nil @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) do def get_or_create_service_actor_by_ap_id(uri, nickname, actor_type \\ "Person") do
{_, user} = {_, user} =
case get_cached_by_ap_id(uri) do case get_cached_by_ap_id(uri) do
nil -> 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)}") Logger.error("Cannot create service actor: #{uri}/.\n#{inspect(errors)}")
{:error, nil} {:error, nil}
end end
@ -2106,15 +2106,16 @@ defmodule Pleroma.User do
|> update_and_set_cache() |> update_and_set_cache()
end 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()} {:ok, User.t()} | {:error, Ecto.Changeset.t()}
defp create_service_actor(uri, nickname) do defp create_service_actor(uri, nickname, actor_type) do
%User{ %User{
invisible: true, invisible: true,
local: true, local: true,
ap_id: uri, ap_id: uri,
nickname: nickname, nickname: nickname,
follower_address: uri <> "/followers" follower_address: uri <> "/followers",
actor_type: actor_type
} }
|> change |> change
|> put_private_key() |> put_private_key()

View file

@ -11,12 +11,13 @@ defmodule Pleroma.Web.ActivityPub.Relay do
require Logger require Logger
@nickname "relay" @nickname "relay"
@actor_type "Application"
@spec ap_id() :: String.t() @spec ap_id() :: String.t()
def ap_id, do: "#{Pleroma.Web.Endpoint.url()}/#{@nickname}" def ap_id, do: "#{Pleroma.Web.Endpoint.url()}/#{@nickname}"
@spec get_actor() :: User.t() | nil @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()} @spec follow(String.t()) :: {:ok, Activity.t()} | {:error, any()}
def follow(target_instance) do def follow(target_instance) do

View file

@ -63,6 +63,20 @@ defmodule Pleroma.UserTest do
end) =~ "Cannot create service actor:" end) =~ "Cannot create service actor:"
end 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 test "returns invisible actor" do
uri = "#{Pleroma.Web.Endpoint.url()}/internal/fetch-test" uri = "#{Pleroma.Web.Endpoint.url()}/internal/fetch-test"
followers_uri = "#{uri}/followers" followers_uri = "#{uri}/followers"