~mvo/ubuntu-sso-client/strawman-lp711413

« back to all changes in this revision

Viewing changes to ubuntu_sso/keyring/linux.py

Merged trunk in up to revno 836.

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
    try_old_credentials)
38
38
 
39
39
 
40
 
logger = setup_logging("ubuntu_sso.keyring")
 
40
logger = setup_logging("ubuntu_sso.keyring.linux")
41
41
 
42
42
 
43
43
class Keyring(object):
51
51
    def _find_keyring_item(self, app_name, attr=None):
52
52
        """Return the keyring item or None if not found."""
53
53
        if attr is None:
54
 
            logger.debug("getting attr")
55
54
            attr = self._get_keyring_attr(app_name)
56
 
        logger.debug("finding all items")
 
55
        logger.debug("Finding all items for app_name %r.", app_name)
57
56
        items = yield self.service.search_items(attr)
58
57
        if len(items) == 0:
59
58
            # if no items found, return None
60
 
            logger.debug("No items found")
 
59
            logger.debug("No items found!")
61
60
            returnValue(None)
62
61
 
63
 
        logger.debug("Returning first item found")
 
62
        logger.debug("Returning first item found.")
64
63
        returnValue(items[0])
65
64
 
66
65
    def _get_keyring_attr(self, app_name):
84
83
    @inlineCallbacks
85
84
    def _migrate_old_token_name(self, app_name):
86
85
        """Migrate credentials with old name, store them with new name."""
87
 
        logger.debug("getting keyring attr")
 
86
        logger.debug("Migrating old token name.")
88
87
        attr = self._get_keyring_attr(app_name)
89
 
        logger.debug("getting old token name")
90
88
        attr['token-name'] = get_old_token_name(app_name)
91
 
        logger.debug("finding keyring item")
92
89
        item = yield self._find_keyring_item(app_name, attr=attr)
93
90
        if item is not None:
94
 
            logger.debug("setting credentials")
95
91
            yield self.set_credentials(app_name,
96
92
                                       dict(urlparse.parse_qsl(item.secret)))
97
 
            logger.debug("deleting old item")
98
93
            yield item.delete()
99
94
 
100
 
        logger.debug("finding keyring item")
101
95
        result = yield self._find_keyring_item(app_name)
102
 
        logger.debug("returning result value")
103
96
        returnValue(result)
104
97
 
105
98
    @inlineCallbacks
106
99
    def get_credentials(self, app_name):
107
100
        """A deferred with the secret of the SSO item in a dictionary."""
108
101
        # If we have no attributes, return None
109
 
        logger.debug("getting credentials")
 
102
        logger.debug("Getting credentials for %r.", app_name)
110
103
        yield self.service.open_session()
111
 
        logger.debug("calling find item")
112
104
        item = yield self._find_keyring_item(app_name)
113
105
        if item is None:
114
 
            logger.debug("migrating token")
115
106
            item = yield self._migrate_old_token_name(app_name)
116
107
 
117
108
        if item is not None:
118
 
            logger.debug("parsing secret")
 
109
            logger.debug("Parsing secret.")
119
110
            secret = yield item.get_value()
120
111
            returnValue(dict(urlparse.parse_qsl(secret)))
121
112
        else:
122
113
            # if no item found, try getting the old credentials
123
114
            if app_name == U1_APP_NAME:
124
 
                logger.debug("trying old credentials")
 
115
                logger.debug("Trying old credentials for %r.", app_name)
125
116
                old_creds = yield try_old_credentials(app_name)
126
117
                returnValue(old_creds)
127
118
        # nothing was found