+ "endpoints" => endpoints,
+ "tag" => (user.info.source_data["tag"] || []) ++ user_tags
+ }
+ |> Map.merge(maybe_make_image(&User.avatar_url/2, "icon", user))
+ |> Map.merge(maybe_make_image(&User.banner_url/2, "image", user))
+ |> Map.merge(Utils.make_json_ld_header())
+ end
+
+ def render("following.json", %{user: user, page: page}) do
+ query = User.get_friends_query(user)
+ query = from(user in query, select: [:ap_id])
+ following = Repo.all(query)
+
+ total =
+ if !user.info.hide_follows do
+ length(following)
+ else
+ 0
+ end
+
+ collection(following, "#{user.ap_id}/following", page, !user.info.hide_follows, total)
+ |> Map.merge(Utils.make_json_ld_header())
+ end
+
+ def render("following.json", %{user: user}) do
+ query = User.get_friends_query(user)
+ query = from(user in query, select: [:ap_id])
+ following = Repo.all(query)
+
+ total =
+ if !user.info.hide_follows do
+ length(following)
+ else
+ 0
+ end
+
+ %{
+ "id" => "#{user.ap_id}/following",
+ "type" => "OrderedCollection",
+ "totalItems" => total,
+ "first" => collection(following, "#{user.ap_id}/following", 1, !user.info.hide_follows)
+ }
+ |> Map.merge(Utils.make_json_ld_header())
+ end
+
+ def render("followers.json", %{user: user, page: page}) do
+ query = User.get_followers_query(user)
+ query = from(user in query, select: [:ap_id])
+ followers = Repo.all(query)
+
+ total =
+ if !user.info.hide_followers do
+ length(followers)
+ else
+ 0
+ end
+
+ collection(followers, "#{user.ap_id}/followers", page, !user.info.hide_followers, total)
+ |> Map.merge(Utils.make_json_ld_header())
+ end
+
+ def render("followers.json", %{user: user}) do
+ query = User.get_followers_query(user)
+ query = from(user in query, select: [:ap_id])
+ followers = Repo.all(query)
+
+ total =
+ if !user.info.hide_followers do
+ length(followers)
+ else
+ 0
+ end
+
+ %{
+ "id" => "#{user.ap_id}/followers",
+ "type" => "OrderedCollection",
+ "totalItems" => total,
+ "first" =>
+ collection(followers, "#{user.ap_id}/followers", 1, !user.info.hide_followers, total)
+ }
+ |> Map.merge(Utils.make_json_ld_header())
+ end
+
+ def render("outbox.json", %{user: user, max_id: max_qid}) do
+ params = %{
+ "limit" => "10"
+ }
+
+ params =
+ if max_qid != nil do
+ Map.put(params, "max_id", max_qid)
+ else
+ params
+ end
+
+ activities = ActivityPub.fetch_user_activities(user, nil, params)
+
+ {max_id, min_id, collection} =
+ if length(activities) > 0 do
+ {
+ Enum.at(Enum.reverse(activities), 0).id,
+ Enum.at(activities, 0).id,
+ Enum.map(activities, fn act ->
+ {:ok, data} = Transmogrifier.prepare_outgoing(act.data)
+ data
+ end)
+ }
+ else
+ {
+ 0,
+ 0,
+ []
+ }
+ end
+
+ iri = "#{user.ap_id}/outbox"
+
+ page = %{
+ "id" => "#{iri}?max_id=#{max_id}",
+ "type" => "OrderedCollectionPage",
+ "partOf" => iri,
+ "orderedItems" => collection,
+ "next" => "#{iri}?max_id=#{min_id}"
+ }
+
+ if max_qid == nil do
+ %{
+ "id" => iri,
+ "type" => "OrderedCollection",
+ "first" => page