Add CLI list users command
authorAlex Schroeder <alex@gnu.org>
Sun, 17 Nov 2019 20:58:30 +0000 (21:58 +0100)
committerAlex Schroeder <alex@gnu.org>
Thu, 21 Nov 2019 20:07:06 +0000 (21:07 +0100)
CHANGELOG.md
docs/administration/CLI_tasks/user.md
lib/mix/tasks/pleroma/user.ex

index 1d9b97f0b88c00c955c6338ab0f141c543ce7a5b..e237ec7317517bc09491291399bbb0b70da65c93 100644 (file)
@@ -41,6 +41,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Authentication: Added rate limit for password-authorized actions / login existence checks
 - Static Frontend: Add the ability to render user profiles and notices server-side without requiring JS app.
 - Mix task to re-count statuses for all users (`mix pleroma.count_statuses`)
+- Mix task to list all users (`mix pleroma.user list`)
 - Support for `X-Forwarded-For` and similar HTTP headers which used by reverse proxies to pass a real user IP address to the backend. Must not be enabled unless your instance is behind at least one reverse proxy (such as Nginx, Apache HTTPD or Varnish Cache).
 - MRF: New module which handles incoming posts based on their age. By default, all incoming posts that are older than 2 days will be unlisted and not shown to their followers.
 <details>
index cf120f2c9fb91fc72f727ab2fb9183a2c25cf8b4..96b2d9e6a3326fafcd5bf54e0cceeaa88a288bf0 100644 (file)
@@ -15,6 +15,11 @@ $PREFIX new <nickname> <email> [<options>]
 - `--admin`/`--no-admin` - whether the user should be an admin
 - `-y`, `--assume-yes`/`--no-assume-yes` - whether to assume yes to all questions
 
+## List local users
+```sh
+$PREFIX list
+```
+
 ## Generate an invite link
 ```sh
 $PREFIX invite [<options>]
index 4e3b80db3040ace90fd6c5a39a9f011220390ab5..bc8eacda82aa3ac23774605db4d52d3f98cdcc1c 100644 (file)
@@ -364,6 +364,24 @@ defmodule Mix.Tasks.Pleroma.User do
     end
   end
 
+  def run(["list"]) do
+    start_pleroma()
+
+    Pleroma.User.Query.build(%{local: true})
+    |> Pleroma.RepoStreamer.chunk_stream(500)
+    |> Stream.each(fn users ->
+      users
+      |> Enum.each(fn user ->
+        shell_info(
+          "#{user.nickname} moderator: #{user.info.is_moderator}, admin: #{user.info.is_admin}, locked: #{
+            user.info.locked
+          }, deactivated: #{user.info.deactivated}"
+        )
+      end)
+    end)
+    |> Stream.run()
+  end
+
   defp set_moderator(user, value) do
     {:ok, user} =
       user