diff options
Diffstat (limited to 'src/leap/crypto/leapkeyring.py')
| -rw-r--r-- | src/leap/crypto/leapkeyring.py | 70 | 
1 files changed, 70 insertions, 0 deletions
| diff --git a/src/leap/crypto/leapkeyring.py b/src/leap/crypto/leapkeyring.py new file mode 100644 index 00000000..c241d0bc --- /dev/null +++ b/src/leap/crypto/leapkeyring.py @@ -0,0 +1,70 @@ +import keyring + +from leap.base.config import get_config_file + +############# +# 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 = ".secrets" + +    @property +    def file_path(self): +        return get_config_file(self.filename) + +    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"): +    key, value = map(unicode, (key, value)) +    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)) +    #import ipdb;ipdb.set_trace() +    return keyring.get_password('leap', key) + + +if __name__ == "__main__": +    leap_set_password('test', 'bar') +    passwd = leap_get_password('test') +    assert passwd == 'bar' | 
