Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
[akkoma] / lib / mix / tasks / pleroma / user.ex
index ab158f57ee66b118d9623d0f480a7cf6aadf750b..3f290cf4224969452804dcd98742b508761a1bf6 100644 (file)
@@ -31,8 +31,8 @@ defmodule Mix.Tasks.Pleroma.User do
       mix pleroma.user invite [OPTION...]
 
     Options:
-    - `--expires_at DATE` - last day on which token is active (e.g. "2019-04-05")
-    - `--max_use NUMBER` - maximum numbers of token uses
+    - `--expires-at DATE` - last day on which token is active (e.g. "2019-04-05")
+    - `--max-use NUMBER` - maximum numbers of token uses
 
   ## List generated invites
 
@@ -62,6 +62,10 @@ defmodule Mix.Tasks.Pleroma.User do
 
       mix pleroma.user unsubscribe NICKNAME
 
+  ## Unsubscribe local users from an entire instance and deactivate all accounts
+
+      mix pleroma.user unsubscribe_all_from_instance INSTANCE
+
   ## Create a password reset link.
 
       mix pleroma.user reset_password NICKNAME
@@ -204,9 +208,9 @@ defmodule Mix.Tasks.Pleroma.User do
 
       IO.puts(
         "URL: #{
-          Pleroma.Web.Router.Helpers.util_url(
+          Pleroma.Web.Router.Helpers.reset_password_url(
             Pleroma.Web.Endpoint,
-            :show_password_reset,
+            :reset,
             token.token
           )
         }"
@@ -246,6 +250,20 @@ defmodule Mix.Tasks.Pleroma.User do
     end
   end
 
+  def run(["unsubscribe_all_from_instance", instance]) do
+    start_pleroma()
+
+    Pleroma.User.Query.build(%{nickname: "@#{instance}"})
+    |> Pleroma.RepoStreamer.chunk_stream(500)
+    |> Stream.each(fn users ->
+      users
+      |> Enum.each(fn user ->
+        run(["unsubscribe", user.nickname])
+      end)
+    end)
+    |> Stream.run()
+  end
+
   def run(["set", nickname | rest]) do
     start_pleroma()
 
@@ -395,6 +413,35 @@ defmodule Mix.Tasks.Pleroma.User do
     end
   end
 
+  def run(["change_email", nickname, email]) do
+    start_pleroma()
+    with %User{} = user <- User.get_cached_by_nickname(nickname) do
+       user
+       |> User.update_changeset(%{"email" => email})
+       |> User.update_and_set_cache()
+       shell_info("#{nickname}'s email updated")
+    end
+  end
+
+  def run(["show", nickname]) do
+    start_pleroma()
+    nickname
+    |> User.get_cached_by_nickname()
+    |> IO.inspect
+  end
+
+  def run(["send_confirmation", nickname]) do
+    start_pleroma()
+    with %User{} = user <- User.get_cached_by_nickname(nickname) do
+       user
+       |> Pleroma.Emails.UserEmail.account_confirmation_email()
+       |> IO.inspect
+       |> Pleroma.Emails.Mailer.deliver!()
+       shell_info("#{nickname}'s email sent")
+    end
+  end
+  
+
   def run(["toggle_confirmed", nickname]) do
     start_pleroma()