defmodule CLWiFi.Router do use Plug.Router use Plug.ErrorHandler require Logger plug :development_mode_check plug :match plug :dispatch forward "/auth/:location_id", to: CLWiFi.AuthRouter forward "/splash/:location_id", to: CLWiFi.SplashRouter match(_) do ExWeb.Errors.render(conn, 404) end def development_mode_check(conn, _opts) do if CLWiFi.Development.development_mode?(conn) do conn |> put_private(:development, nil) |> put_private(:development_mode, true) else conn end end def handle_errors(conn, %{kind: _, reason: %FunctionClauseError{arity: 4, function: :do_match, module: __MODULE__}, stack: _}) do ExWeb.Errors.render(conn, 404) end def handle_errors(conn, %{kind: _kind, reason: _reason, stack: _stack}) do ExWeb.Errors.render(conn, 500) end defmacro __using__(opts) do quote do require Logger use Plug.ErrorHandler def render(conn, module, page \\ :index, assigns \\ %{}) do CLWiFi.render(conn, module, page, assigns) end def render_if_failed(conn, module, page \\ :index, assigns \\ %{}) do CLWiFi.render_if_failed(conn, module, page, assigns) end def render_if_successful(conn, module, page \\ :index, assigns \\ %{}) do CLWiFi.render_if_successful(conn, module, page, assigns) end def redirect_to(conn, url, params \\ %{}, body \\ nil) do CLWiFi.redirect_to(conn, url, params, body) end def redirect_to_if_successful(conn, url, params \\ %{}, body \\ nil) do CLWiFi.redirect_to_if_successful(conn, url, params, body) end def redirect_to_if_failed(conn, url, params \\ %{}, body \\ nil) do CLWiFi.redirect_to_if_failed(conn, url, params, body) end def validate(conn, module, function, commit_function) do ExWeb.validate(conn, module, function, commit_function) end def forms(conn, module, form) do ExWeb.forms(conn, module, form) end def add_url_for(%{assigns: assigns} = conn, url, opts \\ []) do CLWiFi.add_url_for(conn, url, opts) end def handle_errors(%{state: :sent} = conn, _) do conn end def handle_errors(conn, %{kind: _, reason: %FunctionClauseError{arity: 4, function: :do_match, module: unquote(__CALLER__.module)}, stack: _}) do ExWeb.Errors.render(conn, 404) end def handle_errors(conn, %{kind: _kind, reason: _reason, stack: _stack}) do ExWeb.Errors.render(conn, 500) end defoverridable [handle_errors: 2] end end end