move sign_json and verify_json admin commands to debug
these are purely debug-related commands Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
9b7dab3a57
commit
2271a56adc
4 changed files with 70 additions and 73 deletions
|
@ -337,3 +337,56 @@ pub(super) async fn change_log_level(
|
||||||
|
|
||||||
Ok(RoomMessageEventContent::text_plain("No log level was specified."))
|
Ok(RoomMessageEventContent::text_plain("No log level was specified."))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) async fn sign_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
|
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
||||||
|
let string = body[1..body.len() - 1].join("\n");
|
||||||
|
match serde_json::from_str(&string) {
|
||||||
|
Ok(mut value) => {
|
||||||
|
ruma::signatures::sign_json(
|
||||||
|
services().globals.server_name().as_str(),
|
||||||
|
services().globals.keypair(),
|
||||||
|
&mut value,
|
||||||
|
)
|
||||||
|
.expect("our request json is what ruma expects");
|
||||||
|
let json_text = serde_json::to_string_pretty(&value).expect("canonical json is valid json");
|
||||||
|
Ok(RoomMessageEventContent::text_plain(json_text))
|
||||||
|
},
|
||||||
|
Err(e) => Ok(RoomMessageEventContent::text_plain(format!("Invalid json: {e}"))),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) async fn verify_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
|
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
||||||
|
let string = body[1..body.len() - 1].join("\n");
|
||||||
|
match serde_json::from_str(&string) {
|
||||||
|
Ok(value) => {
|
||||||
|
let pub_key_map = RwLock::new(BTreeMap::new());
|
||||||
|
|
||||||
|
services()
|
||||||
|
.rooms
|
||||||
|
.event_handler
|
||||||
|
.fetch_required_signing_keys([&value], &pub_key_map)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
let pub_key_map = pub_key_map.read().await;
|
||||||
|
match ruma::signatures::verify_json(&pub_key_map, &value) {
|
||||||
|
Ok(()) => Ok(RoomMessageEventContent::text_plain("Signature correct")),
|
||||||
|
Err(e) => Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
|
"Signature verification failed: {e}"
|
||||||
|
))),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => Ok(RoomMessageEventContent::text_plain(format!("Invalid json: {e}"))),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ use ruma::{events::room::message::RoomMessageEventContent, EventId, RoomId, Serv
|
||||||
|
|
||||||
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_room_state, parse_pdu,
|
||||||
ping,
|
ping, sign_json, verify_json,
|
||||||
};
|
};
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
|
|
||||||
|
@ -82,6 +82,18 @@ pub(crate) enum DebugCommand {
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
reset: bool,
|
reset: bool,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// - Verify json signatures
|
||||||
|
///
|
||||||
|
/// This command needs a JSON blob provided in a Markdown code block below
|
||||||
|
/// the command.
|
||||||
|
SignJson,
|
||||||
|
|
||||||
|
/// - Verify json signatures
|
||||||
|
///
|
||||||
|
/// This command needs a JSON blob provided in a Markdown code block below
|
||||||
|
/// the command.
|
||||||
|
VerifyJson,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn process(command: DebugCommand, body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn process(command: DebugCommand, body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
|
@ -108,5 +120,7 @@ pub(crate) async fn process(command: DebugCommand, body: Vec<&str>) -> Result<Ro
|
||||||
filter,
|
filter,
|
||||||
reset,
|
reset,
|
||||||
} => change_log_level(body, filter, reset).await?,
|
} => change_log_level(body, filter, reset).await?,
|
||||||
|
DebugCommand::SignJson => sign_json(body).await?,
|
||||||
|
DebugCommand::VerifyJson => verify_json(body).await?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
use std::{collections::BTreeMap, fmt::Write as _};
|
use std::fmt::Write as _;
|
||||||
|
|
||||||
use ruma::{events::room::message::RoomMessageEventContent, RoomId, ServerName};
|
use ruma::{events::room::message::RoomMessageEventContent, RoomId, ServerName};
|
||||||
use tokio::sync::RwLock;
|
|
||||||
|
|
||||||
use crate::{services, utils::HtmlEscape, Result};
|
use crate::{services, utils::HtmlEscape, Result};
|
||||||
|
|
||||||
|
@ -26,59 +25,6 @@ pub(super) async fn incoming_federeation(_body: Vec<&str>) -> Result<RoomMessage
|
||||||
Ok(RoomMessageEventContent::text_plain(&msg))
|
Ok(RoomMessageEventContent::text_plain(&msg))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) async fn sign_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
|
||||||
let string = body[1..body.len() - 1].join("\n");
|
|
||||||
match serde_json::from_str(&string) {
|
|
||||||
Ok(mut value) => {
|
|
||||||
ruma::signatures::sign_json(
|
|
||||||
services().globals.server_name().as_str(),
|
|
||||||
services().globals.keypair(),
|
|
||||||
&mut value,
|
|
||||||
)
|
|
||||||
.expect("our request json is what ruma expects");
|
|
||||||
let json_text = serde_json::to_string_pretty(&value).expect("canonical json is valid json");
|
|
||||||
Ok(RoomMessageEventContent::text_plain(json_text))
|
|
||||||
},
|
|
||||||
Err(e) => Ok(RoomMessageEventContent::text_plain(format!("Invalid json: {e}"))),
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Ok(RoomMessageEventContent::text_plain(
|
|
||||||
"Expected code block in command body. Add --help for details.",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) async fn verify_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
|
||||||
let string = body[1..body.len() - 1].join("\n");
|
|
||||||
match serde_json::from_str(&string) {
|
|
||||||
Ok(value) => {
|
|
||||||
let pub_key_map = RwLock::new(BTreeMap::new());
|
|
||||||
|
|
||||||
services()
|
|
||||||
.rooms
|
|
||||||
.event_handler
|
|
||||||
.fetch_required_signing_keys([&value], &pub_key_map)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let pub_key_map = pub_key_map.read().await;
|
|
||||||
match ruma::signatures::verify_json(&pub_key_map, &value) {
|
|
||||||
Ok(()) => Ok(RoomMessageEventContent::text_plain("Signature correct")),
|
|
||||||
Err(e) => Ok(RoomMessageEventContent::text_plain(format!(
|
|
||||||
"Signature verification failed: {e}"
|
|
||||||
))),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Err(e) => Ok(RoomMessageEventContent::text_plain(format!("Invalid json: {e}"))),
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Ok(RoomMessageEventContent::text_plain(
|
|
||||||
"Expected code block in command body. Add --help for details.",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) async fn fetch_support_well_known(
|
pub(super) async fn fetch_support_well_known(
|
||||||
_body: Vec<&str>, server_name: Box<ServerName>,
|
_body: Vec<&str>, server_name: Box<ServerName>,
|
||||||
) -> Result<RoomMessageEventContent> {
|
) -> Result<RoomMessageEventContent> {
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
use clap::Subcommand;
|
use clap::Subcommand;
|
||||||
use ruma::{events::room::message::RoomMessageEventContent, RoomId, ServerName};
|
use ruma::{events::room::message::RoomMessageEventContent, RoomId, ServerName};
|
||||||
|
|
||||||
use self::federation_commands::{
|
use self::federation_commands::{disable_room, enable_room, fetch_support_well_known, incoming_federeation};
|
||||||
disable_room, enable_room, fetch_support_well_known, incoming_federeation, sign_json, verify_json,
|
|
||||||
};
|
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
|
|
||||||
pub(crate) mod federation_commands;
|
pub(crate) mod federation_commands;
|
||||||
|
@ -24,18 +22,6 @@ pub(crate) enum FederationCommand {
|
||||||
room_id: Box<RoomId>,
|
room_id: Box<RoomId>,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// - Verify json signatures
|
|
||||||
///
|
|
||||||
/// This command needs a JSON blob provided in a Markdown code block below
|
|
||||||
/// the command.
|
|
||||||
SignJson,
|
|
||||||
|
|
||||||
/// - Verify json signatures
|
|
||||||
///
|
|
||||||
/// This command needs a JSON blob provided in a Markdown code block below
|
|
||||||
/// the command.
|
|
||||||
VerifyJson,
|
|
||||||
|
|
||||||
/// - Fetch `/.well-known/matrix/support` from the specified server
|
/// - Fetch `/.well-known/matrix/support` from the specified server
|
||||||
///
|
///
|
||||||
/// Despite the name, this is not a federation endpoint and does not go
|
/// Despite the name, this is not a federation endpoint and does not go
|
||||||
|
@ -59,8 +45,6 @@ pub(crate) async fn process(command: FederationCommand, body: Vec<&str>) -> Resu
|
||||||
room_id,
|
room_id,
|
||||||
} => enable_room(body, room_id).await?,
|
} => enable_room(body, room_id).await?,
|
||||||
FederationCommand::IncomingFederation => incoming_federeation(body).await?,
|
FederationCommand::IncomingFederation => incoming_federeation(body).await?,
|
||||||
FederationCommand::SignJson => sign_json(body).await?,
|
|
||||||
FederationCommand::VerifyJson => verify_json(body).await?,
|
|
||||||
FederationCommand::FetchSupportWellKnown {
|
FederationCommand::FetchSupportWellKnown {
|
||||||
server_name,
|
server_name,
|
||||||
} => fetch_support_well_known(body, server_name).await?,
|
} => fetch_support_well_known(body, server_name).await?,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue