changeset 0d4a1370cfda in /home/hg/repos/gajim-plugins
author: lovetox <[email protected]>
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
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits