فهرست منبع

add dummy call back which is past to main cli loop

this makes the testing completely hands free.
Finally ...
oz123 11 سال پیش
والد
کامیت
c76a9fb193
6فایلهای تغییر یافته به همراه37 افزوده شده و 27 حذف شده
  1. 10 1
      pwman/data/database.py
  2. 3 16
      pwman/tests/db_tests.py
  3. 2 4
      pwman/ui/cli.py
  4. 9 0
      pwman/ui/tools.py
  5. 11 4
      pwman/util/crypto.py
  6. 2 2
      scripts/pwman3

+ 10 - 1
pwman/data/database.py

@@ -45,11 +45,20 @@ class Database(object):
         if key is not None:
         if key is not None:
             enc.set_cryptedkey(key)
             enc.set_cryptedkey(key)
         else:
         else:
-            self.changepassword()
+            #self.changepassword()
+            self.get_user_password()
 
 
     def close(self):
     def close(self):
         pass
         pass
 
 
+    def get_user_password(self):
+        """
+        get the databases password from the user
+        """
+        enc = CryptoEngine.get()
+        newkey = enc.changepassword()
+        return self.savekey(newkey)
+
     def changepassword(self):
     def changepassword(self):
         """
         """
         Change the databases password.
         Change the databases password.

+ 3 - 16
pwman/tests/db_tests.py

@@ -1,7 +1,7 @@
 import os
 import os
 import os.path
 import os.path
 import sys
 import sys
-from Crypto.Random import OSRNG
+from pwman.ui.tools import CLICallback, DummyCallback
 
 
 if 'darwin' in sys.platform:
 if 'darwin' in sys.platform:
     from pwman.ui.mac import PwmanCliMac as PwmanCliOld
     from pwman.ui.mac import PwmanCliMac as PwmanCliOld
@@ -51,20 +51,7 @@ class SetupTester(object):
         dbver = 0.4
         dbver = 0.4
         dbtype = config.get_value("Database", "type")
         dbtype = config.get_value("Database", "type")
         db = pwman.data.factory.create(dbtype, dbver)
         db = pwman.data.factory.create(dbtype, dbver)
-        # TODO:
-        # use db to insert an encrypted password here to the table
-        # KEY
-        # This way the key will be passed by "SELECT THEKEY FROM KEY"
-        # and there won't be a any prompting for password
-        ce = CryptoEngine()
-        ce.set_callback(raw_input)
-        random = OSRNG.new()
-        key = str(random.read(32)).encode('base64')
-        password = '12345'
-        cipher = ce._getcipher_real(password, ce._algo)
-        cipher.encrypt(ce._preparedata(key,
-                       cipher.block_size)).encode('base64')
-        self.cli = PwmanCliNew(db, self.xselpath)
+        self.cli = PwmanCliNew(db, self.xselpath, DummyCallback)
 
 
 
 
 class DBTests(unittest.TestCase):
 class DBTests(unittest.TestCase):
@@ -175,6 +162,6 @@ class CLITests(unittest.TestCase):
 
 
     #TODO: implement a test for get_ids
     #TODO: implement a test for get_ids
 
 
-    def test_get_ids():
+    def test_get_ids(self):
         #used by do_cp or do_open
         #used by do_cp or do_open
         pass
         pass

+ 2 - 4
pwman/ui/cli.py

@@ -44,7 +44,6 @@ import ast
 from pwman.ui import tools
 from pwman.ui import tools
 from pwman.ui.tools import CliMenu, CMDLoop
 from pwman.ui.tools import CliMenu, CMDLoop
 from pwman.ui.tools import CliMenuItem
 from pwman.ui.tools import CliMenuItem
-from pwman.ui.tools import CLICallback
 from colorama import Fore
 from colorama import Fore
 from pwman.ui.base import HelpUI, BaseUI
 from pwman.ui.base import HelpUI, BaseUI
 import getpass
 import getpass
@@ -932,7 +931,7 @@ class PwmanCliNew(Aliases, BaseCommands):
     """
     """
     Inherit from the BaseCommands and Aliases
     Inherit from the BaseCommands and Aliases
     """
     """
-    def __init__(self, db, hasxsel):
+    def __init__(self, db, hasxsel, callback):
         """
         """
         initialize CLI interface, set up the DB
         initialize CLI interface, set up the DB
         connecion, see if we have xsel ...
         connecion, see if we have xsel ...
@@ -944,8 +943,7 @@ class PwmanCliNew(Aliases, BaseCommands):
         self.hasxsel = hasxsel
         self.hasxsel = hasxsel
         try:
         try:
             enc = CryptoEngine.get()
             enc = CryptoEngine.get()
-            #enc.set_callback(CLICallback())
-            enc._callback = CLICallback()
+            enc._callback = callback()
             self._db = db
             self._db = db
             self._db.open()
             self._db.open()
         except Exception, e:
         except Exception, e:

+ 9 - 0
pwman/ui/tools.py

@@ -383,8 +383,17 @@ class CliMenuItem(object):
 
 
 
 
 class CLICallback(Callback):
 class CLICallback(Callback):
+
     def getinput(self, question):
     def getinput(self, question):
         return raw_input(question)
         return raw_input(question)
 
 
     def getsecret(self, question):
     def getsecret(self, question):
         return getpass.getpass(question + ":")
         return getpass.getpass(question + ":")
+
+class DummyCallback(Callback):
+
+    def getinput(self, question):
+        return '12345'
+
+    def getsecret(self, question):
+        return '12345'

+ 11 - 4
pwman/util/crypto.py

@@ -221,6 +221,13 @@ class CryptoEngine(object):
         """
         """
         return self._callback
         return self._callback
 
 
+    def get_user_password():
+        "get the password from the user"
+        if self._callback is None:
+            raise CryptoNoCallbackException("No call back class has been "
+                                            "specified")
+
+
     def changepassword(self):
     def changepassword(self):
         """
         """
         Creates a new key. The key itself is actually stored in
         Creates a new key. The key itself is actually stored in
@@ -229,8 +236,8 @@ class CryptoEngine(object):
         password for the database.
         password for the database.
         If oldKeyCrypted is none, then a new password is generated."""
         If oldKeyCrypted is none, then a new password is generated."""
         if self._callback is None:
         if self._callback is None:
-            raise CryptoNoCallbackException("No call back class has been \
-specified")
+            raise CryptoNoCallbackException("No call back class has been "
+                                            "specified")
         if self._keycrypted is None:
         if self._keycrypted is None:
             # Generate a new key, 32 bits in length, if that's
             # Generate a new key, 32 bits in length, if that's
             # too long for the Cipher, _getCipherReal will sort it out
             # too long for the Cipher, _getCipherReal will sort it out
@@ -310,8 +317,8 @@ password again")
 
 
         while tries < max_tries:
         while tries < max_tries:
             try:
             try:
-                password = self._callback.getsecret("Please enter your \
-password")
+                password = self._callback.getsecret("Please enter your "
+                                                    "password")
                 tmpcipher = self._getcipher_real(password, self._algo)
                 tmpcipher = self._getcipher_real(password, self._algo)
                 plainkey = tmpcipher.decrypt(str(self._keycrypted).decode(
                 plainkey = tmpcipher.decrypt(str(self._keycrypted).decode(
                     'base64'))
                     'base64'))

+ 2 - 2
scripts/pwman3

@@ -69,7 +69,7 @@ else:
     from pwman.ui.cli import PwmanCliNew
     from pwman.ui.cli import PwmanCliNew
     OSX = False
     OSX = False
 
 
-
+from pwman.ui.tools import CLICallback, DummyCallback
 import pwman.util.config as config
 import pwman.util.config as config
 import pwman.data.factory
 import pwman.data.factory
 from pwman.data.convertdb import PwmanConvertDB
 from pwman.data.convertdb import PwmanConvertDB
@@ -139,7 +139,7 @@ try:
 
 
     db = pwman.data.factory.create(dbtype, dbver)
     db = pwman.data.factory.create(dbtype, dbver)
     if dbver >= 0.4:
     if dbver >= 0.4:
-        cli = PwmanCliNew(db, xselpath)
+        cli = PwmanCliNew(db, xselpath, CLICallback)
     elif dbver < 0.4:
     elif dbver < 0.4:
         cli = PwmanCli(db, xselpath)
         cli = PwmanCli(db, xselpath)
 except SystemExit, e:
 except SystemExit, e: