defmodule CLWiFi.Plug do alias Plug.Conn alias CLWiFi.Session def init(options) do options end def call(%{query_params: %{"connection" => session_name}} = conn, _opts) do if Session.exists?(session_name) do assigns = Session.get_assigns(session_name) conn |> Plug.Conn.put_private(:connection, session_name) |> assign_session_data_to_conn(Map.to_list(assigns)) else conn |> ExWeb.Errors.render(404) |> Plug.Conn.halt end end def call(conn, _opts) do conn |> ExWeb.Errors.render(500) |> Plug.Conn.halt end defp assign_session_data_to_conn(conn, []), do: conn defp assign_session_data_to_conn(conn, [{key, value}|rest]) do conn |> Plug.Conn.assign(key, value) |> assign_session_data_to_conn(rest) end end