Packages
guard
0.10.0
0.19.1
0.19.0
0.18.0
0.17.2
0.17.1
0.17.0
0.16.3
0.16.2
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
Useful package for dealing with user authentication and signup
Current section
Files
Jump to
Current section
Files
lib/guard/controller.ex
defmodule Guard.Controller do
require Logger
use Phoenix.Controller
defmacro resources do
quote do
post "/registration", Guard.Controller.Registration, :create #Create new account
post "/registration/reset", Guard.Controller.Registration, :send_password_reset #Request a password reset
post "/registration/link", Guard.Controller.Registration, :send_login_link #Send magic link
post "/registration/check", Guard.Controller.Registration, :check_account #Check availability
post "/registration/device", Guard.Controller.Registration, :register_device #Register for push
delete "/registration/device/:platform/:token", Guard.Controller.Registration, :unregister_device #Unregister for push
post "/session", Guard.Controller.Session, :create #Login
get "/session", Guard.Controller.ActiveSession, :show #Show current session
get "/session/:token", Guard.Controller.Session, :restore #Restore session with given JWT
delete "/session", Guard.Controller.Session, :delete #Logout
put "/session/switch/:username", Guard.Controller.Session, :switch_user
put "/session/switch/:email", Guard.Controller.Session, :switch_user
put "/session/switch/:mobile", Guard.Controller.Session, :switch_user
delete "/session/switch", Guard.Controller.Session, :reset_user
put "/account", Guard.Controller.Account, :update #Update current account
post "/account/attributes", Guard.Controller.Account, :update_attributes #Update attributes for current account
delete "/account", Guard.Controller.Account, :delete #Delete account
put "/account/password", Guard.Controller.PasswordReset, :update_password #Update password for current account
put "/account/setpassword", Guard.Controller.Registration, :update_password #Update password for account by one-time-pin
end
end
defmacro admin_resources do
quote do
put "/users/:userid", Guard.Controller.Registration, :update_user #Update given user
delete "/users/:userid", Guard.Controller.Registration, :delete_user #Delete given user
get "/users", Guard.Controller.Registration, :list_all_users #Show all registered uses
get "/audit/:user_id", Guard.Controller.Audit, :list_audit_trail #Show audit trail for user
end
end
def send_error(conn, %{message: message, plug_status: status_code}=_error) do
send_error(conn, message, status_code)
end
def send_error(conn, %Ecto.Changeset{} = cs) do
send_error(conn, Guard.Repo.changeset_errors(cs), :unprocessable_entity)
end
def send_error(conn, error, status_code \\ :unprocessable_entity) do
Logger.debug("#{conn.request_path} #{inspect error}")
conn
|> put_status(status_code)
|> json(%{error: translate_error(error)})
end
def translate_error(reason) do
cond do
is_tuple(reason) -> tuple_to_map(%{}, Tuple.to_list(reason))
Exception.exception?(reason) -> translate_error(Exception.message(reason))
true -> reason
end
end
defp tuple_to_map(acc, list) do
if length(list) > 2 do
[k, v | tail] = list
tuple_to_map(Map.put(acc, k, v), tail)
else
acc
end
end
end