Packages
A web application in pursuit of meaning in life.
Current section
Files
Jump to
Current section
Files
lib/udia_web/controllers/user_controller.ex
defmodule UdiaWeb.UserController do
use UdiaWeb, :controller
alias Udia.Accounts
alias Udia.Accounts.User
plug Guardian.Plug.EnsureAuthenticated, [handler: UdiaWeb.SessionController] when action in [:index, :update, :delete]
action_fallback UdiaWeb.FallbackController
def index(conn, params) do
page =
User
|> Udia.Repo.paginate(params)
render(conn, "index.json", users: page.entries, pagination: UdiaWeb.PaginationHelpers.pagination(page))
end
def create(conn, user_params) do
case Accounts.create_user(user_params) do
{:ok, user_versioned} ->
user = Map.get(user_versioned, :model)
new_conn = Guardian.Plug.api_sign_in(conn, user, :access)
jwt = Guardian.Plug.current_token(new_conn)
new_conn
|> put_status(:created)
|> render(UdiaWeb.SessionView, "show.json", user: user, jwt: jwt)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(UdiaWeb.ChangesetView, "error.json", changeset: changeset)
end
end
def show(conn, %{"id" => username}) do
user = Accounts.get_user_by_username!(username)
render(conn, "show.json", user: user)
end
def update(conn, %{"id" => username, "user" => user_params}) do
user = Accounts.get_user_by_username!(username)
cur_user = Guardian.Plug.current_resource(conn)
if cur_user.id != user.id do
conn
|> put_status(:forbidden)
|> render(UdiaWeb.SessionView, "forbidden.json", error: "Invalid user")
else
case Accounts.update_user(user, user_params) do
{:ok, user_versioned} ->
user = Map.get(user_versioned, :model)
new_conn = Guardian.Plug.api_sign_in(conn, user, :access)
jwt = Guardian.Plug.current_token(new_conn)
new_conn
|> put_status(:accepted)
|> render(UdiaWeb.SessionView, "show.json", user: user, jwt: jwt)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(UdiaWeb.ChangesetView, "error.json", changeset: changeset)
end
end
end
def delete(conn, %{"id" => username}) do
user = Accounts.get_user_by_username!(username)
cur_user = Guardian.Plug.current_resource(conn)
if cur_user.id != user.id do
conn
|> put_status(:forbidden)
|> render(UdiaWeb.SessionView, "forbidden.json", error: "Invalid user")
else
Accounts.delete_user(user)
send_resp(conn, :no_content, "")
end
end
end