35 lines
954 B
Elixir
35 lines
954 B
Elixir
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
|