|
|
@ -287,13 +287,11 @@ impl Service {
|
|
|
|
Err(error) => {
|
|
|
|
Err(error) => {
|
|
|
|
let markdown_message = format!(
|
|
|
|
let markdown_message = format!(
|
|
|
|
"Encountered an error while handling the command:\n\
|
|
|
|
"Encountered an error while handling the command:\n\
|
|
|
|
```\n{}\n```",
|
|
|
|
```\n{error}\n```",
|
|
|
|
error,
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
let html_message = format!(
|
|
|
|
let html_message = format!(
|
|
|
|
"Encountered an error while handling the command:\n\
|
|
|
|
"Encountered an error while handling the command:\n\
|
|
|
|
<pre>\n{}\n</pre>",
|
|
|
|
<pre>\n{error}\n</pre>",
|
|
|
|
error,
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
RoomMessageEventContent::text_html(markdown_message, html_message)
|
|
|
|
RoomMessageEventContent::text_html(markdown_message, html_message)
|
|
|
@ -338,17 +336,14 @@ impl Service {
|
|
|
|
match parsed_config {
|
|
|
|
match parsed_config {
|
|
|
|
Ok(yaml) => match services().appservice.register_appservice(yaml) {
|
|
|
|
Ok(yaml) => match services().appservice.register_appservice(yaml) {
|
|
|
|
Ok(id) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Ok(id) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Appservice registered with ID: {}.",
|
|
|
|
"Appservice registered with ID: {id}."
|
|
|
|
id
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Failed to register appservice: {}",
|
|
|
|
"Failed to register appservice: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Could not parse appservice config: {}",
|
|
|
|
"Could not parse appservice config: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -365,8 +360,7 @@ impl Service {
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Ok(()) => RoomMessageEventContent::text_plain("Appservice unregistered."),
|
|
|
|
Ok(()) => RoomMessageEventContent::text_plain("Appservice unregistered."),
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Failed to unregister appservice: {}",
|
|
|
|
"Failed to unregister appservice: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
AdminCommand::ListAppservices => {
|
|
|
|
AdminCommand::ListAppservices => {
|
|
|
@ -459,8 +453,7 @@ impl Service {
|
|
|
|
.count();
|
|
|
|
.count();
|
|
|
|
let elapsed = start.elapsed();
|
|
|
|
let elapsed = start.elapsed();
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Loaded auth chain with length {} in {:?}",
|
|
|
|
"Loaded auth chain with length {count} in {elapsed:?}"
|
|
|
|
count, elapsed
|
|
|
|
|
|
|
|
))
|
|
|
|
))
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
RoomMessageEventContent::text_plain("Event not found.")
|
|
|
|
RoomMessageEventContent::text_plain("Event not found.")
|
|
|
@ -474,30 +467,26 @@ impl Service {
|
|
|
|
Ok(value) => {
|
|
|
|
Ok(value) => {
|
|
|
|
match ruma::signatures::reference_hash(&value, &RoomVersionId::V6) {
|
|
|
|
match ruma::signatures::reference_hash(&value, &RoomVersionId::V6) {
|
|
|
|
Ok(hash) => {
|
|
|
|
Ok(hash) => {
|
|
|
|
let event_id = EventId::parse(format!("${}", hash));
|
|
|
|
let event_id = EventId::parse(format!("${hash}"));
|
|
|
|
|
|
|
|
|
|
|
|
match serde_json::from_value::<PduEvent>(
|
|
|
|
match serde_json::from_value::<PduEvent>(
|
|
|
|
serde_json::to_value(value).expect("value is json"),
|
|
|
|
serde_json::to_value(value).expect("value is json"),
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
Ok(pdu) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Ok(pdu) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"EventId: {:?}\n{:#?}",
|
|
|
|
"EventId: {event_id:?}\n{pdu:#?}"
|
|
|
|
event_id, pdu
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"EventId: {:?}\nCould not parse event: {}",
|
|
|
|
"EventId: {event_id:?}\nCould not parse event: {e}"
|
|
|
|
event_id, e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Could not parse PDU JSON: {:?}",
|
|
|
|
"Could not parse PDU JSON: {e:?}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Invalid json in command body: {}",
|
|
|
|
"Invalid json in command body: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -545,8 +534,7 @@ impl Service {
|
|
|
|
AdminCommand::DatabaseMemoryUsage => match services().globals.db.memory_usage() {
|
|
|
|
AdminCommand::DatabaseMemoryUsage => match services().globals.db.memory_usage() {
|
|
|
|
Ok(response) => RoomMessageEventContent::text_plain(response),
|
|
|
|
Ok(response) => RoomMessageEventContent::text_plain(response),
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Failed to get database memory usage: {}",
|
|
|
|
"Failed to get database memory usage: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
AdminCommand::ShowConfig => {
|
|
|
|
AdminCommand::ShowConfig => {
|
|
|
@ -561,8 +549,7 @@ impl Service {
|
|
|
|
Ok(id) => id,
|
|
|
|
Ok(id) => id,
|
|
|
|
Err(e) => {
|
|
|
|
Err(e) => {
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
|
|
|
"The supplied username is not a valid username: {}",
|
|
|
|
"The supplied username is not a valid username: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)))
|
|
|
|
)))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -589,12 +576,10 @@ impl Service {
|
|
|
|
.set_password(&user_id, Some(new_password.as_str()))
|
|
|
|
.set_password(&user_id, Some(new_password.as_str()))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Ok(()) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Ok(()) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Successfully reset the password for user {}: {}",
|
|
|
|
"Successfully reset the password for user {user_id}: {new_password}"
|
|
|
|
user_id, new_password
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
Err(e) => RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Couldn't reset the password for user {}: {}",
|
|
|
|
"Couldn't reset the password for user {user_id}: {e}"
|
|
|
|
user_id, e
|
|
|
|
|
|
|
|
)),
|
|
|
|
)),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -609,8 +594,7 @@ impl Service {
|
|
|
|
Ok(id) => id,
|
|
|
|
Ok(id) => id,
|
|
|
|
Err(e) => {
|
|
|
|
Err(e) => {
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
|
|
|
"The supplied username is not a valid username: {}",
|
|
|
|
"The supplied username is not a valid username: {e}"
|
|
|
|
e
|
|
|
|
|
|
|
|
)))
|
|
|
|
)))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -676,8 +660,7 @@ impl Service {
|
|
|
|
let user_id = Arc::<UserId>::from(user_id);
|
|
|
|
let user_id = Arc::<UserId>::from(user_id);
|
|
|
|
if services().users.exists(&user_id)? {
|
|
|
|
if services().users.exists(&user_id)? {
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Making {} leave all rooms before deactivation...",
|
|
|
|
"Making {user_id} leave all rooms before deactivation..."
|
|
|
|
user_id
|
|
|
|
|
|
|
|
));
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
|
|
services().users.deactivate_account(&user_id)?;
|
|
|
|
services().users.deactivate_account(&user_id)?;
|
|
|
@ -687,13 +670,11 @@ impl Service {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
"User {} has been deactivated",
|
|
|
|
"User {user_id} has been deactivated"
|
|
|
|
user_id
|
|
|
|
|
|
|
|
))
|
|
|
|
))
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
"User {} doesn't exist on this server",
|
|
|
|
"User {user_id} doesn't exist on this server"
|
|
|
|
user_id
|
|
|
|
|
|
|
|
))
|
|
|
|
))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -709,8 +690,7 @@ impl Service {
|
|
|
|
Ok(user_id) => user_ids.push(user_id),
|
|
|
|
Ok(user_id) => user_ids.push(user_id),
|
|
|
|
Err(_) => {
|
|
|
|
Err(_) => {
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(format!(
|
|
|
|
"{} is not a valid username",
|
|
|
|
"{username} is not a valid username"
|
|
|
|
username
|
|
|
|
|
|
|
|
)))
|
|
|
|
)))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -746,8 +726,7 @@ impl Service {
|
|
|
|
|
|
|
|
|
|
|
|
if admins.is_empty() {
|
|
|
|
if admins.is_empty() {
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
RoomMessageEventContent::text_plain(format!(
|
|
|
|
"Deactivated {} accounts.",
|
|
|
|
"Deactivated {deactivation_count} accounts."
|
|
|
|
deactivation_count
|
|
|
|
|
|
|
|
))
|
|
|
|
))
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
RoomMessageEventContent::text_plain(format!("Deactivated {} accounts.\nSkipped admin accounts: {:?}. Use --force to deactivate admin accounts", deactivation_count, admins.join(", ")))
|
|
|
|
RoomMessageEventContent::text_plain(format!("Deactivated {} accounts.\nSkipped admin accounts: {:?}. Use --force to deactivate admin accounts", deactivation_count, admins.join(", ")))
|
|
|
@ -767,8 +746,8 @@ impl Service {
|
|
|
|
fn usage_to_html(&self, text: &str, server_name: &ServerName) -> String {
|
|
|
|
fn usage_to_html(&self, text: &str, server_name: &ServerName) -> String {
|
|
|
|
// Replace `@conduit:servername:-subcmdname` with `@conduit:servername: subcmdname`
|
|
|
|
// Replace `@conduit:servername:-subcmdname` with `@conduit:servername: subcmdname`
|
|
|
|
let text = text.replace(
|
|
|
|
let text = text.replace(
|
|
|
|
&format!("@conduit:{}:-", server_name),
|
|
|
|
&format!("@conduit:{server_name}:-"),
|
|
|
|
&format!("@conduit:{}: ", server_name),
|
|
|
|
&format!("@conduit:{server_name}: "),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// For the conduit admin room, subcommands become main commands
|
|
|
|
// For the conduit admin room, subcommands become main commands
|
|
|
|