mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-10 14:32:50 +02:00
Compare commits
4 commits
d970df5fd2
...
9e62e66ae4
Author | SHA1 | Date | |
---|---|---|---|
|
9e62e66ae4 | ||
|
76b93e252d | ||
|
66d479e2eb | ||
|
241371463e |
7 changed files with 78 additions and 28 deletions
|
@ -21,6 +21,7 @@ This document contains the help content for the `admin` command-line program.
|
|||
* [`admin users list-joined-rooms`↴](#admin-users-list-joined-rooms)
|
||||
* [`admin users force-join-room`↴](#admin-users-force-join-room)
|
||||
* [`admin users force-leave-room`↴](#admin-users-force-leave-room)
|
||||
* [`admin users force-leave-remote-room`↴](#admin-users-force-leave-remote-room)
|
||||
* [`admin users force-demote`↴](#admin-users-force-demote)
|
||||
* [`admin users make-user-admin`↴](#admin-users-make-user-admin)
|
||||
* [`admin users put-room-tag`↴](#admin-users-put-room-tag)
|
||||
|
@ -295,6 +296,7 @@ You can find the ID using the `list-appservices` command.
|
|||
* `list-joined-rooms` — - Lists all the rooms (local and remote) that the specified user is joined in
|
||||
* `force-join-room` — - Manually join a local user to a room
|
||||
* `force-leave-room` — - Manually leave a local user from a room
|
||||
* `force-leave-remote-room` — - Manually leave a remote room for a local user
|
||||
* `force-demote` — - Forces the specified user to drop their power levels to the room default, if their permissions allow and the auth check permits
|
||||
* `make-user-admin` — - Grant server-admin privileges to a user
|
||||
* `put-room-tag` — - Puts a room tag for the specified user and room ID
|
||||
|
@ -449,6 +451,19 @@ Reverses the effects of the `suspend` command, allowing the user to send message
|
|||
|
||||
|
||||
|
||||
## `admin users force-leave-remote-room`
|
||||
|
||||
- Manually leave a remote room for a local user
|
||||
|
||||
**Usage:** `admin users force-leave-remote-room <USER_ID> <ROOM_ID>`
|
||||
|
||||
###### **Arguments:**
|
||||
|
||||
* `<USER_ID>`
|
||||
* `<ROOM_ID>`
|
||||
|
||||
|
||||
|
||||
## `admin users force-demote`
|
||||
|
||||
- Forces the specified user to drop their power levels to the room default, if their permissions allow and the auth check permits
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
use std::{collections::BTreeMap, fmt::Write as _};
|
||||
|
||||
use api::client::{
|
||||
full_user_deactivate, join_room_by_id_helper, leave_all_rooms, leave_room, update_avatar_url,
|
||||
update_displayname,
|
||||
full_user_deactivate, join_room_by_id_helper, leave_all_rooms, leave_room, remote_leave_room,
|
||||
update_avatar_url, update_displayname,
|
||||
};
|
||||
use conduwuit::{
|
||||
Err, Result, debug, debug_warn, error, info, is_equal_to,
|
||||
|
@ -926,3 +926,29 @@ pub(super) async fn redact_event(&self, event_id: OwnedEventId) -> Result {
|
|||
))
|
||||
.await
|
||||
}
|
||||
|
||||
#[admin_command]
|
||||
pub(super) async fn force_leave_remote_room(
|
||||
&self,
|
||||
user_id: String,
|
||||
room_id: OwnedRoomOrAliasId,
|
||||
) -> Result {
|
||||
let user_id = parse_local_user_id(self.services, &user_id)?;
|
||||
let (room_id, _) = self
|
||||
.services
|
||||
.rooms
|
||||
.alias
|
||||
.resolve_with_servers(&room_id, None)
|
||||
.await?;
|
||||
|
||||
assert!(
|
||||
self.services.globals.user_is_local(&user_id),
|
||||
"Parsed user_id must be a local user"
|
||||
);
|
||||
remote_leave_room(self.services, &user_id, &room_id, None)
|
||||
.boxed()
|
||||
.await?;
|
||||
|
||||
self.write_str(&format!("{user_id} has been joined to {room_id}.",))
|
||||
.await
|
||||
}
|
||||
|
|
|
@ -103,6 +103,12 @@ pub enum UserCommand {
|
|||
room_id: OwnedRoomOrAliasId,
|
||||
},
|
||||
|
||||
/// - Manually leave a remote room for a local user.
|
||||
ForceLeaveRemoteRoom {
|
||||
user_id: String,
|
||||
room_id: OwnedRoomOrAliasId,
|
||||
},
|
||||
|
||||
/// - Forces the specified user to drop their power levels to the room
|
||||
/// default, if their permissions allow and the auth check permits
|
||||
ForceDemote {
|
||||
|
|
|
@ -156,31 +156,34 @@ pub(crate) async fn join_room_by_id_or_alias_route(
|
|||
.await?;
|
||||
|
||||
let mut servers = body.via.clone();
|
||||
servers.extend(
|
||||
services
|
||||
.rooms
|
||||
.state_cache
|
||||
.servers_invite_via(&room_id)
|
||||
.map(ToOwned::to_owned)
|
||||
.collect::<Vec<_>>()
|
||||
.await,
|
||||
);
|
||||
if servers.is_empty() {
|
||||
debug!("No via servers provided for join, injecting some.");
|
||||
servers.extend(
|
||||
services
|
||||
.rooms
|
||||
.state_cache
|
||||
.servers_invite_via(&room_id)
|
||||
.map(ToOwned::to_owned)
|
||||
.collect::<Vec<_>>()
|
||||
.await,
|
||||
);
|
||||
|
||||
servers.extend(
|
||||
services
|
||||
.rooms
|
||||
.state_cache
|
||||
.invite_state(sender_user, &room_id)
|
||||
.await
|
||||
.unwrap_or_default()
|
||||
.iter()
|
||||
.filter_map(|event| event.get_field("sender").ok().flatten())
|
||||
.filter_map(|sender: &str| UserId::parse(sender).ok())
|
||||
.map(|user| user.server_name().to_owned()),
|
||||
);
|
||||
servers.extend(
|
||||
services
|
||||
.rooms
|
||||
.state_cache
|
||||
.invite_state(sender_user, &room_id)
|
||||
.await
|
||||
.unwrap_or_default()
|
||||
.iter()
|
||||
.filter_map(|event| event.get_field("sender").ok().flatten())
|
||||
.filter_map(|sender: &str| UserId::parse(sender).ok())
|
||||
.map(|user| user.server_name().to_owned()),
|
||||
);
|
||||
|
||||
if let Some(server) = room_id.server_name() {
|
||||
servers.push(server.to_owned());
|
||||
if let Some(server) = room_id.server_name() {
|
||||
servers.push(server.to_owned());
|
||||
}
|
||||
}
|
||||
|
||||
servers.sort_unstable();
|
||||
|
|
|
@ -215,7 +215,7 @@ pub async fn leave_room(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
async fn remote_leave_room(
|
||||
pub async fn remote_leave_room(
|
||||
services: &Services,
|
||||
user_id: &UserId,
|
||||
room_id: &RoomId,
|
||||
|
|
|
@ -29,7 +29,7 @@ pub(crate) use self::{
|
|||
};
|
||||
pub use self::{
|
||||
join::join_room_by_id_helper,
|
||||
leave::{leave_all_rooms, leave_room},
|
||||
leave::{leave_all_rooms, leave_room, remote_leave_room},
|
||||
};
|
||||
use crate::{Ruma, client::full_user_deactivate};
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ pub(super) use keys::*;
|
|||
pub(super) use media::*;
|
||||
pub(super) use media_legacy::*;
|
||||
pub(super) use membership::*;
|
||||
pub use membership::{join_room_by_id_helper, leave_all_rooms, leave_room};
|
||||
pub use membership::{join_room_by_id_helper, leave_all_rooms, leave_room, remote_leave_room};
|
||||
pub(super) use message::*;
|
||||
pub(super) use openid::*;
|
||||
pub(super) use presence::*;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue