def _StorageForAccount(account): """Get the oauth2client.multistore_file storage. Args: account: str, The account tied to the storage being fetched. Returns: oauth2client.client.Storage, A credentials store. """ storage_path = config.Paths().credentials_path parent_dir, unused_name = os.path.split(storage_path) files.MakeDir(parent_dir) # We only care about account value of the key, yet store 'type' for backwards # compatibility. There should be no more than one key in this list. keys = [ k for k in multistore_file.get_all_credential_keys(filename=storage_path) if k['account'] == account ] if not keys: # New key. return multistore_file.get_credential_storage_custom_key( filename=storage_path, key_dict={ 'type': 'google-cloud-sdk', 'account': account }) # We do not expect any other type keys in the credential store. Just in case # somehow they occur: # 1. prefer key with no type # 2. use google-cloud-sdk type # 3. use any other # Also log all cases where type was present but was not google-cloud-sdk. right_key = keys[0] for key in keys: if 'type' in key: if key['type'] == 'google-cloud-sdk' and 'type' in right_key: right_key = key else: log.file_only_logger.warn( 'Credential store has unknown type [{0}] key for account [{1}]' .format(key['type'], key['account'])) else: right_key = key if 'type' in right_key: right_key['type'] = 'google-cloud-sdk' return multistore_file.get_credential_storage_custom_key( filename=storage_path, key_dict=right_key)
def test_multistore_file_get_all_keys(self): # start with no keys keys = multistore_file.get_all_credential_keys(FILENAME) self.assertEquals([], keys) # store credentials credentials = self._create_test_credentials(client_id='client1') custom_key = {'myapp': 'testing', 'clientid': 'client1'} store1 = multistore_file.get_credential_storage_custom_key( FILENAME, custom_key) store1.put(credentials) keys = multistore_file.get_all_credential_keys(FILENAME) self.assertEquals([custom_key], keys) # store more credentials credentials = self._create_test_credentials(client_id='client2') string_key = 'string_key' store2 = multistore_file.get_credential_storage_custom_string_key( FILENAME, string_key) store2.put(credentials) keys = multistore_file.get_all_credential_keys(FILENAME) self.assertEquals(2, len(keys)) self.assertTrue(custom_key in keys) self.assertTrue({'key': string_key} in keys) # back to no keys store1.delete() store2.delete() keys = multistore_file.get_all_credential_keys(FILENAME) self.assertEquals([], keys)
def _StorageForAccount(account): """Get the oauth2client.multistore_file storage. Args: account: str, The account tied to the storage being fetched. Returns: oauth2client.client.Storage, A credentials store. """ storage_path = config.Paths().credentials_path parent_dir, unused_name = os.path.split(storage_path) files.MakeDir(parent_dir) storage = multistore_file.get_credential_storage_custom_key( filename=storage_path, key_dict=_GetStorageKeyForAccount(account)) return storage
def test_multistore_file_custom_key(self): credentials = self._create_test_credentials() custom_key = {'myapp': 'testing', 'clientid': 'some client'} store = multistore_file.get_credential_storage_custom_key( FILENAME, custom_key) store.put(credentials) stored_credentials = store.get() self.assertNotEquals(None, stored_credentials) self.assertEqual(credentials.access_token, stored_credentials.access_token) store.delete() stored_credentials = store.get() self.assertEquals(None, stored_credentials)
def test_multistore_file_backwards_compatibility(self): credentials = self._create_test_credentials() scopes = ['scope1', 'scope2'] # store the credentials using the legacy key method store = multistore_file.get_credential_storage( FILENAME, 'client_id', 'user_agent', scopes) store.put(credentials) # retrieve the credentials using a custom key that matches the # legacy key key = {'clientId': 'client_id', 'userAgent': 'user_agent', 'scope': util.scopes_to_string(scopes)} store = multistore_file.get_credential_storage_custom_key( FILENAME, key) stored_credentials = store.get() self.assertEqual(credentials.access_token, stored_credentials.access_token)
def _GetStorageByAccountId(self, account_id): storage_key = self._AcctountId2StorageKey(account_id) return multistore_file.get_credential_storage_custom_key( filename=self._store_file, key_dict=storage_key)