# HG changeset patch # User Goffi # Date 1701189662 -3600 # Node ID 15482dc0b5d16910b7c804bcfeac7fde4058a920 # Parent 3b3cd9453d9b8bdd807b9454fdffa12320edcdb4 plugin XEP-0384: fix trigger used for OLDMEMO: OLDMEMO was applied at the `send_message_data` trigger level, however this was missing stanza constructed without message data (which is notably the case for XEP-0308). This has been fixed by using the `send` trigger instead. As a side effect, the same code is now used for TWOMEMO and OLDMEMO, making it simpler. diff -r 3b3cd9453d9b -r 15482dc0b5d1 libervia/backend/plugins/plugin_xep_0384.py --- a/libervia/backend/plugins/plugin_xep_0384.py Tue Nov 28 17:38:31 2023 +0100 +++ b/libervia/backend/plugins/plugin_xep_0384.py Tue Nov 28 17:41:02 2023 +0100 @@ -1584,13 +1584,7 @@ self._message_received_trigger, priority=100050 ) - sat.trigger.add( - "send_message_data", - self.__send_message_data_trigger, - priority=100050 - ) - - # These triggers are used by twomemo, which does do SCE + sat.trigger.add("send", self.__send_trigger, priority=0) # TODO: Add new triggers here for freshly received and about-to-be-sent stanzas, # including IQs. @@ -2418,19 +2412,22 @@ # Encryption is not requested for this recipient return True - if encryption["plugin"].namespace != twomemo.twomemo.NAMESPACE: + encryption_ns = encryption["plugin"].namespace + # All pre-checks done, we can start encrypting! + if encryption_ns in (twomemo.twomemo.NAMESPACE, oldmemo.oldmemo.NAMESPACE): + await self.encrypt( + client, + encryption_ns, + stanza, + recipient_bare_jid, + stanza.getAttribute("type", C.MESS_TYPE_NORMAL) == C.MESS_TYPE_GROUPCHAT, + stanza.getAttribute("id", None) + ) + else: # Encryption is requested for this recipient, but not with twomemo return True - # All pre-checks done, we can start encrypting! - await self.encrypt( - client, - twomemo.twomemo.NAMESPACE, - stanza, - recipient_bare_jid, - stanza.getAttribute("type", C.MESS_TYPE_NORMAL) == C.MESS_TYPE_GROUPCHAT, - stanza.getAttribute("id", None) - ) + # Add a store hint if this is a message stanza if stanza.name == "message": @@ -2439,44 +2436,6 @@ # Let the flow continue. return True - async def __send_message_data_trigger( - self, - client: SatXMPPClient, - mess_data: MessageData - ) -> None: - """ - @param client: The client sending this message. - @param mess_data: The message data that is about to be sent. Can be modified. - """ - - # Check whether encryption is requested for this message - try: - namespace = mess_data[C.MESS_KEY_ENCRYPTION]["plugin"].namespace - except KeyError: - return - - # If encryption is requested, check whether it's oldmemo - if namespace != oldmemo.oldmemo.NAMESPACE: - return - - # All pre-checks done, we can start encrypting! - stanza = mess_data["xml"] - recipient_jid = mess_data["to"] - is_muc_message = mess_data["type"] == C.MESS_TYPE_GROUPCHAT - stanza_id = mess_data["uid"] - - await self.encrypt( - client, - oldmemo.oldmemo.NAMESPACE, - stanza, - recipient_jid, - is_muc_message, - stanza_id - ) - - # Add a store hint - self.__xep_0334.add_hint_elements(stanza, [ "store" ]) - async def encrypt( self, client: SatXMPPClient,