akkoma/lib/pleroma/web/activity_pub/views/user_view.ex

52 lines
1.6 KiB
Elixir

defmodule Pleroma.Web.ActivityPub.UserView do
use Pleroma.Web, :view
alias Pleroma.Web.Salmon
alias Pleroma.User
def render("user.json", %{user: user}) do
{: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])
%{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1",
%{
"manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
"sensitive": "as:sensitive",
"Hashtag": "as:Hashtag",
"ostatus": "http://ostatus.org#",
"atomUri": "ostatus:atomUri",
"inReplyToAtomUri": "ostatus:inReplyToAtomUri",
"conversation": "ostatus:conversation",
"toot": "http://joinmastodon.org/ns#",
"Emoji": "toot:Emoji"
}
],
"id": user.ap_id,
"type": "Person",
"following": "#{user.ap_id}/following",
"followers": "#{user.ap_id}/followers",
"inbox": "#{user.ap_id}/inbox",
"outbox": "#{user.ap_id}/outbox",
"preferredUsername": user.nickname,
"name": user.name,
"summary": user.bio,
"url": user.ap_id,
"manuallyApprovesFollowers": false,
"publicKey": %{
"id": "#{user.ap_id}#main-key",
"owner": user.ap_id,
"publicKeyPem": public_key
},
"endpoints": %{
"sharedInbox": "#{Pleroma.Web.Endpoint.url}/inbox"
},
"icon": %{
"type": "Image",
"url": User.avatar_url(user)
}
}
end
end