diff options
author | kali <kali@leap.se> | 2012-10-08 07:19:09 +0900 |
---|---|---|
committer | kali <kali@leap.se> | 2012-10-08 07:19:09 +0900 |
commit | 3a77603eae5fea0b1efb226860e0264ccf96f41b (patch) | |
tree | 19dced0267d7840d142ff9d771548f3c3f39fcbb /src/leap/crypto/leapkeyring.py | |
parent | c7cfb8fcef773b84738e36b6d0c27487cf8e952a (diff) | |
parent | 8a594577660d78a4f0f9d3c5f5902dff3911e010 (diff) |
Merge branch 'feature/firstrun-wizard' into develop
Diffstat (limited to 'src/leap/crypto/leapkeyring.py')
-rw-r--r-- | src/leap/crypto/leapkeyring.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/leap/crypto/leapkeyring.py b/src/leap/crypto/leapkeyring.py new file mode 100644 index 00000000..bb0ca147 --- /dev/null +++ b/src/leap/crypto/leapkeyring.py @@ -0,0 +1,64 @@ +import os + +import keyring + +############# +# Disclaimer +############# +# This currently is not a keyring, it's more like a joke. +# No, seriously. +# We're affected by this **bug** + +# https://bitbucket.org/kang/python-keyring-lib/ +# issue/65/dbusexception-method-opensession-with + +# so using the gnome keyring does not seem feasible right now. +# I thought this was the next best option to store secrets in plain sight. + +# in the future we should move to use the gnome/kde/macosx/win keyrings. + + +class LeapCryptedFileKeyring(keyring.backend.CryptedFileKeyring): + + filename = os.path.expanduser("~/.config/leap/.secrets") + + def __init__(self, seed=None): + self.seed = seed + + def _get_new_password(self): + # XXX every time this method is called, + # $deity kills a kitten. + return "secret%s" % self.seed + + def _init_file(self): + self.keyring_key = self._get_new_password() + self.set_password('keyring_setting', 'pass_ref', 'pass_ref_value') + + def _unlock(self): + self.keyring_key = self._get_new_password() + print 'keyring key ', self.keyring_key + try: + ref_pw = self.get_password( + 'keyring_setting', + 'pass_ref') + print 'ref pw ', ref_pw + assert ref_pw == "pass_ref_value" + except AssertionError: + self._lock() + raise ValueError('Incorrect password') + + +def leap_set_password(key, value, seed="xxx"): + keyring.set_keyring(LeapCryptedFileKeyring(seed=seed)) + keyring.set_password('leap', key, value) + + +def leap_get_password(key, seed="xxx"): + keyring.set_keyring(LeapCryptedFileKeyring(seed=seed)) + return keyring.get_password('leap', key) + + +if __name__ == "__main__": + leap_set_password('test', 'bar') + passwd = leap_get_password('test') + assert passwd == 'bar' |