5303455a82314bca2b601c4f80a2054b635b9a19
[akkoma] / lib / pleroma / web / activity_pub / views / user_view.ex
1 defmodule Pleroma.Web.ActivityPub.UserView do
2 use Pleroma.Web, :view
3 alias Pleroma.Web.Salmon
4 alias Pleroma.User
5
6 def render("user.json", %{user: user}) do
7 {:ok, _, public_key} = Salmon.keys_from_pem(user.info["keys"])
8 public_key = :public_key.pem_entry_encode(:RSAPublicKey, public_key)
9 public_key = :public_key.pem_encode([public_key])
10 %{
11 "@context": [
12 "https://www.w3.org/ns/activitystreams",
13 "https://w3id.org/security/v1",
14 %{
15 "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
16 "sensitive": "as:sensitive",
17 "Hashtag": "as:Hashtag",
18 "ostatus": "http://ostatus.org#",
19 "atomUri": "ostatus:atomUri",
20 "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
21 "conversation": "ostatus:conversation",
22 "toot": "http://joinmastodon.org/ns#",
23 "Emoji": "toot:Emoji"
24 }
25 ],
26 "id": user.ap_id,
27 "type": "Person",
28 "following": "#{user.ap_id}/following",
29 "followers": "#{user.ap_id}/followers",
30 "inbox": "#{user.ap_id}/inbox",
31 "outbox": "#{user.ap_id}/outbox",
32 "preferredUsername": user.nickname,
33 "name": user.name,
34 "summary": user.bio,
35 "url": user.ap_id,
36 "manuallyApprovesFollowers": false,
37 "publicKey": %{
38 "id": "#{user.ap_id}#main-key",
39 "owner": user.ap_id,
40 "publicKeyPem": public_key
41 },
42 "endpoints": %{
43 "sharedInbox": "#{Pleroma.Web.Endpoint.url}/inbox"
44 },
45 "icon": %{
46 "type": "Image",
47 "url": User.avatar_url(user)
48 }
49 }
50 end
51 end