Merge "Refactor _handle_shadow_and_local_users"

This commit is contained in:
Zuul 2018-07-16 06:09:40 +00:00 committed by Gerrit Code Review
commit aa1f02efd4
2 changed files with 16 additions and 15 deletions

View File

@ -1039,22 +1039,19 @@ class Manager(manager.Manager):
return hints
def _handle_shadow_and_local_users(self, driver, hints):
federated_attributes = ['idp_id', 'protocol_id', 'unique_id']
federated_attributes = {'idp_id', 'protocol_id', 'unique_id'}
fed_res = []
for filter_ in hints.filters:
if filter_['name'] in federated_attributes:
return PROVIDERS.shadow_users_api.get_federated_users(hints)
fed_hints = copy.deepcopy(hints)
res = driver.list_users(hints)
# Note: If the filters contain 'name', we should get the user from both
# local user and shadow user backend.
for filter_ in fed_hints.filters:
# Note: If the filters contain 'name', we should get the user from
# both local user and shadow user backend.
if filter_['name'] == 'name':
fed_hints = copy.deepcopy(hints)
fed_res = PROVIDERS.shadow_users_api.get_federated_users(
fed_hints)
res += fed_res
break
return res
return driver.list_users(hints) + fed_res
@domains_configured
@exception_translated('user')

View File

@ -556,24 +556,28 @@ class IdentityTests(object):
self._test_list_users_with_attribute(filters, federated_dict)
def test_list_users_with_name(self):
federated_dict = unit.new_federated_user_ref(
display_name='test@federation.org')
federated_dict_1 = unit.new_federated_user_ref(
display_name='test1@federation.org')
federated_dict_2 = unit.new_federated_user_ref(
display_name='test2@federation.org')
domain = self._get_domain_fixture()
hints = driver_hints.Hints()
hints.add_filter('name', 'test@federation.org')
hints.add_filter('name', 'test1@federation.org')
users = self.identity_api.list_users(hints=hints)
self.assertEqual(0, len(users))
self.shadow_users_api.create_federated_user(domain['id'],
federated_dict)
federated_dict_1)
self.shadow_users_api.create_federated_user(domain['id'],
federated_dict_2)
hints = driver_hints.Hints()
hints.add_filter('name', 'test@federation.org')
hints.add_filter('name', 'test1@federation.org')
users = self.identity_api.list_users(hints=hints)
self.assertEqual(1, len(users))
hints = driver_hints.Hints()
hints.add_filter('name', 'test@federation.org')
hints.add_filter('name', 'test1@federation.org')
hints.add_filter('idp_id', 'ORG_IDP')
users = self.identity_api.list_users(hints=hints)
self.assertEqual(1, len(users))