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(username, domain) do nil -> conn |> put_status(:not_found) |> json(%{error: "Not Found"}) %Actor{} = actor -> instance_settings = InstanceSettings.get_instance_settings!() if domain == instance_settings.domain do json(conn, ActivityPub.webfinger(actor)) else conn |> put_status(:not_found) |> json(%{error: "Not Found"}) end end _ -> conn |> put_status(:bad_request) |> json(%{error: "Bad Request"}) end end end