+ def get_user_list(self, filter_q={}):
+ """
+ Get user list.
+
+ :param filter_q: dictionary to filter user list.
+ :return: returns a list of users.
+ """
+ try:
+ users = self.keystone.users.list()
+ users = [{
+ "username": user.name,
+ "_id": user.id,
+ "id": user.id
+ } for user in users if user.name != self.admin_username]
+
+ allowed_fields = ["_id", "id", "username"]
+ for key in filter_q.keys():
+ if key not in allowed_fields:
+ continue
+
+ users = [user for user in users
+ if filter_q[key] == user[key]]
+
+ for user in users:
+ projects = self.keystone.projects.list(user=user["_id"])
+ projects = [{
+ "name": project.name,
+ "_id": project.id,
+ "id": project.id
+ } for project in projects]
+
+ for project in projects:
+ roles = self.keystone.roles.list(user=user["_id"], project=project["_id"])
+ roles = [{
+ "name": role.name,
+ "_id": role.id,
+ "id": role.id
+ } for role in roles]
+ project["roles"] = roles
+
+ user["projects"] = projects
+
+ return users
+ except ClientException:
+ self.logger.exception("Error during user listing using keystone")
+ raise AuthconnOperationException("Error during user listing using Keystone")
+
+ def get_role_list(self):
+ """
+ Get role list.
+
+ :return: returns the list of roles.
+ """
+ try:
+ roles_list = self.keystone.roles.list()
+
+ roles = [{
+ "name": role.name,
+ "_id": role.id
+ } for role in roles_list if role.name != "service"]
+
+ return roles
+ except ClientException:
+ self.logger.exception("Error during user role listing using keystone")
+ raise AuthException("Error during user role listing using Keystone", http_code=HTTPStatus.UNAUTHORIZED)
+