2022-08-06 14:08:23 +12:00
|
|
|
defmodule AshHqWeb.UserSessionController do
|
|
|
|
use AshHqWeb, :controller
|
|
|
|
|
|
|
|
alias AshHqWeb.UserAuth
|
|
|
|
|
2022-08-16 13:23:59 +12:00
|
|
|
def log_in(conn, %{"log_in" => %{"token" => token} = params}) do
|
|
|
|
token = Base.url_decode64!(token, padding: false)
|
|
|
|
UserAuth.log_in_with_token(conn, token, params["remember_me"] == "true", params["return_to"])
|
2022-08-06 14:08:23 +12:00
|
|
|
end
|
|
|
|
|
2022-08-16 13:23:59 +12:00
|
|
|
def log_in(conn, %{"log_in" => %{"email" => email, "password" => password} = params}) do
|
|
|
|
AshHq.Accounts.User
|
|
|
|
|> Ash.Query.for_read(:by_email_and_password, %{email: email, password: password},
|
|
|
|
authorize?: false
|
|
|
|
)
|
|
|
|
|> AshHq.Accounts.read_one()
|
2022-08-06 14:08:23 +12:00
|
|
|
|> case do
|
2022-08-16 13:23:59 +12:00
|
|
|
{:ok, nil} ->
|
|
|
|
redirect(conn, to: "/")
|
2022-08-06 14:08:23 +12:00
|
|
|
|
2022-08-16 13:23:59 +12:00
|
|
|
{:ok, user} ->
|
|
|
|
token = AshHqWeb.UserAuth.create_token_for_user(user)
|
|
|
|
|
|
|
|
UserAuth.log_in_with_token(
|
|
|
|
conn,
|
|
|
|
token,
|
|
|
|
params["remember_me"] == "true",
|
|
|
|
params["return_to"]
|
|
|
|
)
|
|
|
|
|
|
|
|
{:error, _} ->
|
|
|
|
redirect(conn, to: "/")
|
2022-08-06 14:08:23 +12:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def delete(conn, _params) do
|
|
|
|
conn
|
|
|
|
|> put_flash(:info, "Logged out successfully.")
|
|
|
|
|> UserAuth.log_out_user()
|
|
|
|
end
|
|
|
|
end
|