Current section
Files
Jump to
Current section
Files
lib/splash_router.ex
defmodule CLWiFi.SplashRouter do
use Plug.Router
plug :set_session_name
plug :ensure_session_is_running
plug :add_credentials
plug :respond_to_request
plug :match
plug :dispatch
match(_) do
conn
|> send_resp(404, "Not Found")
end
def set_session_name(%{private: %{development_mode: true}} = conn, _) do
conn
|> Plug.Conn.put_private(:connection, CLWiFi.Development.default_session_name())
end
def set_session_name(%{query_params: %{"connection" => session_name}} = conn, _) do
conn
|> Plug.Conn.put_private(:connection, session_name)
end
def set_session_name(%{params: %{"location_id" => location_id, "mac" => mac_address}} = conn, _) do
session_name = CLWiFi.Session.generate_session_name(location_id, mac_address)
conn
|> Plug.Conn.put_private(:connection, session_name)
end
def ensure_session_is_running(%{private: %{connection: session_name}} = conn, _opts) do
case CLWiFi.Session.ensure_running(session_name) do
:ok -> conn
:error -> ExWeb.Errors.render(conn, 404)
end
end
def add_credentials(%{private: %{connection: session_name}, params: %{"uamip" => router_ip, "uamport" => router_port, "challenge" => challenge}} = conn, _opts) do
CLWiFi.Session.set_credentials(session_name, challenge, router_ip, router_port)
conn
end
def add_credentials(conn, _opts) do
conn
end
def respond_to_request(%{private: %{connection: session_name, development_mode: true}} = conn, _opts) do
CLWiFi.Session.show_splash_page(session_name)
CLWiFi.redirect_to(conn, Application.get_env(:cl_wifi, :start_path) || "/")
end
def respond_to_request(%{private: %{connection: session_name}, params: %{"res" => "notyet"}} = conn, _opts) do
CLWiFi.Session.show_splash_page(session_name)
CLWiFi.redirect_to(conn, Application.get_env(:cl_wifi, :start_path) || "/")
end
def respond_to_request(%{private: %{connection: session_name}, params: %{"res" => "success"}} = conn, _opts) do
CLWiFi.redirect_to(conn, Application.get_env(:cl_wifi, :success_path) || "/success")
end
def respond_to_request(%{params: %{"res" => "failed"}} = conn, _opts) do
CLWiFi.redirect_to(conn, Application.get_env(:cl_wifi, :failed_path) || "/failed")
end
def respond_to_request(%{params: %{"res" => _}} = conn, _opts) do
CLWiFi.redirect_to(conn, Application.get_env(:cl_wifi, :success_path) || "/success")
end
end