defmodule MvWeb.Plugs.JoinFormEnabled do @moduledoc """ For GET /join: returns 404 when the join form is disabled in settings. No-op for other paths. """ import Plug.Conn alias Mv.Membership def init(opts), do: opts def call(conn, _opts) do if join_path?(conn), do: maybe_404(conn), else: conn end defp join_path?(conn) do conn.request_path == "/join" and conn.method == "GET" end defp maybe_404(conn) do case Membership.get_settings() do {:ok, %{join_form_enabled: true}} -> conn _ -> send_404(conn) end end # Same body as default ErrorHTML 404 (no custom error templates in this app). defp send_404(conn) do conn |> put_resp_content_type("text/html") |> send_resp(404, "Not Found") |> halt() end end