diff options
Diffstat (limited to 'lib/lsg_web/context_plug.ex')
-rw-r--r-- | lib/lsg_web/context_plug.ex | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/lib/lsg_web/context_plug.ex b/lib/lsg_web/context_plug.ex deleted file mode 100644 index ebededa..0000000 --- a/lib/lsg_web/context_plug.ex +++ /dev/null @@ -1,92 +0,0 @@ -defmodule NolaWeb.ContextPlug do - import Plug.Conn - import Phoenix.Controller - - def init(opts \\ []) do - opts || [] - end - - def get_account(conn) do - cond do - get_session(conn, :account) -> get_session(conn, :account) - get_session(conn, :oidc_id) -> if account = IRC.Account.find_meta_account("identity-id", get_session(conn, :oidc_id)), do: account.id - true -> nil - end - end - - def call(conn, opts) do - account = with \ - {:account, account_id} when is_binary(account_id) <- {:account, get_account(conn)}, - {:account, account} when not is_nil(account) <- {:account, IRC.Account.get(account_id)} - do - account - else - _ -> nil - end - - network = Map.get(conn.params, "network") - network = if network == "-", do: nil, else: network - - oidc_account = IRC.Account.find_meta_account("identity-id", get_session(conn, :oidc_id)) - - conns = IRC.Connection.get_network(network) - chan = if c = Map.get(conn.params, "chan") do - NolaWeb.reformat_chan(c) - end - chan_conn = IRC.Connection.get_network(network, chan) - - memberships = if account do - IRC.Membership.of_account(account) - end - - auth_required = cond do - Keyword.get(opts, :restrict) == :public -> false - account == nil -> true - network == nil -> false - Keyword.get(opts, :restrict) == :logged_in -> false - network && chan -> - !Enum.member?(memberships, {network, chan}) - network -> - !Enum.any?(memberships, fn({n, _}) -> n == network end) - end - - bot = cond do - network && chan && chan_conn -> chan_conn.nick - network && conns -> conns.nick - true -> nil - end - - - cond do - account && auth_required -> - conn - |> put_status(404) - |> text("Page not found") - |> halt() - auth_required -> - conn - |> put_status(403) - |> render(NolaWeb.AlcoologView, "auth.html", bot: bot, no_header: true, network: network) - |> halt() - (network && !conns) -> - conn - |> put_status(404) - |> text("Page not found") - |> halt() - (chan && !chan_conn) -> - conn - |> put_status(404) - |> text("Page not found") - |> halt() - true -> - conn = conn - |> assign(:network, network) - |> assign(:chan, chan) - |> assign(:bot, bot) - |> assign(:account, account) - |> assign(:oidc_account, oidc_account) - |> assign(:memberships, memberships) - end - end - -end |