xmpp: Allow <confirm/> in message with empty body

skip-changelog: bugfix for previous not yet released change
This commit is contained in:
Adrien Destugues 2025-09-11 12:42:26 +02:00
commit 0cf06f0caf

View file

@ -20,14 +20,26 @@ pub async fn handle_message_chat(
) {
let langs: Vec<&str> = agent.lang.iter().map(String::as_str).collect();
let confirm = message.extract_valid_payload::<Confirm>();
let is_muc_pm = message.extract_valid_payload::<MucUser>().is_some();
// First process events that do not require the message body
if !is_muc_pm && confirm.is_some() {
events.push(Event::AuthConfirm(
from.to_bare(),
confirm.unwrap(),
time_info,
));
return;
}
// For other events, a message body is required, so stop here if there isn't one
let Some((_lang, body)) = message.get_best_body_cloned(langs) else {
debug!("Received normal/chat message without body:\n{:#?}", message);
return;
};
let is_muc_pm = message.extract_valid_payload::<MucUser>().is_some();
let correction = message.extract_valid_payload::<Replace>();
let confirm = message.extract_valid_payload::<Confirm>();
if is_muc_pm {
if from.resource().is_none() {
@ -58,8 +70,6 @@ pub async fn handle_message_chat(
let event = if let Some(correction) = correction {
// TODO: Check that correction is valid (only for last N minutes or last N messages)
Event::ChatMessageCorrection(correction.id, from.to_bare(), body.clone(), time_info)
} else if let Some(confirm) = confirm {
Event::AuthConfirm(from.to_bare(), confirm, time_info)
} else {
Event::ChatMessage(message.id.clone(), from.to_bare(), body, time_info)
};