aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSachin Joshi <satchin.joshi@gmail.com>2019-05-17 12:20:31 +0545
committerSachin Joshi <satchin.joshi@gmail.com>2019-05-17 12:21:58 +0545
commit5c028b8f92aacb296afbd59130d848883f0c3a10 (patch)
tree51c96714c436b9ed9fb98250b9d7dd319c72b7e3 /lib
parent62516be9c462ca206163eaf7822f9ee5c2470453 (diff)
downloadpleroma-5c028b8f92aacb296afbd59130d848883f0c3a10.tar.gz
user creation admin api will create multiple users
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/admin_api/admin_api_controller.ex37
-rw-r--r--lib/pleroma/web/admin_api/views/account_view.ex46
-rw-r--r--lib/pleroma/web/router.ex2
3 files changed, 69 insertions, 16 deletions
diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex
index e00b33aba..6048ed35b 100644
--- a/lib/pleroma/web/admin_api/admin_api_controller.ex
+++ b/lib/pleroma/web/admin_api/admin_api_controller.ex
@@ -46,24 +46,31 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|> json("ok")
end
- def user_create(
- conn,
- %{"nickname" => nickname, "email" => email, "password" => password}
- ) do
- user_data = %{
- nickname: nickname,
- name: nickname,
- email: email,
- password: password,
- password_confirmation: password,
- bio: "."
- }
+ def users_create(conn, %{"users" => users}) do
+ result =
+ Enum.map(users, fn %{"nickname" => nickname, "email" => email, "password" => password} ->
+ user_data = %{
+ nickname: nickname,
+ name: nickname,
+ email: email,
+ password: password,
+ password_confirmation: password,
+ bio: "."
+ }
+
+ changeset = User.register_changeset(%User{}, user_data, need_confirmation: false)
+
+ case User.register(changeset) do
+ {:ok, user} ->
+ AccountView.render("created.json", %{user: user})
- changeset = User.register_changeset(%User{}, user_data, need_confirmation: false)
- {:ok, user} = User.register(changeset)
+ {:error, changeset} ->
+ AccountView.render("create-error.json", %{changeset: changeset})
+ end
+ end)
conn
- |> json(user.nickname)
+ |> json(result)
end
def user_show(conn, %{"nickname" => nickname}) do
diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex
index 28bb667d8..e1825c5f1 100644
--- a/lib/pleroma/web/admin_api/views/account_view.ex
+++ b/lib/pleroma/web/admin_api/views/account_view.ex
@@ -44,4 +44,50 @@ defmodule Pleroma.Web.AdminAPI.AccountView do
invites: render_many(invites, AccountView, "invite.json", as: :invite)
}
end
+
+ def render("created.json", %{user: user}) do
+ %{
+ type: "success",
+ code: 201,
+ data: %{
+ nickname: user.nickname,
+ email: user.email
+ }
+ }
+ end
+
+ def render("create-error.json", %{changeset: %Ecto.Changeset{changes: changes, errors: errors}}) do
+ %{
+ type: "error",
+ code: 409,
+ error: parse_error(errors),
+ data: %{
+ nickname: Map.get(changes, :nickname),
+ email: Map.get(changes, :email)
+ }
+ }
+ end
+
+ defp parse_error([]), do: ""
+
+ defp parse_error(errors) do
+ ## when nickname is duplicate ap_id constraint error is raised
+ nickname_error = Keyword.get(errors, :nickname) || Keyword.get(errors, :ap_id)
+ email_error = Keyword.get(errors, :email)
+ password_error = Keyword.get(errors, :password)
+
+ cond do
+ nickname_error ->
+ "nickname #{elem(nickname_error, 0)}"
+
+ email_error ->
+ "email #{elem(email_error, 0)}"
+
+ password_error ->
+ "password #{elem(password_error, 0)}"
+
+ true ->
+ ""
+ end
+ end
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 7fef82f82..bbc2fda9b 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -156,7 +156,7 @@ defmodule Pleroma.Web.Router do
post("/user", AdminAPIController, :user_create)
delete("/users", AdminAPIController, :user_delete)
- post("/users", AdminAPIController, :user_create)
+ post("/users", AdminAPIController, :users_create)
patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation)
put("/users/tag", AdminAPIController, :tag_users)
delete("/users/tag", AdminAPIController, :untag_users)