ash_hq/lib/ash_hq_web/controllers/auth_controller.ex
2023-01-12 23:52:58 -05:00

74 lines
1.6 KiB
Elixir

defmodule AshHqWeb.AuthController do
use AshHqWeb, :controller
use AshAuthentication.Phoenix.Controller
require Logger
def success(conn, _activity, user, _token) do
return_to = get_session(conn, :return_to) || "/"
conn
|> delete_session(:return_to)
|> store_in_session(user)
|> assign(:current_user, user)
|> redirect(to: return_to)
end
def failure(
conn,
{:password, :sign_in},
%AshAuthentication.Errors.AuthenticationFailed{}
) do
conn
|> put_flash(
:error,
"Username or password is incorrect"
)
|> redirect(to: "/sign-in")
end
def failure(conn, activity, reason) do
stacktrace =
case reason do
%{stacktrace: %{stacktrace: stacktrace}} -> stacktrace
_ -> nil
end
Logger.error("""
Something went wrong in authentication
activity: #{inspect(activity)}
reason: #{Exception.format(:error, reason, stacktrace || [])}
""")
conn
|> put_flash(
:error,
"Something went wrong"
)
|> redirect(to: "/sign-in")
end
def sign_out(conn, _params) do
return_to = get_session(conn, :return_to) || "/"
token = Plug.Conn.get_session(conn, "user_token")
if token do
AshHq.Accounts.UserToken
|> AshAuthentication.TokenResource.Actions.get_token(%{"token" => token})
|> case do
{:ok, [token]} ->
AshHq.Accounts.UserToken.destroy!(token, authorize?: false)
_ ->
:ok
end
end
conn
|> clear_session()
|> redirect(to: return_to)
end
end