50 lines
1 KiB
Elixir
50 lines
1 KiB
Elixir
defmodule NullaWeb.Generic.WebfingerJSON do
|
|
alias Nulla.Actors.Actor
|
|
|
|
@doc """
|
|
Renders a webfinger.
|
|
"""
|
|
def show(actor) do
|
|
data(actor)
|
|
end
|
|
|
|
defp data(%Actor{} = actor) do
|
|
data = [
|
|
subject: actor.acct,
|
|
aliases: [
|
|
actor.url,
|
|
actor.ap_id
|
|
],
|
|
links: [
|
|
Jason.OrderedObject.new(
|
|
rel: "http://webfinger.net/rel/profile-page",
|
|
type: "text/html",
|
|
href: actor.url
|
|
),
|
|
Jason.OrderedObject.new(
|
|
rel: "self",
|
|
type: "application/activity+json",
|
|
href: actor.ap_id
|
|
)
|
|
]
|
|
]
|
|
|
|
data =
|
|
if actor.icon do
|
|
Keyword.update!(data, :links, fn links ->
|
|
links ++
|
|
[
|
|
Jason.OrderedObject.new(
|
|
rel: "http://webfinger.net/rel/avatar",
|
|
type: Map.get(actor.icon, :mediaType),
|
|
href: Map.get(actor.icon, :url)
|
|
)
|
|
]
|
|
end)
|
|
else
|
|
data
|
|
end
|
|
|
|
Jason.OrderedObject.new(data)
|
|
end
|
|
end
|