diff --git a/examples/user.py b/examples/user.py index 696bc1b22..a100b62c3 100644 --- a/examples/user.py +++ b/examples/user.py @@ -129,6 +129,9 @@ }, { "roleName": "Backup administrator" + }, + { + "roleName": "Infrastructure administrator" } ] @@ -136,14 +139,16 @@ print("\nSuccessfully updated the role to the username....\n") print(role) -# Remove a role from the user -role = users.remove_role_from_username("testUser1", "Scope administrator") +# Remove mulitple role from the user +# If a single role is to be removed, just specifiy ["role_name"] or "role_name" instead of list. +role = users.remove_role_from_username("testUser1", ["Scope administrator", "Backup administrator"]) print("\nRemoved role from the user successfully...\n") print(role) # Get user by name user = users.get_by_userName(options['userName']) -print("\nFound user by uri = '%s'\n" % user.data['uri']) +if user: + print("\nFound user by uri = '%s'\n" % user.data['uri']) # Get all users print("\nGet all users") @@ -170,8 +175,9 @@ # Remove single user user_to_delete = users.get_by_userName("testUser") -user_to_delete.delete() -print("\nSuccessfully deleted the testuser2 user.....\n") +if user_to_delete: + user_to_delete.delete() + print("\nSuccessfully deleted the testuser2 user.....\n") # Remove Multiple users user_name = ["testUser1", "testUser2"] diff --git a/hpeOneView/resources/security/users.py b/hpeOneView/resources/security/users.py index 0e4c4ec5c..20f563b14 100644 --- a/hpeOneView/resources/security/users.py +++ b/hpeOneView/resources/security/users.py @@ -27,6 +27,7 @@ from hpeOneView.resources.resource import Resource +from hpeOneView.exceptions import HPEOneViewException class Users(Resource): @@ -124,7 +125,12 @@ def get_by_userName(self, name): """ uri = self._helper.build_uri(name) - return self.get_by_uri(uri) + try: + resource = self.get_by_uri(uri) + except HPEOneViewException: + resource = None + + return resource def get_user_by_role(self, rolename): """ @@ -212,20 +218,20 @@ def update_role_to_userName(self, username, data): uri = self.URI + '/' + username + '/roles?multiResource=true' return self._helper.update(data, uri) - def remove_role_from_username(self, username, rolename): + def remove_role_from_username(self, username, data): """ Removes a specified role from the username Args: username (str): username of the user - rolename (str): role to be removed from user + data (str/list): list role to be removed from user Return: boolean """ - rolename = quote(rolename) - uri = self.URI + '/roles?filter' + '="userName=\'{}\'"&filter="roleName=\'{}\'"'.format(username, rolename) + rolelist_query = self.query_filter(data) + uri = self.URI + '/roles?filter' + '="userName=\'{}\'{}'.format(username, rolelist_query) return self._helper.delete(uri) def delete_multiple_user(self, data): @@ -247,3 +253,15 @@ def delete_multiple_user(self, data): break uri = uri + quote(' or ') self._helper.delete(uri) + + def query_filter(self, filters): + + formated_filter = '' + base_query = "\"&filter=\"roleName=\'{}\'\"" + if isinstance(filters, list): + for role in filters: + formated_filter += base_query.format(quote(role)) + return formated_filter + + if isinstance(filters, str): + return base_query.format(quote(filters)) diff --git a/tests/unit/resources/security/test_users.py b/tests/unit/resources/security/test_users.py index 30db57b64..406b868c3 100644 --- a/tests/unit/resources/security/test_users.py +++ b/tests/unit/resources/security/test_users.py @@ -22,6 +22,7 @@ from hpeOneView.connection import connection from hpeOneView.resources.security.users import Users from hpeOneView.resources.resource import Resource, ResourceHelper +from hpeOneView.exceptions import HPEOneViewException class UsersTest(unittest.TestCase): @@ -78,6 +79,12 @@ def test_get_by_called_with_userName(self, mock_get): mock_get.assert_called_once_with('/rest/users/testUser') self.assertEqual(result, response) + @mock.patch.object(Resource, 'get_by_uri') + def test_get_by_called_with_userName_with_exception(self, mock_get): + mock_get.side_effect = HPEOneViewException("username is not found") + result = self._users.get_by_userName('testUser') + self.assertIsNone(result) + @mock.patch.object(Resource, 'create') def test_validate_full_name_called_once(self, mock_post): @@ -268,6 +275,13 @@ def test_update_role_to_userName(self, mock_put): @mock.patch.object(ResourceHelper, 'delete') def test_remove_role_to_userName(self, mock_delete): + mock_delete.return_value = True + self._users.remove_role_from_username("testUser", ["Read only"]) + uri = "/rest/users/roles?filter=\"userName='testUser'\"&filter=\"roleName='Read%20only'\"" + mock_delete.assert_called_once_with(uri) + + @mock.patch.object(ResourceHelper, 'delete') + def test_remove_role_to_userName_with_string(self, mock_delete): mock_delete.return_value = True self._users.remove_role_from_username("testUser", "Read only") uri = "/rest/users/roles?filter=\"userName='testUser'\"&filter=\"roleName='Read%20only'\""