Add support for outgoing update.
[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.Web.WebFinger
5 alias Pleroma.User
6
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])
12 %{
13 "@context" => [
14 "https://www.w3.org/ns/activitystreams",
15 "https://w3id.org/security/v1",
16 %{
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"
26 }
27 ],
28 "id" => user.ap_id,
29 "type" => "Person",
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,
35 "name" => user.name,
36 "summary" => user.bio,
37 "url" => user.ap_id,
38 "manuallyApprovesFollowers" => false,
39 "publicKey" => %{
40 "id" => "#{user.ap_id}#main-key",
41 "owner" => user.ap_id,
42 "publicKeyPem" => public_key
43 },
44 "endpoints" => %{
45 "sharedInbox" => "#{Pleroma.Web.Endpoint.url}/inbox"
46 },
47 "icon" => %{
48 "type" => "Image",
49 "url" => User.avatar_url(user)
50 },
51 "image" => %{
52 "type" => "Image",
53 "url" => User.banner_url(user)
54 }
55 }
56 end
57 end