Packages
guard
0.6.1
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/password_reset_controller.ex
defmodule Guard.Controller.PasswordReset do
use Phoenix.Controller
alias Guard.{Authenticator, User, Users}
import Guard.Controller, only: [send_error: 2, send_error: 3]
plug Guardian.Plug.EnsureAuthenticated
def call(conn, opts) do
try do
super(conn, opts)
rescue
error -> send_error(conn, error, :internal_server_error)
end
end
defp do_update_password(conn, user, new_password, new_password_confirmation) do
update = if new_password_confirmation do
Users.update_user(user, %{"password" => new_password, "password_confirmation" => new_password_confirmation})
else
Users.update_user(user, %{"password" => new_password})
end
case update do
{:ok, _user} ->
json(conn, %{ok: true})
{:error, error, _changeset} ->
send_error(conn, error)
end
end
def update_password(conn, %{"password" => password, "new_password" => new_password, "new_password_confirmation" => new_password_confirmation}) do
user = Authenticator.current_user(conn)
case User.check_password(user, password) do
true ->
do_update_password(conn, user, new_password, new_password_confirmation)
false ->
conn
|> put_status(:unprocessable_entity)
|> send_error(:wrong_password)
end
end
def update_password(conn, %{"password" => _password, "new_password" => _new_password} = params) do
update_password(conn, Map.put(params, "new_password_confirmation", nil))
end
def update_password(conn, %{"new_password" => new_password, "new_password_confirmation" => new_password_confirmation}) do
case Authenticator.current_claim_type(conn) do
"password_reset" ->
user = Authenticator.current_user(conn)
do_update_password(conn, user, new_password, new_password_confirmation)
_ ->
conn
|> put_status(:unprocessable_entity)
|> send_error(:bad_claim)
end
end
def update_password(conn, %{"new_password" => _new_password} = params) do
update_password(conn, Map.put(params, "new_password_confirmation", nil))
end
def update_password(conn, _) do
conn
|> put_status(:unprocessable_entity)
|> json(%{ok: false})
end
end