changeset 0d4a1370cfda in /home/hg/repos/gajim-plugins author: lovetox <forenjun...@chello.at> branches: details:gajim-plugins?cmd=changeset;node=0d4a1370cfda description: Add msg decryption from sid in GC as last resort
diffstat: omemo/__init__.py | 26 +++++++++++++++++++------- omemo/omemo/liteaxolotlstore.py | 3 +++ omemo/omemo/litesessionstore.py | 8 ++++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diffs (83 lines): diff -r 4a5f4cca0e4d -r 0d4a1370cfda omemo/__init__.py --- a/omemo/__init__.py Mon Oct 17 21:19:01 2016 +0200 +++ b/omemo/__init__.py Tue Oct 18 17:35:46 2016 +0200 @@ -367,6 +367,10 @@ else: from_jid = str(msg.stanza.getFrom()) + self.print_msg_to_log(msg.stanza) + msg_dict = unpack_encrypted(msg.stanza.getTag + ('encrypted', namespace=NS_OMEMO)) + if msg.mtype == 'groupchat': address_tag = msg.stanza.getTag('addresses', namespace=NS_ADDRESS) @@ -374,22 +378,30 @@ from_jid = address_tag.getTag( 'address', attrs={'type': 'ofrom'}).getAttr('jid') else: - from_jid = self.groupchat[msg.jid][msg.resource] + try: + from_jid = self.groupchat[msg.jid][msg.resource] + except KeyError: + log.debug('Groupchat: Last resort trying to ' + 'find SID in DB') + from_jid = state.store. \ + getJidFromDevice(msg_dict['sid']) + if not from_jid: + log.error(account + + ' => Cant decrypt GroupChat Message ' + 'from ' + msg.resource) + return True + self.groupchat[msg.jid][msg.resource] = from_jid log.debug('GroupChat Message from: %s', from_jid) - self.print_msg_to_log(msg.stanza) - msg_dict = unpack_encrypted(msg.stanza.getTag - ('encrypted', namespace=NS_OMEMO)) - plaintext = '' if msg_dict['sid'] == state.own_device_id: if msg_dict['payload'] in self.gc_message: plaintext = self.gc_message[msg_dict['payload']] del self.gc_message[msg_dict['payload']] else: - log.error(account + ' => Cant decrypt GroupChat Message ' - 'from ' + from_jid) + log.error(account + ' => Cant decrypt own GroupChat ' + 'Message') else: msg_dict['sender_jid'] = gajim. \ get_jid_without_resource(from_jid) diff -r 4a5f4cca0e4d -r 0d4a1370cfda omemo/omemo/liteaxolotlstore.py --- a/omemo/omemo/liteaxolotlstore.py Mon Oct 17 21:19:01 2016 +0200 +++ b/omemo/omemo/liteaxolotlstore.py Tue Oct 18 17:35:46 2016 +0200 @@ -133,6 +133,9 @@ # TODO Reuse this return self.sessionStore.getSubDeviceSessions(recepientId) + def getJidFromDevice(self, device_id): + return self.sessionStore.getJidFromDevice(device_id) + def storeSession(self, recepientId, deviceId, sessionRecord): self.sessionStore.storeSession(recepientId, deviceId, sessionRecord) diff -r 4a5f4cca0e4d -r 0d4a1370cfda omemo/omemo/litesessionstore.py --- a/omemo/omemo/litesessionstore.py Mon Oct 17 21:19:01 2016 +0200 +++ b/omemo/omemo/litesessionstore.py Tue Oct 18 17:35:46 2016 +0200 @@ -48,6 +48,14 @@ deviceIds = [r[0] for r in result] return deviceIds + def getJidFromDevice(self, device_id): + q = "SELECT recipient_id from sessions WHERE device_id = ?" + c = self.dbConn.cursor() + c.execute(q, (device_id, )) + result = c.fetchone() + + return result[0] + def getActiveDeviceTuples(self): q = "SELECT recipient_id, device_id FROM sessions WHERE active = 1" c = self.dbConn.cursor() _______________________________________________ Commits mailing list Commits@gajim.org https://lists.gajim.org/cgi-bin/listinfo/commits