defmodule NullaWeb.WebfingerController do use NullaWeb, :controller alias Nulla.Repo alias Nulla.ActivityPub alias Nulla.Models.User alias Nulla.Models.InstanceSettings def index(conn, %{"resource" => resource}) do case Regex.run(~r/^acct:([^@]+)@(.+)$/, resource) do [_, username, domain] -> case User.get_user_by_username(username) do nil -> conn |> put_status(:not_found) |> json(%{error: "Not Found"}) user -> instance_settings = InstanceSettings.get_instance_settings!() if domain == instance_settings.domain do json(conn, ActivityPub.webfinger(domain, username, resource)) else conn |> put_status(:not_found) |> json(%{error: "Not Found"}) end end _ -> conn |> put_status(:bad_request) |> json(%{error: "Bad Request"}) end end end