user creation admin api will create multiple users
[akkoma] / lib / pleroma / web / admin_api / admin_api_controller.ex
index 711f233a6d3d2b3b1bde7e9dd5a59eba1ed96b6d..6048ed35b70cfbefbfae88319c375eea633b51c5 100644 (file)
@@ -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)
 
-    changeset = User.register_changeset(%User{}, user_data, confirmed: true)
-    {:ok, user} = User.register(changeset)
+        case User.register(changeset) do
+          {:ok, user} ->
+            AccountView.render("created.json", %{user: user})
+
+          {: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
@@ -101,7 +108,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
     search_params = %{
       query: params["query"],
       page: page,
-      page_size: page_size
+      page_size: page_size,
+      tags: params["tags"],
+      name: params["name"],
+      email: params["email"]
     }
 
     with {:ok, users, count} <- Search.user(Map.merge(search_params, filters)),
@@ -116,11 +126,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
            )
   end
 
-  @filters ~w(local external active deactivated)
+  @filters ~w(local external active deactivated is_admin is_moderator)
 
+  @spec maybe_parse_filters(String.t()) :: %{required(String.t()) => true} | %{}
   defp maybe_parse_filters(filters) when is_nil(filters) or filters == "", do: %{}
 
-  @spec maybe_parse_filters(String.t()) :: %{required(String.t()) => true} | %{}
   defp maybe_parse_filters(filters) do
     filters
     |> String.split(",")