changeset 564fd2aec35f in /home/hg/repos/gajim-plugins
author: lovetox lovetox@users.noreply.github.com branches: details:gajim-plugins?cmd=changeset;node=564fd2aec35f description: Rework publishing devicelists & handle duplicates (#75)
* Rework publishing own devicelist
* Dont allow duplicates in received device lists
A bug in a client could lead to a devicelist that has duplicates in it. We should not transfer these duplicates into our devicelist of the contact.
diffstat:
omemo/__init__.py | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-)
diffs (44 lines):
diff -r 153911c5d6e9 -r 564fd2aec35f omemo/__init__.py --- a/omemo/__init__.py Thu Jul 07 21:03:52 2016 +0200 +++ b/omemo/__init__.py Sat Jul 16 10:49:41 2016 +0200 @@ -282,14 +282,12 @@ state.own_devices): # Our own device_id is not in the list, it could be # overwritten by some other client? - # also remove duplicates - devices_list = list(set(state.own_devices)) - devices_list.append(state.own_device_id) + # Is a Device ID duplicated? self.publish_own_devices_list(account_name, state) else: log.info(account_name + ' => Received device list for ' + contact_jid + ':' + str(devices_list)) - state.set_devices(contact_jid, devices_list) + state.set_devices(contact_jid, set(devices_list)) state.store.sessionStore.setActiveState(devices_list, contact_jid) if (account_name in self.ui_list and contact_jid not in self.ui_list[account_name]): @@ -307,8 +305,11 @@
@log_calls('OmemoPlugin') def publish_own_devices_list(self, account_name, state): + devices_list = state.own_devices - devices_list += [state.own_device_id] + devices_list.append(state.own_device_id) + devices_list = list(set(devices_list)) + state.set_own_devices(devices_list)
log.debug(account_name + ' => Publishing own devices_list ' + str( devices_list)) @@ -517,9 +518,7 @@ state.own_devices): # Our own device_id is not in the list, it could be # overwritten by some other client? - # also remove duplicates - devices_list = list(set(state.own_devices)) - devices_list.append(state.own_device_id) + # Is a Device ID duplicated? self.publish_own_devices_list(account, state) else: log.error(account + ' => Devicelistquery was NOT successful')