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.
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()

View file

@ -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

View file

@ -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"