diff options
author | Philipp Hörist <forenjunkie@chello.at> | 2017-11-19 19:45:30 +0300 |
---|---|---|
committer | Philipp Hörist <forenjunkie@chello.at> | 2017-11-20 01:16:33 +0300 |
commit | d42fbc7dcf2264933239dd8f829cfd6a715a39d6 (patch) | |
tree | 44b2d9cf4267b0b55775614a407c253ec91eab63 | |
parent | 0a4769a2f0849dbb2bb9e46d24b2e17d9cf949be (diff) |
[omemo] Get devicelist from unknown contacts
As in contacts not in our roster and contacts we are not fully
subscribed to.
-rw-r--r-- | omemo/omemo_connection.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/omemo/omemo_connection.py b/omemo/omemo_connection.py index 517e690..60d8603 100644 --- a/omemo/omemo_connection.py +++ b/omemo/omemo_connection.py @@ -51,6 +51,7 @@ class OMEMOConnection: self.temp_groupchat = {} self.gc_message = {} self.query_for_bundles = [] + self.query_for_devicelists = [] app.ged.register_event_handler('pep-received', ged.PRECORE, self.handle_device_list_update) @@ -350,6 +351,19 @@ class OMEMOConnection: self.groupchat[room_jid][jid] = jid log.info('JID Added: %s', jid) + if not self.is_contact_in_roster(jid): + # Query Devicelists from JIDs not in our Roster + log.info('%s not in Roster, query devicelist...', jid) + self.query_devicelist(jid) + + def is_contact_in_roster(self, jid): + if jid == self.own_jid: + return True + contact = app.contacts.get_first_contact_from_jid(self.account, jid) + if contact is None: + return False + return contact.sub == 'both' + def gc_presence_received(self, event): if event.conn.name != self.account: return @@ -393,6 +407,11 @@ class OMEMOConnection: self.groupchat[room][nick] = jid log.debug('JID Added: %s', jid) + if not self.is_contact_in_roster(jid): + # Query Devicelists from JIDs not in our Roster + log.info('%s not in Roster, query devicelist...', jid) + self.query_devicelist(jid) + if '100' in event.status_code: # non-anonymous Room (Full JID) if room not in self.groupchat: @@ -761,6 +780,8 @@ class OMEMOConnection: def query_devicelist(self, jid=None, fetch_bundle=False): """ Query own devicelist from the server """ + if jid in self.query_for_devicelists: + return if jid is None: device_query = DevicelistQuery(self.own_jid) log.info('%s => Querry own devicelist ...', self.account) @@ -772,6 +793,7 @@ class OMEMOConnection: self.send_with_callback(device_query, self._handle_device_list_update, data={'fetch_bundle': fetch_bundle}) + self.query_for_devicelists.append(jid) def publish_bundle(self): """ Publish our bundle information to the PEP node """ |