changeset bcca3dc4f68d in /home/hg/repos/gajim-plugins
author: lovetox forenjunkie@chello.at branches: details:gajim-plugins?cmd=changeset;node=bcca3dc4f68d description: Warn user when new Fingerprints are in DB and refreshAuthLockSymbol()
diffstat:
omemo/__init__.py | 5 +++- omemo/omemo/liteidentitykeystore.py | 11 ++++++++ omemo/ui.py | 46 ++++++++++++++++++++++++++++-------- 3 files changed, 51 insertions(+), 11 deletions(-)
diffs (183 lines):
diff -r 7ea4d380f524 -r bcca3dc4f68d omemo/__init__.py --- a/omemo/__init__.py Sat Jun 04 16:19:18 2016 +0200 +++ b/omemo/__init__.py Sat Jun 04 17:10:50 2016 +0200 @@ -314,7 +314,7 @@ log.debug(account_name + " ⇒ Adding OMEMO ui for " + contact_jid) omemo_enabled = state.encryption.is_active(contact_jid) self.ui_list[account_name][contact_jid] = Ui(self, chat_control, - omemo_enabled) + omemo_enabled, state) else: log.warn(account_name + " ⇒ No OMEMO dev_keys for " + contact_jid)
@@ -429,6 +429,9 @@
if state.build_session(recipient_id, device_id, bundle_dict): log.warn(recipient_id + ' => session created') + # Warn User about new Fingerprints in DB if Chat Window is Open + if self.ui_list[account_name][recipient_id]: + self.ui_list[account_name][recipient_id].WarnIfUndecidedFingerprints()
@log_calls('OmemoPlugin') def announce_support(self, account): diff -r 7ea4d380f524 -r bcca3dc4f68d omemo/omemo/liteidentitykeystore.py --- a/omemo/omemo/liteidentitykeystore.py Sat Jun 04 16:19:18 2016 +0200 +++ b/omemo/omemo/liteidentitykeystore.py Sat Jun 04 17:10:50 2016 +0200 @@ -110,6 +110,17 @@ result.append((row[0], row[1], row[2], row[3])) return result
+ def getUndecidedFingerprints(self, jid): + q = "SELECT trust FROM identities " + \ + "WHERE recipient_id = '" + jid + "' AND trust = '2'" + c = self.dbConn.cursor() + + result = [] + c.execute(q) + result = c.fetchone() + + return result + def setTrust(self, _id, trust): q = "UPDATE identities SET trust = '" + str(trust) + "'" + \ "WHERE _id = '" + str(_id) + "'" diff -r 7ea4d380f524 -r bcca3dc4f68d omemo/ui.py --- a/omemo/ui.py Sat Jun 04 16:19:18 2016 +0200 +++ b/omemo/ui.py Sat Jun 04 17:10:50 2016 +0200 @@ -46,12 +46,13 @@
class Checkbox(gtk.CheckButton): - def __init__(self, plugin, chat_control): + def __init__(self, plugin, chat_control, ui): super(Checkbox, self).__init__(label='OMEMO') self.chat_control = chat_control self.contact = chat_control.contact self.plugin = plugin self.connect('clicked', self.on_click) + self.ui = ui
def on_click(self, widget): enabled = self.get_active() @@ -59,16 +60,14 @@ log.info(self.contact.account.name + ' ⇒ Enable OMEMO for ' + self.contact.jid) self.plugin.omemo_enable_for(self.contact) - self.chat_control._show_lock_image(True, 'OMEMO', - True, True, False) + self.ui.WarnIfUndecidedFingerprints() self.chat_control.print_conversation_line( u'OMEMO encryption enabled ', 'status', '', None) else: log.info(self.contact.account.name + ' ⇒ Disable OMEMO for ' + self.contact.jid) self.plugin.omemo_disable_for(self.contact) - self.chat_control._show_lock_image(False, 'OMEMO', False, True, - False) + self.ui.refreshAuthLockSymbol() self.chat_control.print_conversation_line( u'OMEMO encryption disabled', 'status', '', None)
@@ -84,11 +83,12 @@
class Ui(object):
- def __init__(self, plugin, chat_control, enabled): + def __init__(self, plugin, chat_control, enabled, state): self.contact = chat_control.contact self.chat_control = chat_control - self.checkbox = Checkbox(plugin, chat_control) + self.checkbox = Checkbox(plugin, chat_control, self) self.finger_button = FingerprintButton(plugin, self.contact) + self.state = state
if enabled: self.checkbox.set_active(True) @@ -107,8 +107,7 @@ else: log.info(self.contact.account.name + ' ⇒ Disable OMEMO for ' + self.contact.jid) - self.chat_control._show_lock_image(False, 'OMEMO', False, True, - False) + self.refreshAuthLockSymbol() self.chat_control.print_conversation_line( u'OMEMO encryption disabled', 'status', '', None)
@@ -121,6 +120,26 @@ 'Received plaintext message! ' + 'Your next message will still be encrypted!', 'status', '', None)
+ def WarnIfUndecidedFingerprints(self): + if self.state.store.identityKeyStore.getUndecidedFingerprints(self.contact.jid): + msg = "You received a new Fingerprint. " + \ + "Until you make a trust decision you can only " + \ + "receive encrypted Messages from that Device." + self.chat_control.print_conversation_line(msg, 'status', '', None) + self.refreshAuthLockSymbol() + + def refreshAuthLockSymbol(self): + if self.encryption_active(): + if self.state.store.identityKeyStore.getUndecidedFingerprints(self.contact.jid): + self.chat_control._show_lock_image(True, 'OMEMO', True, True, + False) + else: + self.chat_control._show_lock_image(True, 'OMEMO', True, True, + True) + else: + self.chat_control._show_lock_image(False, 'OMEMO', False, True, + False) +
class OMEMOConfigDialog(GajimPluginConfigDialog): def init(self): @@ -184,6 +203,8 @@
if dlg.run() == gtk.RESPONSE_YES: state.store.identityKeyStore.setTrust(_id, TRUSTED) + if self.plugin.ui_list[account][user]: + self.plugin.ui_list[account][user].refreshAuthLockSymbol() dlg.destroy()
self.update_context_list() @@ -214,6 +235,8 @@
if dlg.run() == gtk.RESPONSE_YES: state.store.identityKeyStore.setTrust(_id, UNTRUSTED) + if self.plugin.ui_list[account][user]: + self.plugin.ui_list[account][user].refreshAuthLockSymbol() dlg.destroy()
self.update_context_list() @@ -251,7 +274,7 @@ gtk.Clipboard(selection='PRIMARY').set_text('\n'.join(fprs))
def update_context_list(self): - trust = {None: "Not Set", 0: False, 1: True} + trust = {None: "Not Set", 0: False, 1: True, 2: "Undecided"} self.fpr_model.clear() active = self.B.get_object('account_combobox').get_active() account = self.account_store[active][0] @@ -290,6 +313,7 @@ buf += '{0} '.format(fpr[w:w + wordsize]) return buf.rstrip()
+ class FingerprintWindow(gtk.Dialog): def __init__(self, plugin, contact, parent=None): self.contact = contact @@ -345,6 +369,7 @@
if dlg.run() == gtk.RESPONSE_YES: state.store.identityKeyStore.setTrust(_id, TRUSTED) + self.plugin.ui_list[account][self.contact.jid].refreshAuthLockSymbol() dlg.destroy()
self.update_context_list() @@ -374,6 +399,7 @@
if dlg.run() == gtk.RESPONSE_YES: state.store.identityKeyStore.setTrust(_id, UNTRUSTED) + self.plugin.ui_list[account][self.contact.jid].refreshAuthLockSymbol() dlg.destroy()
self.update_context_list()