changeset 1f50cf60b330 in /home/hg/repos/gajim-plugins
author: lovetox <[email protected]>
branches:
details:gajim-plugins?cmd=changeset;node=1f50cf60b330
description: Add delete fingerprint button
diffstat:
omemo/config_dialog.ui | 17 +++
omemo/fpr_dialog.ui | 2 +
omemo/omemo/liteaxolotlstore.py | 12 ++
omemo/omemo/liteidentitykeystore.py | 13 +-
omemo/omemo/litesessionstore.py | 39 +++----
omemo/ui.py | 198 ++++++++++++++++++++++-------------
6 files changed, 183 insertions(+), 98 deletions(-)
diffs (truncated from 474 to 300 lines):
diff -r da1eb841ff4b -r 1f50cf60b330 omemo/config_dialog.ui
--- a/omemo/config_dialog.ui Sun Sep 04 00:46:47 2016 +0200
+++ b/omemo/config_dialog.ui Tue Sep 06 22:50:18 2016 +0200
@@ -24,6 +24,8 @@
<column type="gchararray"/>
<!-- column-name fingerprint -->
<column type="gchararray"/>
+ <!-- column-name deviceid -->
+ <column type="gint"/>
</columns>
</object>
<object class="GtkNotebook" id="notebook1">
@@ -261,6 +263,21 @@
<property name="position">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkButton" id="delfprbutton">
+ <property name="label" translatable="yes">Delete
Fingerprint</property>
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <signal name="clicked" handler="delfpr_button_clicked"
swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff -r da1eb841ff4b -r 1f50cf60b330 omemo/fpr_dialog.ui
--- a/omemo/fpr_dialog.ui Sun Sep 04 00:46:47 2016 +0200
+++ b/omemo/fpr_dialog.ui Tue Sep 06 22:50:18 2016 +0200
@@ -18,6 +18,8 @@
<column type="gchararray"/>
<!-- column-name fingerprint -->
<column type="gchararray"/>
+ <!-- column-name deviceid -->
+ <column type="gint"/>
</columns>
</object>
<object class="GtkNotebook" id="notebook1">
diff -r da1eb841ff4b -r 1f50cf60b330 omemo/omemo/liteaxolotlstore.py
--- a/omemo/omemo/liteaxolotlstore.py Sun Sep 04 00:46:47 2016 +0200
+++ b/omemo/omemo/liteaxolotlstore.py Tue Sep 06 22:50:18 2016 +0200
@@ -83,10 +83,16 @@
def saveIdentity(self, recepientId, identityKey):
self.identityKeyStore.saveIdentity(recepientId, identityKey)
+ def deleteIdentity(self, recipientId, identityKey):
+ self.identityKeyStore.deleteIdentity(recipientId, identityKey)
+
def isTrustedIdentity(self, recepientId, identityKey):
return self.identityKeyStore.isTrustedIdentity(recepientId,
identityKey)
+ def setTrust(self, identityKey, trust):
+ return self.identityKeyStore.setTrust(identityKey, trust)
+
def getTrustedFingerprints(self, jid):
return self.identityKeyStore.getTrustedFingerprints(jid)
@@ -139,6 +145,12 @@
def deleteAllSessions(self, recepientId):
self.sessionStore.deleteAllSessions(recepientId)
+ def getSessionsFromJid(self, recipientId):
+ return self.sessionStore.getSessionsFromJid(recipientId)
+
+ def getAllSessions(self):
+ return self.sessionStore.getAllSessions()
+
def loadSignedPreKey(self, signedPreKeyId):
return self.signedPreKeyStore.loadSignedPreKey(signedPreKeyId)
diff -r da1eb841ff4b -r 1f50cf60b330 omemo/omemo/liteidentitykeystore.py
--- a/omemo/omemo/liteidentitykeystore.py Sun Sep 04 00:46:47 2016 +0200
+++ b/omemo/omemo/liteidentitykeystore.py Tue Sep 06 22:50:18 2016 +0200
@@ -86,6 +86,13 @@
return result is not None
+ def deleteIdentity(self, recipientId, identityKey):
+ q = "DELETE FROM identities WHERE recipient_id = ? AND public_key = ?"
+ c = self.dbConn.cursor()
+ c.execute(q, (recipientId,
+ identityKey.getPublicKey().serialize()))
+ self.dbConn.commit()
+
def isTrustedIdentity(self, recipientId, identityKey):
q = "SELECT trust FROM identities WHERE recipient_id = ? " \
"AND public_key = ?"
@@ -160,8 +167,8 @@
c.execute(q, fingerprints)
self.dbConn.commit()
- def setTrust(self, _id, trust):
- q = "UPDATE identities SET trust = ? WHERE _id = ?"
+ def setTrust(self, identityKey, trust):
+ q = "UPDATE identities SET trust = ? WHERE public_key = ?"
c = self.dbConn.cursor()
- c.execute(q, (trust, _id))
+ c.execute(q, (trust, identityKey.getPublicKey().serialize()))
self.dbConn.commit()
diff -r da1eb841ff4b -r 1f50cf60b330 omemo/omemo/litesessionstore.py
--- a/omemo/omemo/litesessionstore.py Sun Sep 04 00:46:47 2016 +0200
+++ b/omemo/omemo/litesessionstore.py Tue Sep 06 22:50:18 2016 +0200
@@ -82,6 +82,23 @@
self.dbConn.cursor().execute(q, (recipientId, ))
self.dbConn.commit()
+ def getAllSessions(self):
+ q = "SELECT _id, recipient_id, device_id, record, active from sessions"
+ c = self.dbConn.cursor()
+ result = []
+ for row in c.execute(q):
+ result.append((row[0], row[1], row[2], row[3], row[4]))
+ return result
+
+ def getSessionsFromJid(self, recipientId):
+ q = "SELECT _id, recipient_id, device_id, record, active from
sessions" \
+ " WHERE recipient_id = ?"
+ c = self.dbConn.cursor()
+ result = []
+ for row in c.execute(q, (recipientId,)):
+ result.append((row[0], row[1], row[2], row[3], row[4]))
+ return result
+
def setActiveState(self, deviceList, jid):
c = self.dbConn.cursor()
@@ -96,28 +113,6 @@
c.execute(q, deviceList)
self.dbConn.commit()
- def getActiveSessionsKeys(self, recipientId):
- q = "SELECT record FROM sessions WHERE active = 1 AND recipient_id = ?"
- c = self.dbConn.cursor()
- result = []
- for row in c.execute(q, (recipientId,)):
- public_key = (SessionRecord(serialized=row[0]).
- getSessionState().getRemoteIdentityKey().
- getPublicKey())
- result.append(public_key.serialize())
- return result
-
- def getAllActiveSessionsKeys(self):
- q = "SELECT record FROM sessions WHERE active = 1"
- c = self.dbConn.cursor()
- result = []
- for row in c.execute(q):
- public_key = (SessionRecord(serialized=row[0]).
- getSessionState().getRemoteIdentityKey().
- getPublicKey())
- result.append(public_key.serialize())
- return result
-
def getInactiveSessionsKeys(self, recipientId):
q = "SELECT record FROM sessions WHERE active = 0 AND recipient_id = ?"
c = self.dbConn.cursor()
diff -r da1eb841ff4b -r 1f50cf60b330 omemo/ui.py
--- a/omemo/ui.py Sun Sep 04 00:46:47 2016 +0200
+++ b/omemo/ui.py Tue Sep 06 22:50:18 2016 +0200
@@ -28,6 +28,7 @@
import gtkgui_helpers
from common import gajim
from plugins.gui import GajimPluginConfigDialog
+from axolotl.state.sessionrecord import SessionRecord
# pylint: enable=import-error
log = logging.getLogger('gajim.plugin_system.omemo')
@@ -260,7 +261,8 @@
self.fpr_model = gtk.ListStore(gobject.TYPE_INT,
gobject.TYPE_STRING,
gobject.TYPE_STRING,
- gobject.TYPE_STRING)
+ gobject.TYPE_STRING,
+ gobject.TYPE_INT)
self.device_model = gtk.ListStore(gobject.TYPE_STRING)
@@ -290,6 +292,46 @@
def account_combobox_changed_cb(self, box, *args):
self.update_context_list()
+ def delfpr_button_clicked(self, button, *args):
+ active = self.B.get_object('account_combobox').get_active()
+ account = self.account_store[active][0]
+
+ state = self.plugin.get_omemo_state(account)
+
+ mod, paths = self.fpr_view.get_selection().get_selected_rows()
+
+ for path in paths:
+ it = mod.get_iter(path)
+ jid, fpr, deviceid = mod.get(it, 1, 3, 4)
+ fpr = fpr[31:-12]
+
+ dlg = gtk.Dialog('Delete Fingerprint', self,
+ gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+ (gtk.STOCK_YES, gtk.RESPONSE_YES,
+ gtk.STOCK_NO, gtk.RESPONSE_NO))
+ l = gtk.Label()
+ l.set_markup('Do you want to delete the '
+ 'fingerprint of <b>%s</b> on your account <b>%s</b>?'
+ '\n\n<tt>%s</tt>' % (jid, account, fpr))
+ l.set_line_wrap(True)
+ l.set_padding(12, 12)
+ dlg.vbox.pack_start(l)
+ dlg.show_all()
+
+ response = dlg.run()
+ if response == gtk.RESPONSE_YES:
+ record = state.store.loadSession(jid, deviceid)
+ identity_key = record.getSessionState().getRemoteIdentityKey()
+
+ state.store.deleteSession(jid, deviceid)
+ state.store.deleteIdentity(jid, identity_key)
+
+ dlg.destroy()
+ else:
+ dlg.destroy()
+
+ self.update_context_list()
+
def trust_button_clicked_cb(self, button, *args):
active = self.B.get_object('account_combobox').get_active()
account = self.account_store[active][0]
@@ -300,7 +342,7 @@
for path in paths:
it = mod.get_iter(path)
- _id, user, fpr = mod.get(it, 0, 1, 3)
+ jid, fpr, deviceid = mod.get(it, 1, 3, 4)
fpr = fpr[31:-12]
dlg = gtk.Dialog('Trust / Revoke Fingerprint', self,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
@@ -309,28 +351,35 @@
l = gtk.Label()
l.set_markup('Do you want to trust the '
'fingerprint of <b>%s</b> on your account <b>%s</b>?'
- '\n\n<tt>%s</tt>' % (user, account, fpr))
+ '\n\n<tt>%s</tt>' % (jid, account, fpr))
l.set_line_wrap(True)
l.set_padding(12, 12)
dlg.vbox.pack_start(l)
dlg.show_all()
response = dlg.run()
+
+ record = state.store.loadSession(jid, deviceid)
+ identity_key = record.getSessionState().getRemoteIdentityKey()
+
if response == gtk.RESPONSE_YES:
- state.store.identityKeyStore.setTrust(_id, TRUSTED)
+ state.store.setTrust(identity_key, TRUSTED)
try:
if self.plugin.ui_list[account]:
-
self.plugin.ui_list[account][user].refresh_auth_lock_icon()
+ self.plugin.ui_list[account][jid]. \
+ refresh_auth_lock_icon()
except:
- dlg.destroy()
+ log.debug('UI not available')
else:
if response == gtk.RESPONSE_NO:
- state.store.identityKeyStore.setTrust(_id, UNTRUSTED)
+ state.store.setTrust(identity_key, UNTRUSTED)
try:
- if user in self.plugin.ui_list[account]:
-
self.plugin.ui_list[account][user].refresh_auth_lock_icon()
+ if jid in self.plugin.ui_list[account]:
+ self.plugin.ui_list[account][jid]. \
+ refresh_auth_lock_icon()
except:
- dlg.destroy()
+ log.debug('UI not available')
+ dlg.destroy()
self.update_context_list()
@@ -391,35 +440,33 @@
self.B.get_object('fingerprint_label').set_markup('<tt>%s</tt>'
% ownfpr)
- fprDB = state.store.identityKeyStore.getAllFingerprints()
- activeSessions = state.store.sessionStore. \
- getAllActiveSessionsKeys()
- for item in fprDB:
- _id, jid, fpr, tr = item
- active = fpr in activeSessions
- fpr = binascii.hexlify(fpr)
+ trust_str = {0: 'False', 1: 'True', 2: 'Undecided'}
+ session_db = state.store.getAllSessions()
+
+ for item in session_db:
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits