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

Reply via email to