Current section

Files

Jump to
guard lib doorman controller account_controller.ex
Raw

lib/doorman/controller/account_controller.ex

defmodule Doorman.Controller.Account do
use Phoenix.Controller
alias Doorman.{Authenticator, Users}
import Doorman.Controller, only: [send_error: 2, send_error: 3]
plug Guardian.Plug.EnsureAuthenticated, claims: %{"typ" => "access"}
def call(conn, opts) do
try do
super(conn, opts)
rescue
error -> send_error(conn, error, :internal_server_error)
end
end
def update_attributes(conn, params) do
user = Authenticator.authenticated_user!(conn)
attrs = if user.attrs == nil, do: params, else: Map.merge(user.attrs, params)
case Users.update_user(user, %{attrs: attrs}) do
{:ok, user} ->
json conn, %{user: user}
{:error, error, _} ->
send_error(conn, error)
end
end
def update(conn, params) do
updatable_fields = MapSet.new(["attrs", "requested_email", "username"])
user = Authenticator.authenticated_user!(conn)
changes = Enum.reduce(params, %{},
fn ({k,v}, sum)->
if MapSet.member?(updatable_fields, k) do
Map.put(sum,k,v)
else
sum
end
end)
case Users.update_user(user, changes) do
{:ok, user} ->
json conn, %{user: user}
{:error, error, _} ->
send_error(conn, error)
end
end
def delete(conn, _) do
user = Authenticator.authenticated_user!(conn)
case Users.delete_user(user) do
{:ok, user} ->
json conn, %{user: user}
{:error, error, _} ->
send_error(conn, error)
end
end
end