changeset 31aba74f8a17 in /home/hg/repos/gajim-plugins

author: lovetox <[email protected]>
branches: 
details:gajim-plugins?cmd=changeset;node=31aba74f8a17
description: Various improvements for Groupchat

diffstat:

 omemo/__init__.py    |  32 +++++++++++++++++++++-----------
 omemo/omemo/state.py |  10 +++++++---
 2 files changed, 28 insertions(+), 14 deletions(-)

diffs (130 lines):

diff -r ec7f95eaa552 -r 31aba74f8a17 omemo/__init__.py
--- a/omemo/__init__.py Tue Oct 11 15:05:38 2016 +0200
+++ b/omemo/__init__.py Tue Oct 11 20:50:28 2016 +0200
@@ -29,7 +29,7 @@
 from plugins import GajimPlugin
 from plugins.helpers import log_calls
 from nbxmpp.simplexml import Node
-from nbxmpp import NS_CORRECT
+from nbxmpp import NS_CORRECT, NS_ADDRESS
 
 from . import ui
 from .ui import Ui
@@ -138,6 +138,7 @@
                 (ged.PRECORE, self.gc_config_changed_received)
             self.events_handlers['muc-admin-received'] =\
                 (ged.PRECORE, self.room_memberlist_received)
+
         self.config_dialog = ui.OMEMOConfigDialog(self)
         self.gui_extension_points = {'chat_control': (self.connect_ui,
                                                       self.disconnect_ui),
@@ -367,7 +368,15 @@
                 from_jid = str(msg.stanza.getFrom())
 
             if msg.mtype == 'groupchat':
-                from_jid = self.groupchat[msg.jid][msg.resource]
+                address_tag = msg.stanza.getTag('addresses',
+                                                namespace=NS_ADDRESS)
+                if address_tag:  # History Message from MUC
+                    from_jid = address_tag.getTag(
+                        'address', attrs={'type': 'ofrom'}).getAttr('jid')
+                else:
+                    from_jid = self.groupchat[msg.jid][msg.resource]
+
+                log.debug('GroupChat Message from: %s', from_jid)
 
             self.print_msg_to_log(msg.stanza)
             msg_dict = unpack_encrypted(msg.stanza.getTag
@@ -394,10 +403,11 @@
             # gets dropped from history
             msg.stanza.setBody(plaintext)
 
-            contact_jid = gajim.get_jid_without_resource(from_jid)
-            if account in self.ui_list and \
-                    contact_jid in self.ui_list[account]:
-                self.ui_list[account][contact_jid].activate_omemo()
+            if msg.mtype != 'groupchat':
+                contact_jid = gajim.get_jid_without_resource(from_jid)
+                if account in self.ui_list and \
+                        contact_jid in self.ui_list[account]:
+                    self.ui_list[account][contact_jid].activate_omemo()
             return False
 
         elif msg.stanza.getTag('body'):
@@ -490,8 +500,7 @@
             if room not in self.groupchat:
                 self.groupchat[room] = self.temp_groupchat[room]
 
-            log.debug('PRESENCE RECEIVED')
-            log.debug(room)
+            log.debug('OMEMO capable Room found: %s', room)
 
             gajim.connections[account].get_affiliation_list(room, 'owner')
             gajim.connections[account].get_affiliation_list(room, 'admin')
@@ -499,7 +508,6 @@
 
             self.ui_list[account][room].sensitive(True)
 
-
     @log_calls('OmemoPlugin')
     def gc_config_changed_received(self, event):
         account = event.conn.name
@@ -540,9 +548,11 @@
             if event.msg_iq.getTag('replace', namespace=NS_CORRECT):
                 event.msg_iq.delChild('encrypted', attrs={'xmlns': NS_OMEMO})
 
-            plaintext = event.msg_iq.getBody().encode('utf8')
+            plaintext = event.msg_iq.getBody()
             msg_dict = state.create_gc_msg(
-                gajim.get_jid_from_account(account), to_jid, plaintext)
+                gajim.get_jid_from_account(account),
+                to_jid,
+                plaintext.encode('utf8'))
             if not msg_dict:
                 return True
 
diff -r ec7f95eaa552 -r 31aba74f8a17 omemo/omemo/state.py
--- a/omemo/omemo/state.py      Tue Oct 11 15:05:38 2016 +0200
+++ b/omemo/omemo/state.py      Tue Oct 11 20:50:28 2016 +0200
@@ -271,6 +271,7 @@
         iv = get_random_bytes(16)
         encrypted_keys = {}
         room = jid
+        encrypted_jids = []
 
         devices_list = self.device_list_for(jid, True)
 
@@ -286,6 +287,8 @@
             jid_to = self.plugin.groupchat[room][nick]
             if jid_to == self.own_jid:
                 continue
+            if jid_to in encrypted_jids:  # We already encrypted to this JID
+                continue
             for rid, cipher in self.session_ciphers[jid_to].items():
                 try:
                     if self.isTrusted(jid_to, rid) == TRUSTED:
@@ -298,7 +301,7 @@
                     log.exception('ERROR:')
                     log.warning('Failed to find key for device ' +
                                 str(rid))
-
+            encrypted_jids.append(jid_to)
         if len(encrypted_keys) == 0:
             log_msg = 'Encrypted keys empty'
             log.error(log_msg)
@@ -309,12 +312,13 @@
         for dev in my_other_devices:
             try:
                 cipher = self.get_session_cipher(from_jid, dev)
-                if self.isTrusted(jid_to, dev) == TRUSTED:
+                if self.isTrusted(from_jid, dev) == TRUSTED:
                     encrypted_keys[dev] = cipher.encrypt(key).serialize()
                 else:
                     log.debug('Skipped own Device because Trust is: ' +
-                              str(self.isTrusted(jid_to, dev)))
+                              str(self.isTrusted(from_jid, dev)))
             except:
+                log.exception('ERROR:')
                 log.warning('Failed to find key for device ' + str(dev))
 
         payload = encrypt(key, iv, plaintext)
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to