Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions examples/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,21 +129,26 @@
},
{
"roleName": "Backup administrator"
},
{
"roleName": "Infrastructure administrator"
}
]

role = users.update_role_to_userName("testUser1", role_options)
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")
Expand All @@ -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"]
Expand Down
28 changes: 23 additions & 5 deletions hpeOneView/resources/security/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@


from hpeOneView.resources.resource import Resource
from hpeOneView.exceptions import HPEOneViewException


class Users(Resource):
Expand Down Expand Up @@ -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):
"""
Expand Down Expand Up @@ -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):
Expand All @@ -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))
14 changes: 14 additions & 0 deletions tests/unit/resources/security/test_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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):

Expand Down Expand Up @@ -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'\""
Expand Down