1 defmodule Pleroma.Web.ActivityPub.UserView do
3 alias Pleroma.Web.Salmon
4 alias Pleroma.Web.WebFinger
7 def render("user.json", %{user: user}) do
8 {:ok, user} = WebFinger.ensure_keys_present(user)
9 {:ok, _, public_key} = Salmon.keys_from_pem(user.info["keys"])
10 public_key = :public_key.pem_entry_encode(:RSAPublicKey, public_key)
11 public_key = :public_key.pem_encode([public_key])
14 "https://www.w3.org/ns/activitystreams",
15 "https://w3id.org/security/v1",
17 "manuallyApprovesFollowers" => "as:manuallyApprovesFollowers",
18 "sensitive" => "as:sensitive",
19 "Hashtag" => "as:Hashtag",
20 "ostatus" => "http://ostatus.org#",
21 "atomUri" => "ostatus:atomUri",
22 "inReplyToAtomUri" => "ostatus:inReplyToAtomUri",
23 "conversation" => "ostatus:conversation",
24 "toot" => "http://joinmastodon.org/ns#",
25 "Emoji" => "toot:Emoji"
30 "following" => "#{user.ap_id}/following",
31 "followers" => "#{user.ap_id}/followers",
32 "inbox" => "#{user.ap_id}/inbox",
33 "outbox" => "#{user.ap_id}/outbox",
34 "preferredUsername" => user.nickname,
36 "summary" => user.bio,
38 "manuallyApprovesFollowers" => false,
40 "id" => "#{user.ap_id}#main-key",
41 "owner" => user.ap_id,
42 "publicKeyPem" => public_key
45 "sharedInbox" => "#{Pleroma.Web.Endpoint.url}/inbox"
49 "url" => User.avatar_url(user)
53 "url" => User.banner_url(user)