diff options
author | Philipp Hörist <forenjunkie@chello.at> | 2017-05-17 17:58:11 +0300 |
---|---|---|
committer | Philipp Hörist <forenjunkie@chello.at> | 2017-05-18 22:42:40 +0300 |
commit | 33354823458c761ec7044f4e61f27b01db2f5cf1 (patch) | |
tree | 3a7e8df5eb2f98b3a7225423df3ff2e5f10d6328 /src | |
parent | a73f02735a7f20a1559719da97738d0b2919b345 (diff) |
Add 'encryption' config options group
We have to save the value per account and contact, because otherwise
it could lead to problems if a jid is added to more than one account.
As key this uses a string in the form of 'Account-BareJid'.
The config option group 'contacts' is not used because there are values
like 'speller_language' that make more sense to set on a Jid basis, rather than a
Account-Jid basis.
Treat an empty config value or no config value as 'disabled', instead
of writing a config value of 'disabled'. This has the benefit that we
dont have to write config values for contacts were we dont use encryption.
Diffstat (limited to 'src')
-rw-r--r-- | src/chat_control.py | 15 | ||||
-rw-r--r-- | src/chat_control_base.py | 32 | ||||
-rw-r--r-- | src/common/config.py | 3 | ||||
-rw-r--r-- | src/common/connection.py | 12 | ||||
-rw-r--r-- | src/groupchat_control.py | 9 |
5 files changed, 39 insertions, 32 deletions
diff --git a/src/chat_control.py b/src/chat_control.py index e838bc323..35ffd36f1 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -843,15 +843,15 @@ class ChatControl(ChatControlBase): self.on_jingle_button_toggled(widget, 'video') def set_lock_image(self): - visible = self.encryption != 'disabled' loggable = self.session and self.session.is_loggable() - encryption_state = {'visible': visible, + encryption_state = {'visible': self.encryption is not None, 'enc_type': self.encryption, 'authenticated': False} - gajim.plugin_manager.gui_extension_point( - 'encryption_state' + self.encryption, self, encryption_state) + if self.encryption: + gajim.plugin_manager.gui_extension_point( + 'encryption_state' + self.encryption, self, encryption_state) self._show_lock_image(**encryption_state) @@ -875,8 +875,9 @@ class ChatControl(ChatControlBase): self.lock_image.set_sensitive(visible) def _on_authentication_button_clicked(self, widget): - gajim.plugin_manager.gui_extension_point( - 'encryption_dialog' + self.encryption, self) + if self.encryption: + gajim.plugin_manager.gui_extension_point( + 'encryption_dialog' + self.encryption, self) def send_message(self, message, keyID='', chatstate=None, xhtml=None, process_commands=True, attention=False): @@ -1401,7 +1402,7 @@ class ChatControl(ChatControlBase): def _on_message_tv_buffer_changed(self, textbuffer): super()._on_message_tv_buffer_changed(textbuffer) - if textbuffer.get_char_count(): + if textbuffer.get_char_count() and self.encryption: gajim.plugin_manager.gui_extension_point( 'typing' + self.encryption, self) if (not self.session or not self.session.status) and \ diff --git a/src/chat_control_base.py b/src/chat_control_base.py index 299dda9ca..662fa65d6 100644 --- a/src/chat_control_base.py +++ b/src/chat_control_base.py @@ -396,8 +396,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): self._on_window_motion_notify) self.handlers[id_] = parent_win.window - self.encryption = 'disabled' - self.set_encryption_state() + self.encryption = self.get_encryption_state() if self.parent_win: self.add_window_actions() @@ -422,16 +421,19 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): action = Gio.SimpleAction.new_stateful( "%s-encryptiongroup" % self.contact.jid, GLib.VariantType.new("s"), - GLib.Variant("s", self.encryption)) + GLib.Variant("s", self.encryption or 'disabled')) action.connect("change-state", self.activate_encryption) self.parent_win.window.add_action(action) def activate_encryption(self, action, param): encryption = param.get_string() + if encryption == 'disabled': + encryption = None + if self.encryption == encryption: return - if encryption != 'disabled': + if encryption: plugin = gajim.plugin_manager.encryption_plugins[encryption] if not plugin.activate_encryption(self): return @@ -439,19 +441,19 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): if not self.widget_name == 'groupchat_control': self.terminate_esessions() action.set_state(param) - gajim.config.set_per( - 'contacts', self.contact.jid, 'encryption', encryption) - self.encryption = encryption + self.set_encryption_state(encryption) self.set_lock_image() - def set_encryption_state(self): - enc = gajim.config.get_per('contacts', self.contact.jid, 'encryption') - if enc not in gajim.plugin_manager.encryption_plugins: - self.encryption = 'disabled' - gajim.config.set_per( - 'contacts', self.contact.jid, 'encryption', 'disabled') - else: - self.encryption = enc + def set_encryption_state(self, encryption): + config_key = '%s-%s' % (self.account, self.contact.jid) + self.encryption = encryption + gajim.config.set_per('encryption', config_key, + 'encryption', self.encryption or '') + + def get_encryption_state(self): + config_key = '%s-%s' % (self.account, self.contact.jid) + state = gajim.config.get_per('encryption', config_key, 'encryption') + return state or None def set_speller(self): # now set the one the user selected diff --git a/src/common/config.py b/src/common/config.py index 9c8585fed..cde1f8138 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -480,9 +480,10 @@ class Config: 'state_muc_directed_msg_color': [ opt_color, 'red2' ], }, {}), 'contacts': ({ - 'encryption': [ opt_str, '', _('Encryption used for this contact.')], 'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')], }, {}), + 'encryption': ({'encryption': [ opt_str, '', _('The currently active encryption for that contact')], + },{}), 'rooms': ({ 'speller_language': [ opt_str, '', _('Language for which we want to check misspelled words')], 'muc_restore_lines': [opt_int, -2, _('How many lines to request from server when entering a groupchat. -1 means no limit, -2 means global value')], diff --git a/src/common/connection.py b/src/common/connection.py index 094625bb5..b8a1b4604 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -2053,8 +2053,10 @@ class Connection(CommonConnection, ConnectionHandlers): def _nec_stanza_message_outgoing(self, obj): if obj.conn.name != self.name: return - encryption = gajim.config.get_per('contacts', obj.jid, 'encryption') - if encryption != 'disabled': + + config_key = '%s-%s' % (self.name, obj.jid) + encryption = gajim.config.get_per('encryption', config_key, 'encryption') + if encryption: gajim.plugin_manager.gui_extension_point( 'encrypt' + encryption, self, obj, self.send_message) else: @@ -2672,8 +2674,10 @@ class Connection(CommonConnection, ConnectionHandlers): def _nec_gc_stanza_message_outgoing(self, obj): if obj.conn.name != self.name: return - encryption = gajim.config.get_per('contacts', obj.jid, 'encryption') - if encryption != 'disabled': + + config_key = '%s-%s' % (self.name, obj.jid) + encryption = gajim.config.get_per('encryption', config_key, 'encryption') + if encryption: gajim.plugin_manager.gui_extension_point( 'gc_encrypt' + encryption, self, obj, self.send_gc_message) else: diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 17f30a3c0..557bc642d 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -770,14 +770,13 @@ class GroupchatControl(ChatControlBase): self.draw_contact(nick) def set_lock_image(self): - visible = self.encryption != 'disabled' - - encryption_state = {'visible': visible, + encryption_state = {'visible': self.encryption is not None, 'enc_type': self.encryption, 'authenticated': False} - gajim.plugin_manager.gui_extension_point( - 'encryption_state' + self.encryption, self, encryption_state) + if self.encryption: + gajim.plugin_manager.gui_extension_point( + 'encryption_state' + self.encryption, self, encryption_state) self._show_lock_image(**encryption_state) |