Skip to content
Snippets Groups Projects
Commit 6210cb6c authored by Philipp Hörist's avatar Philipp Hörist
Browse files

Add msg decryption from sid in GC as last resort

parent a70aed9c
No related branches found
No related tags found
No related merge requests found
......@@ -367,6 +367,10 @@ class OmemoPlugin(GajimPlugin):
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 @@ class OmemoPlugin(GajimPlugin):
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)
......
......@@ -133,6 +133,9 @@ class LiteAxolotlStore(AxolotlStore):
# 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)
......
......@@ -48,6 +48,14 @@ class LiteSessionStore(SessionStore):
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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment