From 65fbb80145bb003dd9ac2f390e1e01933aa9691d Mon Sep 17 00:00:00 2001
From: strawberry <strawberry@puppygock.gay>
Date: Mon, 10 Jun 2024 21:14:18 -0400
Subject: [PATCH] adminroom: leave all rooms by default on manual deactivations

Signed-off-by: strawberry <strawberry@puppygock.gay>
---
 src/admin/user/mod.rs           | 22 ++++++++++++----------
 src/admin/user/user_commands.rs | 10 ++++++----
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/admin/user/mod.rs b/src/admin/user/mod.rs
index e715daf04..e11429deb 100644
--- a/src/admin/user/mod.rs
+++ b/src/admin/user/mod.rs
@@ -26,11 +26,11 @@ pub(crate) enum UserCommand {
 
 	/// - Deactivate a user
 	///
-	/// User will not be removed from all rooms by default.
-	/// Use --leave-rooms to force the user to leave all rooms
+	/// User will be removed from all rooms by default.
+	/// Use --no-leave-rooms to not leave all rooms by default.
 	Deactivate {
 		#[arg(short, long)]
-		leave_rooms: bool,
+		no_leave_rooms: bool,
 		user_id: String,
 	},
 
@@ -38,8 +38,10 @@ pub(crate) enum UserCommand {
 	///
 	/// Recommended to use in conjunction with list-local-users.
 	///
-	/// Users will not be removed from joined rooms by default.
-	/// Can be overridden with --leave-rooms OR the --force flag.
+	/// Users will be removed from joined rooms by default.
+	///
+	/// Can be overridden with --no-leave-rooms.
+	///
 	/// Removing a mass amount of users from a room may cause a significant
 	/// amount of leave events. The time to leave rooms may depend significantly
 	/// on joined rooms and servers.
@@ -49,7 +51,7 @@ pub(crate) enum UserCommand {
 	DeactivateAll {
 		#[arg(short, long)]
 		/// Remove users from their joined rooms
-		leave_rooms: bool,
+		no_leave_rooms: bool,
 		#[arg(short, long)]
 		/// Also deactivate admin accounts and will assume leave all rooms too
 		force: bool,
@@ -99,16 +101,16 @@ pub(crate) async fn process(command: UserCommand, body: Vec<&str>) -> Result<Roo
 			password,
 		} => create(body, username, password).await?,
 		UserCommand::Deactivate {
-			leave_rooms,
+			no_leave_rooms,
 			user_id,
-		} => deactivate(body, leave_rooms, user_id).await?,
+		} => deactivate(body, no_leave_rooms, user_id).await?,
 		UserCommand::ResetPassword {
 			username,
 		} => reset_password(body, username).await?,
 		UserCommand::DeactivateAll {
-			leave_rooms,
+			no_leave_rooms,
 			force,
-		} => deactivate_all(body, leave_rooms, force).await?,
+		} => deactivate_all(body, no_leave_rooms, force).await?,
 		UserCommand::ListJoinedRooms {
 			user_id,
 		} => list_joined_rooms(body, user_id).await?,
diff --git a/src/admin/user/user_commands.rs b/src/admin/user/user_commands.rs
index 9bd963dd0..8b90894e9 100644
--- a/src/admin/user/user_commands.rs
+++ b/src/admin/user/user_commands.rs
@@ -128,7 +128,7 @@ pub(crate) async fn create(
 }
 
 pub(crate) async fn deactivate(
-	_body: Vec<&str>, leave_rooms: bool, user_id: String,
+	_body: Vec<&str>, no_leave_rooms: bool, user_id: String,
 ) -> Result<RoomMessageEventContent> {
 	// Validate user id
 	let user_id = parse_local_user_id(&user_id)?;
@@ -144,7 +144,7 @@ pub(crate) async fn deactivate(
 
 	services().users.deactivate_account(&user_id)?;
 
-	if leave_rooms {
+	if !no_leave_rooms {
 		services()
 			.admin
 			.send_message(RoomMessageEventContent::text_plain(format!(
@@ -185,7 +185,9 @@ pub(crate) async fn reset_password(_body: Vec<&str>, username: String) -> Result
 	}
 }
 
-pub(crate) async fn deactivate_all(body: Vec<&str>, leave_rooms: bool, force: bool) -> Result<RoomMessageEventContent> {
+pub(crate) async fn deactivate_all(
+	body: Vec<&str>, no_leave_rooms: bool, force: bool,
+) -> Result<RoomMessageEventContent> {
 	if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
 		return Ok(RoomMessageEventContent::text_plain(
 			"Expected code block in command body. Add --help for details.",
@@ -245,7 +247,7 @@ pub(crate) async fn deactivate_all(body: Vec<&str>, leave_rooms: bool, force: bo
 		match services().users.deactivate_account(&user_id) {
 			Ok(()) => {
 				deactivation_count = deactivation_count.saturating_add(1);
-				if leave_rooms || force {
+				if !no_leave_rooms {
 					info!("Forcing user {user_id} to leave all rooms apart of deactivate-all");
 					leave_all_rooms(&user_id).await;
 				}
-- 
GitLab