changeset 59bea73d63d2 in /home/hg/repos/gajim-plugins

author: lovetox <[email protected]>
branches: 
details:gajim-plugins?cmd=changeset;node=59bea73d63d2
description: Not allow to send msg if Fingerprint is untrusted

        Only if at least one Fingerprint is trusted a message goes out
        otherwise a error message is printed

        cleaned up SQL querys

        removed unnecessary return statements

diffstat:

 omemo/__init__.py                   |  13 ++++++++++
 omemo/omemo/liteidentitykeystore.py |  45 ++++++++++++++++++++++++------------
 omemo/omemo/state.py                |  22 +++++------------
 3 files changed, 50 insertions(+), 30 deletions(-)

diffs (187 lines):

diff -r 5343cfa6cf9c -r 59bea73d63d2 omemo/__init__.py
--- a/omemo/__init__.py Thu Jun 09 17:23:44 2016 +0200
+++ b/omemo/__init__.py Fri Jun 10 03:05:35 2016 +0200
@@ -551,6 +551,19 @@
         to_jid = gajim.get_jid_without_resource(full_jid)
         if not state.encryption.is_active(to_jid):
             return False
+
+        if not state.store.identityKeyStore.getTrustedFingerprints(to_jid):
+            try:
+                msg = "To send an encrypted message, you have to " \
+                      "first trust the fingerprint of your contact!"
+                if self.ui_list[account][to_jid]:
+                    self.ui_list[account][to_jid]. \
+                        chat_control.print_conversation_line(msg, 'status', 
'', None)
+            except:
+                log.debug('No Ui present for ' + to_jid +
+                          ', Ui Warning not shown')
+            return True
+
         try:
             msg_dict = state.create_msg(
                 gajim.get_jid_from_account(account), to_jid, plaintext)
diff -r 5343cfa6cf9c -r 59bea73d63d2 omemo/omemo/liteidentitykeystore.py
--- a/omemo/omemo/liteidentitykeystore.py       Thu Jun 09 17:23:44 2016 +0200
+++ b/omemo/omemo/liteidentitykeystore.py       Fri Jun 10 03:05:35 2016 +0200
@@ -23,6 +23,8 @@
 from axolotl.state.identitykeystore import IdentityKeyStore
 
 UNDECIDED = 2
+TRUSTED = 1
+UNTRUSTED = 0
 
 
 class LiteIdentityKeyStore(IdentityKeyStore):
@@ -69,7 +71,8 @@
         self.dbConn.commit()
 
     def saveIdentity(self, recipientId, identityKey):
-        q = "INSERT INTO identities (recipient_id, public_key, trust) 
VALUES(?, ?, ?)"
+        q = "INSERT INTO identities (recipient_id, public_key, trust) " \
+            "VALUES(?, ?, ?)"
         c = self.dbConn.cursor()
 
         if not self.getIdentity(recipientId, identityKey):
@@ -79,7 +82,8 @@
             self.dbConn.commit()
 
     def getIdentity(self, recipientId, identityKey):
-        q = "SELECT * FROM identities WHERE recipient_id = ? AND public_key = 
?"
+        q = "SELECT * FROM identities WHERE recipient_id = ? " \
+            "AND public_key = ?"
         c = self.dbConn.cursor()
 
         c.execute(q, (recipientId, identityKey.getPublicKey().serialize()))
@@ -91,7 +95,7 @@
         return True
 
     def getAllFingerprints(self):
-        q = "SELECT _id, recipient_id, public_key, trust FROM identities " + \
+        q = "SELECT _id, recipient_id, public_key, trust FROM identities " \
             "WHERE recipient_id != -1 ORDER BY recipient_id ASC"
         c = self.dbConn.cursor()
 
@@ -101,35 +105,46 @@
         return result
 
     def getFingerprints(self, jid):
-        q = "SELECT _id, recipient_id, public_key, trust FROM identities " + \
-            "WHERE recipient_id = '" + jid + "' ORDER BY trust ASC"
+        q = "SELECT _id, recipient_id, public_key, trust FROM identities " \
+            "WHERE recipient_id =? ORDER BY trust ASC"
         c = self.dbConn.cursor()
 
         result = []
-        for row in c.execute(q):
+        c.execute(q, (jid,))
+        rows = c.fetchall()
+        for row in rows:
             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'"
+    def getTrustedFingerprints(self, jid):
+        q = "SELECT _id FROM identities WHERE recipient_id = ? AND trust = ?"
         c = self.dbConn.cursor()
 
         result = []
-        c.execute(q)
-        result = c.fetchone()
+        c.execute(q, (jid, TRUSTED))
+        result = c.fetchall()
+
+        return result
+
+    def getUndecidedFingerprints(self, jid):
+        q = "SELECT trust FROM identities WHERE recipient_id = ? AND trust = ?"
+        c = self.dbConn.cursor()
+
+        result = []
+        c.execute(q, (jid, UNDECIDED))
+        result = c.fetchall()
 
         return result
 
     def setTrust(self, _id, trust):
-        q = "UPDATE identities SET trust = '" + str(trust) + "'" + \
-            "WHERE _id = '" + str(_id) + "'"
+        q = "UPDATE identities SET trust = ? WHERE _id = ?"
         c = self.dbConn.cursor()
-        c.execute(q)
+        c.execute(q, (trust, _id))
         self.dbConn.commit()
 
     def getTrust(self, recipientId, identityKey):
-        q = "SELECT trust FROM identities WHERE recipient_id = ? AND 
public_key = ?"
+        q = "SELECT trust FROM identities WHERE recipient_id = ? " \
+            "AND public_key = ?"
         c = self.dbConn.cursor()
 
         c.execute(q, (recipientId, identityKey.getPublicKey().serialize()))
diff -r 5343cfa6cf9c -r 59bea73d63d2 omemo/omemo/state.py
--- a/omemo/omemo/state.py      Thu Jun 09 17:23:44 2016 +0200
+++ b/omemo/omemo/state.py      Fri Jun 10 03:05:35 2016 +0200
@@ -185,9 +185,6 @@
                 log.error('sender_jid => ' + str(sender_jid) +
                           ' sid => ' + str(sid))
                 return
-            except (Exception) as e:
-                log.error('Exception: ' + str(e.args))
-                return
 
         except (DuplicateMessageException):
             log.error('Duplicate message found ' + e.message)
@@ -195,10 +192,6 @@
                       ' sid => ' + str(sid))
             return
 
-        except (Exception) as e:
-            log.error('Exception: ' + str(e.args))
-            return
-
         result = unicode(aes_decrypt(key, iv, payload))
 
         if self.own_jid == sender_jid:
@@ -226,12 +219,6 @@
             log.warn('No session ciphers for ' + jid)
             return
 
-        my_other_devices = set(self.own_devices) - set({self.own_device_id})
-        # Encrypt the message key with for each of our own devices
-        for dev in my_other_devices:
-            cipher = self.get_session_cipher(from_jid, dev)
-            encrypted_keys[dev] = cipher.encrypt(key).serialize()
-
         # Encrypt the message key with for each of receivers devices
         for rid, cipher in session_ciphers.items():
             try:
@@ -249,6 +236,12 @@
             log.error(log_msg)
             raise NoValidSessions(log_msg)
 
+        my_other_devices = set(self.own_devices) - set({self.own_device_id})
+        # Encrypt the message key with for each of our own devices
+        for dev in my_other_devices:
+            cipher = self.get_session_cipher(from_jid, dev)
+            encrypted_keys[dev] = cipher.encrypt(key).serialize()
+
         payload = aes_encrypt(key, iv, plaintext)
 
         result = {'sid': self.own_device_id,
@@ -348,7 +341,7 @@
             return key
         else:
             raise Exception("Received PreKeyWhisperMessage from Untrusted 
Fingerprint!")
-            return
+
 
     def handleWhisperMessage(self, recipient_id, device_id, key):
         whisperMessage = WhisperMessage(serialized=key)
@@ -360,4 +353,3 @@
             return key
         else:
             raise Exception("Received WhisperMessage from Untrusted 
Fingerprint!")
-            return
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to