From 01c92b9fe8ec76377f326e44dd2bb9b2fe39f627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Fri, 22 Feb 2019 22:30:12 +0100 Subject: [PATCH] [omemo] Show correctly fingerprints in MUC --- omemo/backend/liteaxolotlstore.py | 24 +++++++++++++++++++----- omemo/gtk/key.py | 14 +++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/omemo/backend/liteaxolotlstore.py b/omemo/backend/liteaxolotlstore.py index 5d98b8d..af1acd3 100644 --- a/omemo/backend/liteaxolotlstore.py +++ b/omemo/backend/liteaxolotlstore.py @@ -329,14 +329,19 @@ class LiteAxolotlStore(AxolotlStore): self._con.commit() def getSessionsFromJid(self, recipientId): - query = '''SELECT _id, recipient_id as "recipient_id [jid]", - device_id, record, active - from sessions WHERE recipient_id = ?''' + query = '''SELECT recipient_id as "recipient_id [jid]", + device_id, + record as "record [session_record]", + active + FROM sessions WHERE recipient_id = ?''' return self._con.execute(query, (recipientId,)).fetchall() def getSessionsFromJids(self, recipientIds): - query = '''SELECT _id, recipient_id as "recipient_id [jid]", - device_id, record, active from sessions + query = '''SELECT recipient_id as "recipient_id [jid]", + device_id, + record as "record [session_record]", + active + FROM sessions WHERE recipient_id IN ({})'''.format( ', '.join(['?'] * len(recipientIds))) return self._con.execute(query, recipientIds).fetchall() @@ -478,6 +483,15 @@ class LiteAxolotlStore(AxolotlStore): WHERE recipient_id = ? ORDER BY trust ASC''' return self._con.execute(query, (jid,)).fetchall() + def getMucFingerprints(self, jids): + query = ''' + SELECT recipient_id as "recipient_id [jid]", + public_key as "public_key [pk]", trust FROM identities + WHERE recipient_id IN ({}) ORDER BY trust ASC + '''.format(', '.join(['?'] * len(jids))) + + return self._con.execute(query, jids).fetchall() + def getTrustedFingerprints(self, jid): query = '''SELECT public_key as "public_key [pk]" FROM identities WHERE recipient_id = ? AND trust = ?''' diff --git a/omemo/gtk/key.py b/omemo/gtk/key.py index 8afd41a..8985e7b 100644 --- a/omemo/gtk/key.py +++ b/omemo/gtk/key.py @@ -117,8 +117,6 @@ class KeyDialog(Gtk.Dialog): self._load_fingerprints(self._contact.jid, self._groupchat is True) def _load_fingerprints(self, contact_jid, groupchat=False): - from axolotl.state.sessionrecord import SessionRecord - if groupchat: members = list(self._omemo.backend.get_muc_members(contact_jid)) sessions = self._omemo.backend.storage.getSessionsFromJids(members) @@ -126,17 +124,19 @@ class KeyDialog(Gtk.Dialog): sessions = self._omemo.backend.storage.getSessionsFromJid(contact_jid) rows = {} - results = self._omemo.backend.storage.getFingerprints(contact_jid) + if groupchat: + results = self._omemo.backend.storage.getMucFingerprints(members) + else: + results = self._omemo.backend.storage.getFingerprints(contact_jid) for result in results: rows[result.public_key] = KeyRow(result.recipient_id, result.public_key, result.trust) for item in sessions: - session_record = SessionRecord(serialized=item.record) - identity_key = session_record.getSessionState().getRemoteIdentityKey() - if identity_key is None: - continue + if item.record.isFresh(): + return + identity_key = item.record.getSessionState().getRemoteIdentityKey() identity_key = IdentityKeyExtended(identity_key.getPublicKey()) try: key_row = rows[identity_key]