improve some user admin cmd checks
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
404bdd1db5
commit
47c43769d7
1 changed files with 37 additions and 6 deletions
|
@ -1,7 +1,8 @@
|
||||||
use std::{fmt::Write as _, sync::Arc};
|
use std::{fmt::Write as _, sync::Arc};
|
||||||
|
|
||||||
use clap::Subcommand;
|
use clap::Subcommand;
|
||||||
use ruma::{events::room::message::RoomMessageEventContent, UserId};
|
use itertools::Itertools;
|
||||||
|
use ruma::{events::room::message::RoomMessageEventContent, OwnedRoomId, UserId};
|
||||||
use tracing::{error, info, warn};
|
use tracing::{error, info, warn};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -188,6 +189,16 @@ pub(crate) async fn process(command: UserCommand, body: Vec<&str>) -> Result<Roo
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// don't deactivate the conduit service account
|
||||||
|
if user_id
|
||||||
|
== UserId::parse_with_server_name("conduit", services().globals.server_name())
|
||||||
|
.expect("conduit user exists")
|
||||||
|
{
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Not allowed to deactivate the Conduit service account.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
if services().users.exists(&user_id)? {
|
if services().users.exists(&user_id)? {
|
||||||
RoomMessageEventContent::text_plain(format!("Making {user_id} leave all rooms before deactivation..."));
|
RoomMessageEventContent::text_plain(format!("Making {user_id} leave all rooms before deactivation..."));
|
||||||
|
|
||||||
|
@ -294,6 +305,19 @@ pub(crate) async fn process(command: UserCommand, body: Vec<&str>) -> Result<Roo
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// don't deactivate the conduit service account
|
||||||
|
if user_id
|
||||||
|
== UserId::parse_with_server_name("conduit", services().globals.server_name())
|
||||||
|
.expect("conduit user exists")
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// user does not exist on our server
|
||||||
|
if !services().users.exists(user_id)? {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if services().users.deactivate_account(user_id).is_ok() {
|
if services().users.deactivate_account(user_id).is_ok() {
|
||||||
deactivation_count += 1;
|
deactivation_count += 1;
|
||||||
}
|
}
|
||||||
|
@ -330,13 +354,20 @@ pub(crate) async fn process(command: UserCommand, body: Vec<&str>) -> Result<Roo
|
||||||
return Ok(RoomMessageEventContent::text_plain("User does not belong to our server."));
|
return Ok(RoomMessageEventContent::text_plain("User does not belong to our server."));
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut rooms = vec![]; // room ID, members joined, room name
|
if !services().users.exists(&user_id)? {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain("User does not exist on this server."));
|
||||||
for room_id in services().rooms.state_cache.rooms_joined(&user_id) {
|
|
||||||
let room_id = room_id?;
|
|
||||||
rooms.push(get_room_info(&room_id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut rooms: Vec<(OwnedRoomId, u64, String)> = services()
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.rooms_joined(&user_id)
|
||||||
|
.filter_map(Result::ok)
|
||||||
|
.map(|room_id| get_room_info(&room_id))
|
||||||
|
.sorted_unstable()
|
||||||
|
.dedup()
|
||||||
|
.collect();
|
||||||
|
|
||||||
if rooms.is_empty() {
|
if rooms.is_empty() {
|
||||||
return Ok(RoomMessageEventContent::text_plain("User is not in any rooms."));
|
return Ok(RoomMessageEventContent::text_plain("User is not in any rooms."));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue