nulla/lib/nulla_web/controllers/activitypub/outbox_controller.ex
2025-07-05 15:20:40 +02:00

57 lines
1.4 KiB
Elixir

defmodule NullaWeb.ActivityPub.OutboxController do
use NullaWeb, :controller
alias NullaWeb.ActivityPub.OutboxJSON
alias Nulla.Actors
alias Nulla.Activities
alias Nulla.Actors.Actor
def index(conn, %{"username" => username, "page" => "true"} = params) do
domain = NullaWeb.Endpoint.host()
actor = Actors.get_actor_by(acct: "#{username}@#{domain}")
max_id = params["max_id"] && String.to_integer(params["max_id"])
activities =
if max_id do
Activities.get_before_activities(actor.ap_id, max_id)
else
Activities.get_latest_activities(actor.ap_id)
end
next_max_id =
case List.last(activities) do
nil -> 0
last -> last.id
end
min_id =
case List.first(activities) do
nil -> 0
first -> first.id
end
conn
|> put_resp_content_type("application/activity+json")
|> send_resp(
200,
Jason.encode!(OutboxJSON.show(actor, activities, next_max_id, min_id))
)
end
def index(conn, %{"username" => username}) do
domain = NullaWeb.Endpoint.host()
actor = Actors.get_actor_by(acct: "#{username}@#{domain}")
case actor do
%Actor{} = actor ->
total = Activities.get_total_activities_count(actor.ap_id)
conn
|> put_resp_content_type("application/activity+json")
|> send_resp(200, Jason.encode!(OutboxJSON.index(actor, total)))
_ ->
send_resp(conn, 404, "")
end
end
end