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