changeset f0fc5cb50a8c in /home/hg/repos/gajim-plugins
author: lovetox forenjunkie@chello.at branches: details:gajim-plugins?cmd=changeset;node=f0fc5cb50a8c description: Refactor publishing bundle information
diffstat:
omemo/__init__.py | 71 +++++++++++++++++++++++++++------------------------ omemo/omemo/state.py | 4 ++- 2 files changed, 40 insertions(+), 35 deletions(-)
diffs (172 lines):
diff -r 67652b4b3a2a -r f0fc5cb50a8c omemo/__init__.py --- a/omemo/__init__.py Sat Jul 23 00:59:45 2016 +0200 +++ b/omemo/__init__.py Sat Jul 23 02:26:58 2016 +0200 @@ -35,8 +35,9 @@ from .ui import Ui from .xmpp import ( NS_NOTIFY, NS_OMEMO, BundleInformationAnnouncement, BundleInformationQuery, - DeviceListAnnouncement, DevicelistQuery, DevicelistPEP, OmemoMessage, successful, - unpack_device_bundle, unpack_device_list_update, unpack_encrypted) + DeviceListAnnouncement, DevicelistQuery, DevicelistPEP, OmemoMessage, + successful, unpack_device_bundle, unpack_device_list_update, + unpack_encrypted)
iq_ids_to_callbacks = {} @@ -80,8 +81,10 @@ (ged.PRECORE, self.handle_outgoing_event), } self.config_dialog = ui.OMEMOConfigDialog(self) - self.gui_extension_points = {'chat_control': (self.connect_ui, self.disconnect_ui)} + self.gui_extension_points = {'chat_control': (self.connect_ui, + self.disconnect_ui)} SUPPORTED_PERSONAL_USER_EVENTS.append(DevicelistPEP) + self.plugin = self self.announced = []
@log_calls('OmemoPlugin') @@ -96,14 +99,8 @@
my_jid = gajim.get_jid_from_account(account)
- self.omemo_states[account] = OmemoState(my_jid, conn, account) - - if account not in self.announced: - if gajim.account_is_connected(account): - log.debug(account + - ' => Announce Support after Plugin Activation') - self.announced.append(account) - self.announce_support(account) + self.omemo_states[account] = OmemoState(my_jid, conn, account, + self.plugin)
return self.omemo_states[account]
@@ -118,21 +115,31 @@ log.info(str(account) + " => Gajim E2E encryption disabled")
@log_calls('OmemoPlugin') - def signed_in(self, show): + def signed_in(self, event): """ On sign in announce OMEMO support for each account. """ - account = show.conn.name + account = event.conn.name log.debug(account + ' => Announce Support after Sign In') self.announced.append(account) - self.announce_support(account) + self.publish_bundle(account) + self.query_own_devicelist(account)
@log_calls('OmemoPlugin') def activate(self): if NS_NOTIFY not in gajim.gajim_common_features: gajim.gajim_common_features.append(NS_NOTIFY) self._compute_caps_hash() + # Publish bundle information + for account in gajim.connections: + if account not in self.announced: + if gajim.account_is_connected(account): + log.debug(account + + ' => Announce Support after Plugin Activation') + self.announced.append(account) + self.publish_bundle(account) + self.query_own_devicelist(account)
@log_calls('OmemoPlugin') def deactivate(self): @@ -322,7 +329,7 @@ devices_list = list(set(devices_list)) state.set_own_devices(devices_list)
- log.debug(account_name + ' => Publishing own devices_list ' + str( + log.debug(account_name + ' => Publishing own Devices: ' + str( devices_list)) iq = DeviceListAnnouncement(devices_list) gajim.connections[account_name].connection.send(iq) @@ -455,12 +462,18 @@ WarnIfUndecidedFingerprints()
@log_calls('OmemoPlugin') - def announce_support(self, account): - """ Announce OMEMO support for an account via PEP. + def query_own_devicelist(self, account): + my_jid = gajim.get_jid_from_account(account) + iq = DevicelistQuery(my_jid) + gajim.connections[account].connection.send(iq) + log.info(account + ' => Querry own devicelist ...') + id_ = str(iq.getAttr("id")) + iq_ids_to_callbacks[id_] = lambda stanza: \ + self.handle_devicelist_result(account, stanza)
- In order for other clients/devices to be able to initiate a session - with gajim, it first has to announce itself by adding its device ID - to the devicelist PEP node. + @log_calls('OmemoPlugin') + def publish_bundle(self, account): + """ Publish our bundle information to the PEP node.
Parameters ---------- @@ -476,16 +489,13 @@ iq = BundleInformationAnnouncement(state.bundle, state.own_device_id) gajim.connections[account].connection.send(iq) id_ = str(iq.getAttr("id")) - log.info(account + " => Announcing OMEMO support via PEP") + log.info(account + " => Publishing bundle ...") iq_ids_to_callbacks[id_] = lambda stanza: \ - self.handle_announcement_result(account, stanza) + self.handle_publish_result(account, stanza)
@log_calls('OmemoPlugin') - def handle_announcement_result(self, account, stanza): - """ Query own device list if announcement was successfull. - - If the OMEMO support announcement was successfull own device - list is queried. + def handle_publish_result(self, account, stanza): + """ Log if publishing our bundle was successful
Parameters ---------- @@ -494,15 +504,8 @@ stanza The stanza object received from callback """ - my_jid = gajim.get_jid_from_account(account) - iq = DevicelistQuery(my_jid) if successful(stanza): log.info(account + ' => Publishing bundle was successful') - gajim.connections[account].connection.send(iq) - log.info(account + ' => Querry own Devicelist') - id_ = str(iq.getAttr("id")) - iq_ids_to_callbacks[id_] = lambda stanza: \ - self.handle_devicelist_result(account, stanza) else: log.error(account + ' => Publishing bundle was NOT successful')
diff -r 67652b4b3a2a -r f0fc5cb50a8c omemo/omemo/state.py --- a/omemo/omemo/state.py Sat Jul 23 00:59:45 2016 +0200 +++ b/omemo/omemo/state.py Sat Jul 23 02:26:58 2016 +0200 @@ -47,12 +47,13 @@
class OmemoState: - def __init__(self, own_jid, connection, account): + def __init__(self, own_jid, connection, account, plugin): """ Instantiates an OmemoState object.
:param connection: an :py:class:`sqlite3.Connection` """ self.account = account + self.plugin = plugin self.session_ciphers = {} self.own_jid = own_jid self.device_ids = {} @@ -356,3 +357,4 @@ self.store.preKeyStore.generateNewPreKeys(newKeys) log.info(self.account + ' => ' + str(newKeys) + ' PreKeys created') + self.plugin.publish_bundle(self.account)