mirror of
https://github.com/ash-project/ash_hq.git
synced 2024-09-20 21:33:10 +12:00
75 lines
1.6 KiB
Elixir
75 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
|