diff options
author | Brian Sherson <caretaker82@euclid.shersonb.net> | 2014-03-22 20:52:05 -0700 |
---|---|---|
committer | Brian Sherson <caretaker82@euclid.shersonb.net> | 2014-03-22 20:52:05 -0700 |
commit | 5c66d93f0ca04c06f3ed122772b9751b3dcc3f6e (patch) | |
tree | 0ec0aa59f5afb7588fe35c95d3d3495ec5b0d503 /wallet.py | |
parent | 0b695d73168af6a8444e1c0a0f4e6b0f85506fc4 (diff) |
Adding CAP support, ircapp.py with sample config, speeding up channel and user cache lookup.
Diffstat (limited to 'wallet.py')
-rw-r--r-- | wallet.py | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -4,27 +4,30 @@ import Crypto.Cipher.Blowfish import os import getpass from threading import Lock +from collections import OrderedDict class Wallet(dict): + def __init__(self, filename): + self.filename = filename self.lock = Lock() if os.path.isfile(filename): self.f = open(filename, "rb+") self.passwd = getpass.getpass() self.crypt = Crypto.Cipher.Blowfish.new(self.passwd) contents_encrypted = self.f.read() - contents = self.crypt.decrypt(contents_encrypted + - "\x00"*((-len(contents_encrypted))%8)) + contents = self.crypt.decrypt( + contents_encrypted + "\x00" * ((-len(contents_encrypted)) % 8)) if contents.startswith(self.passwd): self.update(dict(pickle.loads(contents[len(self.passwd):]))) else: self.f.close() - raise BaseException("Incorrect Password") + raise BaseException, "Incorrect Password" else: self.f = open(filename, "wb+") passwd = self.passwd = None - while passwd is None or passwd != self.passwd: + while passwd == None or passwd != self.passwd: passwd = getpass.getpass("Enter new password: ") self.passwd = getpass.getpass("Confirm new password: ") if passwd != self.passwd: @@ -33,13 +36,22 @@ class Wallet(dict): self.flush() def flush(self): - contents = self.passwd+pickle.dumps(self.items(), protocol=2) + contents = self.passwd + pickle.dumps(self.items(), protocol=2) self.lock.acquire() try: self.f.seek(0) - self.f.write(self.crypt.encrypt( - contents+"\x00"*((-len(contents))%8))) + self.f.write( + self.crypt.encrypt(contents + "\x00" * ((-len(contents)) % 8))) self.f.truncate() self.f.flush() finally: self.lock.release() + + def json(self): + return OrderedDict([("class", "wallet.Wallet"), ("filename", self.filename)]) + + def __repr__(self): + return "<Wallet: %s>" % self.filename + + def __str__(self): + return "<Wallet: %s>" % self.filename |