mirror of
https://github.com/ash-project/ash_hq.git
synced 2024-09-20 05:13:23 +12:00
74 lines
1.6 KiB
Elixir
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
|