Commit 33354823 authored by Philipp Hörist's avatar Philipp Hörist

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.
parent a73f0273
......@@ -843,15 +843,15 @@ def on_video_button_toggled(self, widget):
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 @@ def _show_lock_image(self, visible, enc_type='',
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 @@ def _on_drag_data_received(self, widget, context, x, y, selection,
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 \
......
......@@ -396,8 +396,7 @@ def __init__(self, type_id, parent_win, widget_name, contact, acct,
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 @@ def add_window_actions(self):
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 @@ def activate_encryption(self, action, param):
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
......
......@@ -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')],
......
......@@ -2053,8 +2053,10 @@ def _nec_message_outgoing(self, obj):
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 @@ def _nec_gc_message_outgoing(self, obj):
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:
......
......@@ -770,14 +770,13 @@ def update_ui(self):
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)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment