diff options
author | Maxime “pep” Buquet <pep@bouah.net> | 2019-08-25 00:48:57 +0200 |
---|---|---|
committer | Maxime “pep” Buquet <pep@bouah.net> | 2019-12-27 18:58:48 +0100 |
commit | 03499a2d2c0a657a886913d3988d69ca08ceca3a (patch) | |
tree | e11b5c318594adbb8036ad7a5c68a6d69197a078 | |
parent | 0e27485c36de12bb4831e2a48c63a3a4e56d3da6 (diff) | |
download | poezio-03499a2d2c0a657a886913d3988d69ca08ceca3a.tar.gz poezio-03499a2d2c0a657a886913d3988d69ca08ceca3a.tar.bz2 poezio-03499a2d2c0a657a886913d3988d69ca08ceca3a.tar.xz poezio-03499a2d2c0a657a886913d3988d69ca08ceca3a.zip |
omemo: handle MissingBundleException when it comes from EncryptionPrepareException
We're not supposed to see MissingBundleException directly as it's
handled by slixmpp-omemo. Slixmpp-omemo will give us all the remaining
exceptions via EncryptionPrepareException when it doesn't know what to
do anymore.
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
-rw-r--r-- | plugins/omemo_plugin.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/plugins/omemo_plugin.py b/plugins/omemo_plugin.py index 6efa8c08..538be98e 100644 --- a/plugins/omemo_plugin.py +++ b/plugins/omemo_plugin.py @@ -18,6 +18,7 @@ from poezio.xdg import DATA_HOME from poezio.tabs import DynamicConversationTab, StaticConversationTab, MucTab from omemo.exceptions import MissingBundleException +from slixmpp import JID from slixmpp.stanza import Message from slixmpp.exceptions import IqError, IqTimeout from slixmpp_omemo import PluginCouldNotLoad, MissingOwnKey, NoAvailableSession @@ -143,13 +144,18 @@ class Plugin(E2EEPlugin): # This is where you prompt your user to ask what to do. In # this bot we will automatically trust undecided recipients. self.core.xmpp['xep_0384'].trust(exn.bare_jid, exn.device, exn.ik) - except MissingBundleException as exn: - self.display_error( - 'Could not find keys for device "%d" of recipient "%s". Skipping.' % (exn.device, exn.bare_jid), - ) - device_list = expect_problems.setdefault(exn.bare_jid, []) - device_list.append(exn.device) # TODO: catch NoEligibleDevicesException + except EncryptionPrepareException as exn: + log.debug('FOO: EncryptionPrepareException: %r', exn.errors) + for error in exn.errors: + if isinstance(error, MissingBundleException): + self.display_error( + 'Could not find keys for device "%d" of recipient "%s". Skipping.' % + (error.device, error.bare_jid), + ) + jid = JID(error.bare_jid) + device_list = expect_problems.setdefault(jid, []) + device_list.append(error.device) except (IqError, IqTimeout) as exn: self.display_error( 'An error occured while fetching information on a recipient.\n%r' % exn, |