X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fviews%2Fuser_view.ex;h=ffd76b5294ecaf501e056f6f451e10fc280d785b;hb=0ec1abb3b65d9885e81a470efcc5b7437c4f8d4c;hp=9ff1f0c774dc421b3c1f1a77cdab9a0294058e7f;hpb=2c1c221301ee91a8bccc1da2dc658b0f5a5598c9;p=akkoma diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index 9ff1f0c77..ffd76b529 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -3,15 +3,18 @@ defmodule Pleroma.Web.ActivityPub.UserView do alias Pleroma.Web.Salmon alias Pleroma.Web.WebFinger alias Pleroma.User + alias Pleroma.Repo alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Utils + import Ecto.Query def render("user.json", %{user: user}) do {:ok, user} = WebFinger.ensure_keys_present(user) {:ok, _, public_key} = Salmon.keys_from_pem(user.info["keys"]) public_key = :public_key.pem_entry_encode(:RSAPublicKey, public_key) public_key = :public_key.pem_encode([public_key]) + %{ "id" => user.ap_id, "type" => "Person", @@ -30,7 +33,7 @@ defmodule Pleroma.Web.ActivityPub.UserView do "publicKeyPem" => public_key }, "endpoints" => %{ - "sharedInbox" => "#{Pleroma.Web.Endpoint.url}/inbox" + "sharedInbox" => "#{Pleroma.Web.Endpoint.url()}/inbox" }, "icon" => %{ "type" => "Image", @@ -44,30 +47,20 @@ defmodule Pleroma.Web.ActivityPub.UserView do |> Map.merge(Utils.make_json_ld_header()) end - def collection(collection, iri, page) do - offset = (page - 1) * 10 - items = Enum.slice(collection, offset, 10) - items = Enum.map(items, fn (user) -> user.ap_id end) - map = %{ - "id" => "#{iri}?page=#{page}", - "type" => "OrderedCollectionPage", - "partOf" => iri, - "totalItems" => length(collection), - "orderedItems" => items - } - if offset < length(collection) do - Map.put(map, "next", "#{iri}?page=#{page+1}") - end - end - def render("following.json", %{user: user, page: page}) do - {:ok, following} = User.get_friends(user) + query = User.get_friends_query(user) + query = from(user in query, select: [:ap_id]) + following = Repo.all(query) + collection(following, "#{user.ap_id}/following", page) |> Map.merge(Utils.make_json_ld_header()) end def render("following.json", %{user: user}) do - {:ok, following} = User.get_friends(user) + query = User.get_friends_query(user) + query = from(user in query, select: [:ap_id]) + following = Repo.all(query) + %{ "id" => "#{user.ap_id}/following", "type" => "OrderedCollection", @@ -78,13 +71,19 @@ defmodule Pleroma.Web.ActivityPub.UserView do end def render("followers.json", %{user: user, page: page}) do - {:ok, followers} = User.get_followers(user) + query = User.get_followers_query(user) + query = from(user in query, select: [:ap_id]) + followers = Repo.all(query) + collection(followers, "#{user.ap_id}/followers", page) |> Map.merge(Utils.make_json_ld_header()) end def render("followers.json", %{user: user}) do - {:ok, followers} = User.get_followers(user) + query = User.get_followers_query(user) + query = from(user in query, select: [:ap_id]) + followers = Repo.all(query) + %{ "id" => "#{user.ap_id}/followers", "type" => "OrderedCollection", @@ -105,9 +104,12 @@ defmodule Pleroma.Web.ActivityPub.UserView do "limit" => "10" } - if max_qid != nil do - params = Map.put(params, "max_id", max_qid) - end + params = + if max_qid != nil do + Map.put(params, "max_id", max_qid) + else + params + end activities = ActivityPub.fetch_public_activities(params) min_id = Enum.at(activities, 0).id @@ -115,19 +117,21 @@ defmodule Pleroma.Web.ActivityPub.UserView do activities = Enum.reverse(activities) max_id = Enum.at(activities, 0).id - collection = Enum.map(activities, fn (act) -> - {:ok, data} = Transmogrifier.prepare_outgoing(act.data) - data - end) + collection = + Enum.map(activities, fn act -> + {:ok, data} = Transmogrifier.prepare_outgoing(act.data) + data + end) iri = "#{user.ap_id}/outbox" + page = %{ "id" => "#{iri}?max_id=#{max_id}", "type" => "OrderedCollectionPage", "partOf" => iri, "totalItems" => info.note_count, "orderedItems" => collection, - "next" => "#{iri}?max_id=#{min_id-1}", + "next" => "#{iri}?max_id=#{min_id - 1}" } if max_qid == nil do @@ -142,4 +146,23 @@ defmodule Pleroma.Web.ActivityPub.UserView do page |> Map.merge(Utils.make_json_ld_header()) end end + + def collection(collection, iri, page, total \\ nil) do + offset = (page - 1) * 10 + items = Enum.slice(collection, offset, 10) + items = Enum.map(items, fn user -> user.ap_id end) + total = total || length(collection) + + map = %{ + "id" => "#{iri}?page=#{page}", + "type" => "OrderedCollectionPage", + "partOf" => iri, + "totalItems" => total, + "orderedItems" => items + } + + if offset < total do + Map.put(map, "next", "#{iri}?page=#{page + 1}") + end + end end