adminroom: simplify codeblock checks
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
14a3471fcb
commit
0e7c3cb338
4 changed files with 306 additions and 299 deletions
|
@ -3,7 +3,12 @@ use ruma::{api::appservice::Registration, events::room::message::RoomMessageEven
|
||||||
use crate::{escape_html, services, Result};
|
use crate::{escape_html, services, Result};
|
||||||
|
|
||||||
pub(crate) async fn register(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn register(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let appservice_config = body[1..body.len().checked_sub(1).unwrap()].join("\n");
|
let appservice_config = body[1..body.len().checked_sub(1).unwrap()].join("\n");
|
||||||
let parsed_config = serde_yaml::from_str::<Registration>(&appservice_config);
|
let parsed_config = serde_yaml::from_str::<Registration>(&appservice_config);
|
||||||
match parsed_config {
|
match parsed_config {
|
||||||
|
@ -19,11 +24,6 @@ pub(crate) async fn register(body: Vec<&str>) -> Result<RoomMessageEventContent>
|
||||||
"Could not parse appservice config: {e}"
|
"Could not parse appservice config: {e}"
|
||||||
))),
|
))),
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
Ok(RoomMessageEventContent::text_plain(
|
|
||||||
"Expected code block in command body. Add --help for details.",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn unregister(_body: Vec<&str>, appservice_identifier: String) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn unregister(_body: Vec<&str>, appservice_identifier: String) -> Result<RoomMessageEventContent> {
|
||||||
|
|
|
@ -43,7 +43,12 @@ pub(crate) async fn get_auth_chain(_body: Vec<&str>, event_id: Box<EventId>) ->
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn parse_pdu(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn parse_pdu(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let string = body[1..body.len() - 1].join("\n");
|
let string = body[1..body.len() - 1].join("\n");
|
||||||
match serde_json::from_str(&string) {
|
match serde_json::from_str(&string) {
|
||||||
Ok(value) => match ruma::signatures::reference_hash(&value, &RoomVersionId::V6) {
|
Ok(value) => match ruma::signatures::reference_hash(&value, &RoomVersionId::V6) {
|
||||||
|
@ -63,9 +68,6 @@ pub(crate) async fn parse_pdu(body: Vec<&str>) -> Result<RoomMessageEventContent
|
||||||
"Invalid json in command body: {e}"
|
"Invalid json in command body: {e}"
|
||||||
))),
|
))),
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
Ok(RoomMessageEventContent::text_plain("Expected code block in command body."))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn get_pdu(_body: Vec<&str>, event_id: Box<EventId>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn get_pdu(_body: Vec<&str>, event_id: Box<EventId>) -> Result<RoomMessageEventContent> {
|
||||||
|
@ -117,11 +119,17 @@ pub(crate) async fn get_remote_pdu_list(
|
||||||
|
|
||||||
if server == services().globals.server_name() {
|
if server == services().globals.server_name() {
|
||||||
return Ok(RoomMessageEventContent::text_plain(
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
"Not allowed to send federation requests to ourselves. Please use `get-pdu` for fetching local PDUs.",
|
"Not allowed to send federation requests to ourselves. Please use `get-pdu` for fetching local PDUs from \
|
||||||
|
the database.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
|
||||||
let list = body
|
let list = body
|
||||||
.clone()
|
.clone()
|
||||||
.drain(1..body.len().checked_sub(1).unwrap())
|
.drain(1..body.len().checked_sub(1).unwrap())
|
||||||
|
@ -131,6 +139,12 @@ pub(crate) async fn get_remote_pdu_list(
|
||||||
for pdu in list {
|
for pdu in list {
|
||||||
if force {
|
if force {
|
||||||
if let Err(e) = get_remote_pdu(Vec::new(), Box::from(pdu), server.clone()).await {
|
if let Err(e) = get_remote_pdu(Vec::new(), Box::from(pdu), server.clone()).await {
|
||||||
|
services()
|
||||||
|
.admin
|
||||||
|
.send_message(RoomMessageEventContent::text_plain(format!(
|
||||||
|
"Failed to get remote PDU, ignoring error: {e}"
|
||||||
|
)))
|
||||||
|
.await;
|
||||||
warn!(%e, "Failed to get remote PDU, ignoring error");
|
warn!(%e, "Failed to get remote PDU, ignoring error");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -138,12 +152,7 @@ pub(crate) async fn get_remote_pdu_list(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(RoomMessageEventContent::text_plain("Fetched list of remote PDUs."));
|
Ok(RoomMessageEventContent::text_plain("Fetched list of remote PDUs."))
|
||||||
}
|
|
||||||
|
|
||||||
Ok(RoomMessageEventContent::text_plain(
|
|
||||||
"Expected code block in command body. Add --help for details.",
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn get_remote_pdu(
|
pub(crate) async fn get_remote_pdu(
|
||||||
|
@ -384,7 +393,12 @@ pub(crate) async fn change_log_level(
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn sign_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn sign_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let string = body[1..body.len().checked_sub(1).unwrap()].join("\n");
|
let string = body[1..body.len().checked_sub(1).unwrap()].join("\n");
|
||||||
match serde_json::from_str(&string) {
|
match serde_json::from_str(&string) {
|
||||||
Ok(mut value) => {
|
Ok(mut value) => {
|
||||||
|
@ -399,15 +413,15 @@ pub(crate) async fn sign_json(body: Vec<&str>) -> Result<RoomMessageEventContent
|
||||||
},
|
},
|
||||||
Err(e) => Ok(RoomMessageEventContent::text_plain(format!("Invalid json: {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(crate) async fn verify_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn verify_json(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let string = body[1..body.len().checked_sub(1).unwrap()].join("\n");
|
let string = body[1..body.len().checked_sub(1).unwrap()].join("\n");
|
||||||
match serde_json::from_str(&string) {
|
match serde_json::from_str(&string) {
|
||||||
Ok(value) => {
|
Ok(value) => {
|
||||||
|
@ -429,11 +443,6 @@ pub(crate) async fn verify_json(body: Vec<&str>) -> Result<RoomMessageEventConte
|
||||||
},
|
},
|
||||||
Err(e) => Ok(RoomMessageEventContent::text_plain(format!("Invalid json: {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.",
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(skip(_body))]
|
#[tracing::instrument(skip(_body))]
|
||||||
|
|
|
@ -138,7 +138,12 @@ pub(crate) async fn delete(
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn delete_list(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
pub(crate) async fn delete_list(body: Vec<&str>) -> Result<RoomMessageEventContent> {
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let mxc_list = body
|
let mxc_list = body
|
||||||
.clone()
|
.clone()
|
||||||
.drain(1..body.len().checked_sub(1).unwrap())
|
.drain(1..body.len().checked_sub(1).unwrap())
|
||||||
|
@ -154,14 +159,9 @@ pub(crate) async fn delete_list(body: Vec<&str>) -> Result<RoomMessageEventConte
|
||||||
.expect("mxc_deletion_count should not get this high");
|
.expect("mxc_deletion_count should not get this high");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(RoomMessageEventContent::text_plain(format!(
|
Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
"Finished bulk MXC deletion, deleted {mxc_deletion_count} total MXCs from our database and the filesystem.",
|
"Finished bulk MXC deletion, deleted {mxc_deletion_count} total MXCs from our database and the filesystem.",
|
||||||
)));
|
)))
|
||||||
}
|
|
||||||
|
|
||||||
Ok(RoomMessageEventContent::text_plain(
|
|
||||||
"Expected code block in command body. Add --help for details.",
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn delete_past_remote_media(
|
pub(crate) async fn delete_past_remote_media(
|
||||||
|
|
|
@ -187,7 +187,12 @@ async fn ban_room(
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: bool) -> Result<RoomMessageEventContent> {
|
async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: bool) -> Result<RoomMessageEventContent> {
|
||||||
if body.len() > 2 && body[0].trim().starts_with("```") && body.last().unwrap().trim() == "```" {
|
if body.len() < 2 || !body[0].trim().starts_with("```") || body.last().unwrap_or(&"").trim() != "```" {
|
||||||
|
return Ok(RoomMessageEventContent::text_plain(
|
||||||
|
"Expected code block in command body. Add --help for details.",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let rooms_s = body.clone().drain(1..body.len() - 1).collect::<Vec<_>>();
|
let rooms_s = body.clone().drain(1..body.len() - 1).collect::<Vec<_>>();
|
||||||
|
|
||||||
let admin_room_alias: Box<RoomAliasId> = format!("#admins:{}", services().globals.server_name())
|
let admin_room_alias: Box<RoomAliasId> = format!("#admins:{}", services().globals.server_name())
|
||||||
|
@ -221,8 +226,7 @@ async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: boo
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(RoomMessageEventContent::text_plain(format!(
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
"{room} is not a valid room ID or room alias, please fix the list and try again: \
|
"{room} is not a valid room ID or room alias, please fix the list and try again: {e}"
|
||||||
{e}"
|
|
||||||
)));
|
)));
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -238,8 +242,8 @@ async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: boo
|
||||||
room_id
|
room_id
|
||||||
} else {
|
} else {
|
||||||
debug!(
|
debug!(
|
||||||
"We don't have this room alias to a room ID locally, attempting to fetch \
|
"We don't have this room alias to a room ID locally, attempting to fetch room \
|
||||||
room ID over federation"
|
ID over federation"
|
||||||
);
|
);
|
||||||
|
|
||||||
match get_alias_helper(room_alias, None).await {
|
match get_alias_helper(room_alias, None).await {
|
||||||
|
@ -277,8 +281,7 @@ async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: boo
|
||||||
}
|
}
|
||||||
|
|
||||||
return Ok(RoomMessageEventContent::text_plain(format!(
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
"{room} is not a valid room ID or room alias, please fix the list and try again: \
|
"{room} is not a valid room ID or room alias, please fix the list and try again: {e}"
|
||||||
{e}"
|
|
||||||
)));
|
)));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -288,8 +291,7 @@ async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: boo
|
||||||
if force {
|
if force {
|
||||||
// ignore rooms we failed to parse if we're force deleting
|
// ignore rooms we failed to parse if we're force deleting
|
||||||
error!(
|
error!(
|
||||||
"Error parsing room \"{room}\" during bulk room banning, ignoring error and logging here: \
|
"Error parsing room \"{room}\" during bulk room banning, ignoring error and logging here: {e}"
|
||||||
{e}"
|
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -383,19 +385,15 @@ async fn ban_list_of_rooms(body: Vec<&str>, force: bool, disable_federation: boo
|
||||||
}
|
}
|
||||||
|
|
||||||
if disable_federation {
|
if disable_federation {
|
||||||
return Ok(RoomMessageEventContent::text_plain(format!(
|
Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
"Finished bulk room ban, banned {room_ban_count} total rooms, evicted all users, and disabled \
|
"Finished bulk room ban, banned {room_ban_count} total rooms, evicted all users, and disabled incoming \
|
||||||
incoming federation with the room."
|
federation with the room."
|
||||||
)));
|
)))
|
||||||
}
|
} else {
|
||||||
return Ok(RoomMessageEventContent::text_plain(format!(
|
Ok(RoomMessageEventContent::text_plain(format!(
|
||||||
"Finished bulk room ban, banned {room_ban_count} total rooms and evicted all users."
|
"Finished bulk room ban, banned {room_ban_count} total rooms and evicted all users."
|
||||||
)));
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(RoomMessageEventContent::text_plain(
|
|
||||||
"Expected code block in command body. Add --help for details.",
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn unban_room(
|
async fn unban_room(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue