Mercurial > libervia-backend
diff libervia/backend/plugins/plugin_xep_0384.py @ 4164:15482dc0b5d1
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.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 28 Nov 2023 17:41:02 +0100 |
parents | 26534d959d2d |
children | 1a7a3e4b52a4 |
line wrap: on
line diff
--- 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,