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