Fix relay outbox endpoint

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2020-08-31 17:26:08 +02:00
parent a9b8b92ce4
commit 83354d834d
4 changed files with 34 additions and 3 deletions

View File

@ -769,12 +769,22 @@ defmodule Mobilizon.Federation.ActivityPub do
Return all public activities (events & comments) for an actor
"""
@spec fetch_public_activities_for_actor(Actor.t(), integer(), integer()) :: map()
def fetch_public_activities_for_actor(%Actor{} = actor, page \\ 1, limit \\ 10) do
def fetch_public_activities_for_actor(%Actor{id: actor_id} = actor, page \\ 1, limit \\ 10) do
%Actor{id: relay_actor_id} = Relay.get_actor()
%Page{total: total_events, elements: events} =
if actor_id == relay_actor_id do
Events.list_public_local_events(page, limit)
else
Events.list_public_events_for_actor(actor, page, limit)
end
%Page{total: total_comments, elements: comments} =
if actor_id == relay_actor_id do
Discussions.list_local_comments(page, limit)
else
Discussions.list_public_comments_for_actor(actor, page, limit)
end
event_activities = Enum.map(events, &event_to_activity/1)
comment_activities = Enum.map(comments, &comment_to_activity/1)

View File

@ -394,6 +394,7 @@ defmodule Mobilizon.Actors.Actor do
"keys" => Crypto.generate_rsa_2048_private_key(),
"preferred_username" => "relay",
"domain" => nil,
"visibility" => :public,
"type" => :Application
}

View File

@ -239,6 +239,16 @@ defmodule Mobilizon.Discussions do
Repo.all(from(c in Comment, where: c.visibility == ^:public))
end
@spec list_local_comments(integer | nil, integer | nil) :: Page.t()
def list_local_comments(page \\ nil, limit \\ nil) do
Comment
|> where([c], c.visibility == ^:public)
|> where([c], is_nil(c.deleted_at))
|> where([c], is_nil(c.discussion_id))
|> preload_for_comment()
|> Page.build_page(page, limit)
end
@doc """
Returns the list of public comments for the actor.
"""

View File

@ -375,6 +375,16 @@ defmodule Mobilizon.Events do
|> Repo.stream()
end
@spec list_public_local_events(integer | nil, integer | nil) :: Page.t()
def list_public_local_events(page \\ nil, limit \\ nil) do
Event
|> filter_public_visibility()
|> filter_draft()
|> filter_local()
|> preload_for_event()
|> Page.build_page(page, limit)
end
@doc """
Returns the list of events with the same tags.
"""