Consistent and escaped response in get_pdu
1. The fallback text of the get_pdu admin room command response message
now contains the same text as the formatted_body content (namely, the
json instead of Debug-formatting of a serde type).
2. The formatted_body content of the get_pdu response is now
html-escaped.
@@ -7,6 +7,7 @@ use crate::{pdu::PduBuilder, utils, Database, Error, PduEvent, Result};
use lru_cache::LruCache;
use regex::Regex;
use ring::digest;
+use rocket::http::RawStr;
use ruma::{
api::{client::error::ErrorKind, federation},
events::{
@@ -1006,16 +1007,19 @@ impl Rooms {
}
match pdu_json {
Some(json) => {
+ let json_text =
+ serde_json::to_string_pretty(&json)
+ .expect("canonical json is valid json");
db.admin.send(AdminCommand::SendMessage(
message::MessageEventContent::text_html(
- format!("{}\n```json\n{:#?}\n```",
+ format!("{}\n```json\n{}\n```",
if outlier {
"PDU is outlier"
- } else { "PDU was accepted"}, json),
+ } else { "PDU was accepted"}, json_text),
format!("<p>{}</p>\n<pre><code class=\"language-json\">{}\n</code></pre>\n",
if outlier {
"PDU is outlier"
- } else { "PDU was accepted"}, serde_json::to_string_pretty(&json).expect("canonical json is valid json"))
+ } else { "PDU was accepted"}, RawStr::new(&json_text).html_escape())
),
));
}
