add get-remote-pdu-list
debug admin command
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
a260308bc9
commit
afd72f23da
2 changed files with 44 additions and 2 deletions
|
@ -100,6 +100,32 @@ pub(super) async fn get_pdu(_body: Vec<&str>, event_id: Box<EventId>) -> Result<
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) async fn get_remote_pdu_list(
|
||||||
|
body: Vec<&str>, server: Box<ServerName>, force: bool,
|
||||||
|
) -> Result<RoomMessageEventContent> {
|
||||||
|
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
||||||
|
let list = body
|
||||||
|
.clone()
|
||||||
|
.drain(1..body.len() - 1)
|
||||||
|
.filter_map(|pdu| EventId::parse(pdu).ok())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
for pdu in list {
|
||||||
|
if force {
|
||||||
|
_ = get_remote_pdu(Vec::new(), Box::from(pdu), server.clone()).await;
|
||||||
|
} else {
|
||||||
|
get_remote_pdu(Vec::new(), Box::from(pdu), server.clone()).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok(RoomMessageEventContent::text_plain("Fetched list of remote PDUs."));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) async fn get_remote_pdu(
|
pub(super) async fn get_remote_pdu(
|
||||||
_body: Vec<&str>, event_id: Box<EventId>, server: Box<ServerName>,
|
_body: Vec<&str>, event_id: Box<EventId>, server: Box<ServerName>,
|
||||||
) -> Result<RoomMessageEventContent> {
|
) -> Result<RoomMessageEventContent> {
|
||||||
|
|
|
@ -2,8 +2,8 @@ use clap::Subcommand;
|
||||||
use ruma::{events::room::message::RoomMessageEventContent, EventId, RoomId, ServerName};
|
use ruma::{events::room::message::RoomMessageEventContent, EventId, RoomId, ServerName};
|
||||||
|
|
||||||
use self::debug_commands::{
|
use self::debug_commands::{
|
||||||
change_log_level, force_device_list_updates, get_auth_chain, get_pdu, get_remote_pdu, get_room_state, parse_pdu,
|
change_log_level, force_device_list_updates, get_auth_chain, get_pdu, get_remote_pdu, get_remote_pdu_list,
|
||||||
ping, sign_json, verify_json,
|
get_room_state, parse_pdu, ping, sign_json, verify_json,
|
||||||
};
|
};
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
|
|
||||||
|
@ -45,6 +45,18 @@ pub(crate) enum DebugCommand {
|
||||||
server: Box<ServerName>,
|
server: Box<ServerName>,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// Same as `get-remote-pdu` but accepts a codeblock newline delimited list
|
||||||
|
/// of PDUs and a single server to fetch from
|
||||||
|
GetRemotePduList {
|
||||||
|
/// Argument for us to attempt to fetch all the events from the
|
||||||
|
/// specified remote server.
|
||||||
|
server: Box<ServerName>,
|
||||||
|
|
||||||
|
/// If set, ignores errors, else stops at the first error/failure.
|
||||||
|
#[arg(short, long)]
|
||||||
|
force: bool,
|
||||||
|
},
|
||||||
|
|
||||||
/// - Gets all the room state events for the specified room.
|
/// - Gets all the room state events for the specified room.
|
||||||
///
|
///
|
||||||
/// This is functionally equivalent to `GET
|
/// This is functionally equivalent to `GET
|
||||||
|
@ -122,5 +134,9 @@ pub(crate) async fn process(command: DebugCommand, body: Vec<&str>) -> Result<Ro
|
||||||
} => change_log_level(body, filter, reset).await?,
|
} => change_log_level(body, filter, reset).await?,
|
||||||
DebugCommand::SignJson => sign_json(body).await?,
|
DebugCommand::SignJson => sign_json(body).await?,
|
||||||
DebugCommand::VerifyJson => verify_json(body).await?,
|
DebugCommand::VerifyJson => verify_json(body).await?,
|
||||||
|
DebugCommand::GetRemotePduList {
|
||||||
|
server,
|
||||||
|
force,
|
||||||
|
} => get_remote_pdu_list(body, server, force).await?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue