From 6adbf64a7f3efff4385c6d3fe9499eb67a3880eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20=E2=80=9Cpep=E2=80=9D=20Buquet?= Date: Tue, 31 Dec 2019 10:27:39 +0100 Subject: [PATCH] MUC support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime “pep” Buquet --- poezio_plugins/omemo/__init__.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/poezio_plugins/omemo/__init__.py b/poezio_plugins/omemo/__init__.py index 24acfc9..49054f1 100644 --- a/poezio_plugins/omemo/__init__.py +++ b/poezio_plugins/omemo/__init__.py @@ -17,7 +17,7 @@ from typing import Dict, List, Optional from poezio.plugin_e2ee import E2EEPlugin from poezio.xdg import DATA_HOME -from poezio.tabs import DynamicConversationTab, StaticConversationTab, MucTab +from poezio.tabs import ChatTab, DynamicConversationTab, StaticConversationTab, MucTab from omemo.exceptions import MissingBundleException from slixmpp import JID @@ -94,15 +94,18 @@ class Plugin(E2EEPlugin): if trust is not None ] - def decrypt(self, message: Message, tab) -> None: + def decrypt(self, message: Message, jid: Optional[JID], tab: ChatTab) -> None: + + if jid is None: + self.display_error('Unable to decrypt the message.') + return None body = None try: - mfrom = message['from'] encrypted = message['omemo_encrypted'] body = self.core.xmpp['xep_0384'].decrypt_message( encrypted, - mfrom, + jid, # Always decrypt. Let us handle how we then warn the user. allow_untrusted=True, ) @@ -136,8 +139,11 @@ class Plugin(E2EEPlugin): if body is not None: message['body'] = body - async def encrypt(self, message: Message, _tab) -> None: - mto = message['to'] + async def encrypt(self, message: Message, jids: Optional[List[JID]], _tab) -> None: + if jids is None: + self.display_error('Unable to encrypt the message.') + return None + body = message['body'] expect_problems = {} # type: Optional[Dict[JID, List[int]]] @@ -151,11 +157,12 @@ class Plugin(E2EEPlugin): # and not a full Message stanza. This combined with the # `recipients` parameter that requires for a list of JIDs, # allows you to encrypt for 1:1 as well as groupchats (MUC). - # - # TODO: Document expect_problems - # TODO: Handle multiple recipients (MUCs) - recipients = [mto] - encrypt = await self.core.xmpp['xep_0384'].encrypt_message(body, recipients, expect_problems) + recipients = jids + encrypt = await self.core.xmpp['xep_0384'].encrypt_message( + body, + recipients, + expect_problems, + ) message.append(encrypt) return None except UndecidedException as exn: