This is an automated email from the ASF dual-hosted git repository. ralaoui pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mina-vysper.git
The following commit(s) were added to refs/heads/master by this push: new ae7a450 Message archive management: do not archive message without bodies ae7a450 is described below commit ae7a45012824228135a07d733903f8f267f8519b Author: Réda Housni Alaoui <reda.housniala...@gmail.com> AuthorDate: Sat Sep 7 23:59:22 2019 +0200 Message archive management: do not archive message without bodies --- .../xep0313_mam/user/UserMessageStanzaBroker.java | 19 +++++++++++-- .../user/UserMessageStanzaBrokerTest.java | 32 ++++++++++++++++------ 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java index 1acac01..9e6f77c 100644 --- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java +++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java @@ -21,8 +21,11 @@ package org.apache.vysper.xmpp.modules.extension.xep0313_mam.user; import static java.util.Objects.requireNonNull; +import java.util.Map; import java.util.Optional; +import org.apache.vysper.xml.fragment.XMLElement; +import org.apache.vysper.xml.fragment.XMLSemanticError; import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.addressing.EntityUtils; import org.apache.vysper.xmpp.delivery.failure.DeliveryException; @@ -91,8 +94,20 @@ class UserMessageStanzaBroker extends DelegatingStanzaBroker { LOG.debug("Message {} is neither of type 'normal' or 'chat'. It will not be archived.", messageStanza); return messageStanza; } - - // TODO Check preferences and no-store element + + Map<String, XMLElement> bodies; + try { + bodies = messageStanza.getBodies(); + } catch (XMLSemanticError xmlSemanticError) { + return messageStanza; + } + if (bodies.isEmpty()) { + // A server SHOULD include in a user archive all of the messages a user sends + // or receives of type 'normal' or 'chat' that contain a <body> element. + return messageStanza; + } + + // TODO Check preferences addToSenderArchive(messageStanza, sessionContext); return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::new).map(MessageStanzaWithId::toStanza) diff --git a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java index dcfb7f7..2c88020 100644 --- a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java +++ b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBrokerTest.java @@ -27,8 +27,8 @@ import org.apache.vysper.xmpp.addressing.Entity; import org.apache.vysper.xmpp.addressing.EntityImpl; import org.apache.vysper.xmpp.modules.extension.xep0313_mam.ServerRuntimeContextMock; import org.apache.vysper.xmpp.modules.extension.xep0313_mam.SessionContextMock; -import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.UserMessageArchiveMock; import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.MessageArchivesMock; +import org.apache.vysper.xmpp.modules.extension.xep0313_mam.spi.UserMessageArchiveMock; import org.apache.vysper.xmpp.protocol.StanzaBroker; import org.apache.vysper.xmpp.stanza.MessageStanza; import org.apache.vysper.xmpp.stanza.MessageStanzaType; @@ -82,9 +82,8 @@ public class UserMessageStanzaBrokerTest { return new UserMessageStanzaBroker(delegate, serverRuntimeContext, sessionContext, isOutboundStanza); } - private MessageStanza buildMessageStanza(MessageStanzaType messageStanzaType, Entity from, Entity to) { - return new MessageStanza( - StanzaBuilder.createMessageStanza(from, to, messageStanzaType, "en", "hello world").build()); + private MessageStanza buildMessageStanza(MessageStanzaType messageStanzaType, Entity from, Entity to, String body) { + return new MessageStanza(StanzaBuilder.createMessageStanza(from, to, messageStanzaType, "en", body).build()); } @Test @@ -93,7 +92,8 @@ public class UserMessageStanzaBrokerTest { Stream.of(MessageStanzaType.values()).filter(messageStanzaType -> messageStanzaType != MessageStanzaType.NORMAL) .filter(messageStanzaType -> messageStanzaType != MessageStanzaType.CHAT).forEach(messageStanzaType -> { - MessageStanza stanza = buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE); + MessageStanza stanza = buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE, + "hello world"); tested.writeToSession(stanza); @@ -105,7 +105,8 @@ public class UserMessageStanzaBrokerTest { Stream.of(MessageStanzaType.CHAT, MessageStanzaType.NORMAL).forEach(messageStanzaType -> { julietArchive.clear(); - MessageStanza messageStanza = buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE); + MessageStanza messageStanza = buildMessageStanza(messageStanzaType, null, ALICE_IN_RABBIT_HOLE, + "hello world"); tested.writeToSession(messageStanza); @@ -117,7 +118,7 @@ public class UserMessageStanzaBrokerTest { public void outboundMessageHavingFrom() { UserMessageStanzaBroker tested = buildTested(true); MessageStanza messageStanza = buildMessageStanza(MessageStanzaType.NORMAL, ROMEO_IN_ORCHARD, - ALICE_IN_RABBIT_HOLE); + ALICE_IN_RABBIT_HOLE, "hello world"); tested.writeToSession(messageStanza); @@ -128,7 +129,8 @@ public class UserMessageStanzaBrokerTest { public void outboundMessageWithoutFrom() { UserMessageStanzaBroker tested = buildTested(true); - MessageStanza messageStanza = buildMessageStanza(MessageStanzaType.NORMAL, null, ALICE_IN_RABBIT_HOLE); + MessageStanza messageStanza = buildMessageStanza(MessageStanzaType.NORMAL, null, ALICE_IN_RABBIT_HOLE, + "hello world"); tested.writeToSession(messageStanza); @@ -140,7 +142,7 @@ public class UserMessageStanzaBrokerTest { UserMessageStanzaBroker tested = buildTested(true); MessageStanza messageStanza = buildMessageStanza(MessageStanzaType.NORMAL, ALICE_IN_RABBIT_HOLE, - ALICE_IN_RABBIT_HOLE); + ALICE_IN_RABBIT_HOLE, "hello world"); tested.writeToSession(messageStanza); @@ -149,4 +151,16 @@ public class UserMessageStanzaBrokerTest { macbethArchive.assertEmpty(); } + @Test + public void messageWithoutBody() { + UserMessageStanzaBroker tested = buildTested(true); + MessageStanza messageStanza = buildMessageStanza(MessageStanzaType.NORMAL, JULIET_IN_CHAMBER, ROMEO_IN_ORCHARD, + null); + + tested.writeToSession(messageStanza); + + julietArchive.assertEmpty(); + romeoArchive.assertEmpty(); + } + } \ No newline at end of file