defmodule <%= base %>.UserController do use <%= base %>.Web, :controller <%= if api do %> alias <%= base %>.User plug :user_check when action in [:index, :show] plug :id_check when action in [:update, :delete] def index(conn, _params) do users = Repo.all(User) render(conn, "index.json", users: users) end def create(conn, %{"user" => user_params}) do changeset = User.auth_changeset(%User{}, user_params) case Repo.insert(changeset) do {:ok, user} -> conn |> put_status(:created) |> put_resp_header("location", user_path(conn, :show, user)) |> render("show.json", user: user) {:error, _changeset} -> conn |> put_status(:unprocessable_entity) |> render(<%= base %>.ChangesetView, "error.json", changeset: changeset) end end def show(conn, %{"id" => id}) do user = Repo.get!(User, id) render(conn, "show.json", user: user) end def update(conn, %{"id" => id, "user" => user_params}) do user = Repo.get!(User, id) changeset = User.changeset(user, user_params) case Repo.update(changeset) do {:ok, user} -> render(conn, "show.json", user: user) {:error, changeset} -> conn |> put_status(:unprocessable_entity) |> render(<%= base %>.ChangesetView, "error.json", changeset: changeset) end end def delete(conn, %{"id" => id}) do Repo.get!(User, id) |> Repo.delete! send_resp(conn, :no_content, "") end defp user_check(%Plug.Conn{assigns: %{current_user: nil}} = conn, _opts) do put_status(conn, :unauthorized) |> render(<%= base %>.AuthView, "401.json", []) |> halt end defp user_check(conn, _opts), do: conn defp id_check(%Plug.Conn{assigns: %{current_user: nil}} = conn, _opts) do put_status(conn, :unauthorized) |> render(<%= base %>.AuthView, "401.json", []) |> halt end defp id_check(%Plug.Conn{params: %{"id" => id}, assigns: %{current_user: current_user_id}} = conn, _opts) do id == to_string(current_user_id) and conn || put_status(conn, :forbidden) |> render(<%= base %>.AuthView, "403.json", []) |> halt end <% else %> import <%= base %>.Authorize<%= if confirm do %> alias <%= base %>.{Mailer, User} alias Openmaize.ConfirmEmail<% else %> alias <%= base %>.User<% end %> plug :user_check when action in [:index, :show] plug :id_check when action in [:edit, :update, :delete] def index(conn, _params) do users = Repo.all(User) render(conn, "index.html", users: users) end def new(conn, _params) do changeset = User.changeset(%User{}) render(conn, "new.html", changeset: changeset) end<%= if confirm do %> def create(conn, %{"user" => %{"email" => email} = user_params}) do {key, link} = ConfirmEmail.gen_token_link(email) changeset = User.auth_changeset(%User{}, user_params, key) case Repo.insert(changeset) do {:ok, _user} -> Mailer.ask_confirm(email, link)<% else %> def create(conn, %{"user" => user_params}) do changeset = User.auth_changeset(%User{}, user_params) case Repo.insert(changeset) do {:ok, _user} -><% end %> auth_info conn, "User created successfully", user_path(conn, :index) {:error, changeset} -> render(conn, "new.html", changeset: changeset) end end def show(%Plug.Conn{assigns: %{current_user: user}} = conn, _params) do render(conn, "show.html", user: user) end def edit(%Plug.Conn{assigns: %{current_user: user}} = conn, _params) do changeset = User.changeset(user) render(conn, "edit.html", user: user, changeset: changeset) end def update(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"user" => user_params}) do changeset = User.changeset(user, user_params) case Repo.update(changeset) do {:ok, user} -> auth_info conn, "User updated successfully", user_path(conn, :show, user) {:error, changeset} -> render(conn, "edit.html", user: user, changeset: changeset) end end def delete(%Plug.Conn{assigns: %{current_user: user}} = conn, _params) do Repo.delete!(user) configure_session(conn, drop: true) |> auth_info("User deleted successfully", page_path(conn, :index)) end <% end %> end