defmodule DexiWeb.SessionController do use DexiWeb, :controller alias Dexi.Accounts alias Dexi.GridsLoginHandler alias DexiWeb.UserAuth def create(conn, %{"message_id" => message_id}) do with {:ok, pubkey} <- GridsLoginHandler.consume_pubkey(conn.assigns.session_id, message_id), {:ok, user, status} <- Accounts.get_or_create_user_with_status(pubkey) do conn = UserAuth.log_in_user(conn, user) redirect(conn, to: signed_in_path(status)) else _error -> conn |> put_flash(:error, "That login request is invalid or has expired.") |> redirect(to: ~p"/login") end end def delete(conn, _params) do session_id = conn.assigns.session_id GridsLoginHandler.cleanout_session_data(session_id) conn |> UserAuth.log_out_user() |> redirect(to: ~p"/") end defp signed_in_path(:created), do: ~p"/account" defp signed_in_path(:existing), do: ~p"/" end