defmodule NullaWeb.WebfingerController do use NullaWeb, :controller alias Nulla.ActivityPub alias Nulla.Models.Actor alias Nulla.Models.InstanceSettings def index(conn, %{"resource" => resource}) do case Regex.run(~r/^acct:(.+)@(.+)$/, resource) do [_, username, domain] -> case Actor.get_actor(preferredUsername: username, domain: domain) do nil -> conn |> put_resp_content_type("text/plain") |> send_resp(404, "") %Actor{} = actor -> instance_settings = InstanceSettings.get_instance_settings!() if domain == instance_settings.domain do json(conn, ActivityPub.webfinger(actor)) else conn |> put_resp_content_type("text/plain") |> send_resp(404, "") end end _ -> conn |> put_resp_content_type("text/plain") |> send_resp(400, "") end end def index(conn, _params) do conn |> put_resp_content_type("text/plain") |> send_resp(400, "") end end