+ start_pleroma()
+
+ with {:ok, val} <- options[:expires_at],
+ options = Map.put(options, :expires_at, val),
+ {:ok, invite} <- UserInviteToken.create_invite(options) do
+ shell_info("Generated user invite token " <> String.replace(invite.invite_type, "_", " "))
+
+ url =
+ Pleroma.Web.Router.Helpers.redirect_url(
+ Pleroma.Web.Endpoint,
+ :registration_page,
+ invite.token
+ )
+
+ IO.puts(url)
+ else
+ error ->
+ shell_error("Could not create invite token: #{inspect(error)}")
+ end
+ end
+
+ def run(["invites"]) do
+ start_pleroma()
+
+ shell_info("Invites list:")
+
+ UserInviteToken.list_invites()
+ |> Enum.each(fn invite ->
+ expire_info =
+ with expires_at when not is_nil(expires_at) <- invite.expires_at do
+ " | Expires at: #{Date.to_string(expires_at)}"
+ end
+
+ using_info =
+ with max_use when not is_nil(max_use) <- invite.max_use do
+ " | Max use: #{max_use} Left use: #{max_use - invite.uses}"
+ end
+
+ shell_info(
+ "ID: #{invite.id} | Token: #{invite.token} | Token type: #{invite.invite_type} | Used: #{
+ invite.used
+ }#{expire_info}#{using_info}"
+ )
+ end)
+ end
+
+ def run(["revoke_invite", token]) do
+ start_pleroma()
+
+ with {:ok, invite} <- UserInviteToken.find_by_token(token),
+ {:ok, _} <- UserInviteToken.update_invite(invite, %{used: true}) do
+ shell_info("Invite for token #{token} was revoked.")
+ else
+ _ -> shell_error("No invite found with token #{token}")
+ end
+ end
+
+ def run(["delete_activities", nickname]) do
+ start_pleroma()
+
+ with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do
+ {:ok, _} = User.delete_user_activities(user)
+ shell_info("User #{nickname} statuses deleted.")
+ else
+ _ ->
+ shell_error("No local user #{nickname}")
+ 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()
+
+ with %User{} = user <- User.get_cached_by_nickname(nickname) do
+ {:ok, user} = User.toggle_confirmation(user)
+
+ message = if user.info.confirmation_pending, do: "needs", else: "doesn't need"
+
+ shell_info("#{nickname} #{message} confirmation.")
+ else
+ _ ->
+ shell_error("No local user #{nickname}")
+ end
+ end
+
+ def run(["sign_out", nickname]) do
+ start_pleroma()
+
+ with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do
+ OAuth.Token.delete_user_tokens(user)
+ OAuth.Authorization.delete_user_authorizations(user)
+
+ shell_info("#{nickname} signed out from all apps.")
+ else
+ _ ->
+ shell_error("No local user #{nickname}")
+ end
+ end
+
+ defp set_moderator(user, value) do