chore: Add double-lock flag

This commit is contained in:
timedout
2026-02-14 14:24:13 +00:00
parent 5ad653ab86
commit 2919c8e636
+23 -2
View File
@@ -85,7 +85,7 @@ pub enum RoomModerationCommand {
/// Finally, it will send a room tombstone event, which will effectively /// Finally, it will send a room tombstone event, which will effectively
/// make the room unusable on most clients even if the room state resets. /// make the room unusable on most clients even if the room state resets.
/// ///
/// This effectively will make the room unusable, unusable, and remove /// This effectively will make the room unusable, unjoinable, and removes
/// everyone from it. This is as close to a "shutdown" as you can get with /// everyone from it. This is as close to a "shutdown" as you can get with
/// federation. /// federation.
ShutdownRoom { ShutdownRoom {
@@ -103,6 +103,12 @@ pub enum RoomModerationCommand {
/// in the event users manage to rejoin. /// in the event users manage to rejoin.
#[arg(long)] #[arg(long)]
redact: bool, redact: bool,
///
#[arg(long)]
yes_i_am_sure_i_want_to_irreversibly_shutdown_this_room_destroying_it_in_the_process:
bool,
/// The room in the format of `!roomid:example.com` or a room alias in /// The room in the format of `!roomid:example.com` or a room alias in
/// the format of `#roomalias:example.com` /// the format of `#roomalias:example.com`
room: OwnedRoomOrAliasId, room: OwnedRoomOrAliasId,
@@ -726,7 +732,13 @@ async fn takeover(&self, force: bool, room: OwnedRoomOrAliasId) -> Result {
} }
#[admin_command] #[admin_command]
async fn shutdown_room(&self, force: bool, redact: bool, room: OwnedRoomOrAliasId) -> Result { async fn shutdown_room(
&self,
force: bool,
redact: bool,
yes_i_am_sure_i_want_to_irreversibly_shutdown_this_room_destroying_it_in_the_process: bool,
room: OwnedRoomOrAliasId,
) -> Result {
let room_id = if room.is_room_id() { let room_id = if room.is_room_id() {
let room_id = match RoomId::parse(&room) { let room_id = match RoomId::parse(&room) {
| Ok(room_id) => room_id, | Ok(room_id) => room_id,
@@ -779,6 +791,15 @@ async fn shutdown_room(&self, force: bool, redact: bool, room: OwnedRoomOrAliasI
); );
}; };
if !yes_i_am_sure_i_want_to_irreversibly_shutdown_this_room_destroying_it_in_the_process {
return Err!(
"This command is irreversible and will immediately shutdown the room, making it \
completely unusable if successful. If you are sure you want to do this, add the \
flag --yes-i-am-sure-i-want-to-irreversibly-shutdown-this-room-destroying-it-in-the-process \
to your command."
);
}
let mut power_levels: RoomPowerLevelsEventContent = match self let mut power_levels: RoomPowerLevelsEventContent = match self
.services .services
.rooms .rooms