diff src/memory/memory.py @ 1652:fd7f41d8cbdf

memory: fixes asyncCreateProfile to not overwrite the personal key
author souliane <souliane@mailoo.org>
date Mon, 23 Nov 2015 18:51:15 +0100
parents a3d0cfa5b7a6
children 61391d863709
line wrap: on
line diff
--- a/src/memory/memory.py	Mon Nov 23 17:50:23 2015 +0100
+++ b/src/memory/memory.py	Mon Nov 23 18:51:15 2015 +0100
@@ -453,9 +453,15 @@
             raise ValueError("Empty profile name")
         if name[0] == '@':
             raise ValueError("A profile name can't start with a '@'")
-        personal_key = BlockCipher.getRandomKey(base64=True)  # generated once for all and saved in a PersistentDict
-        self.auth_sessions.newSession({C.MEMORY_CRYPTO_KEY: personal_key}, profile=name)  # will be encrypted by setParam
+        
         d = self.params.asyncCreateProfile(name)
+        
+        def initPersonalKey(dummy):
+            # be sure to call this after checking that the profile doesn't exist yet
+            personal_key = BlockCipher.getRandomKey(base64=True)  # generated once for all and saved in a PersistentDict
+            self.auth_sessions.newSession({C.MEMORY_CRYPTO_KEY: personal_key}, profile=name)  # will be encrypted by setParam
+
+        d.addCallback(initPersonalKey)
         d.addCallback(lambda dummy: self.setParam(C.PROFILE_PASS_PATH[1], password, C.PROFILE_PASS_PATH[0], profile_key=name))
         return d