mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-10-02 08:11:55 +00:00
Use 'Application' for relay actor type
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
parent
4e355b8595
commit
2102ff82fa
4 changed files with 24 additions and 7 deletions
1
changelog.d/relay-actor-type.fix
Normal file
1
changelog.d/relay-actor-type.fix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Instance relay now uses actor type Application
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue