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

Reply via email to