ActivityPub: Use only string keys in views.
[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