X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fauthconn_keystone.py;h=685773b80e73037967751beb752f12a72edccce1;hp=3aedfaba2f85ac214926d1553a395393a7d92807;hb=f318b3045ae5e005f6241ec170ea943c92cc67d6;hpb=01b15d3166ea28266fb3d994d0615e4091c43c08 diff --git a/osm_nbi/authconn_keystone.py b/osm_nbi/authconn_keystone.py index 3aedfab..685773b 100644 --- a/osm_nbi/authconn_keystone.py +++ b/osm_nbi/authconn_keystone.py @@ -25,10 +25,11 @@ it for OSM. """ -__author__ = "Eduardo Sousa " +__author__ = "Eduardo Sousa , " \ + "Pedro de la Cruz Ramos " __date__ = "$27-jul-2018 23:59:59$" -from authconn import Authconn, AuthException, AuthconnOperationException, AuthconnNotFoundException, \ +from osm_nbi.authconn import Authconn, AuthException, AuthconnOperationException, AuthconnNotFoundException, \ AuthconnConflictException import logging @@ -40,12 +41,12 @@ from keystoneauth1.exceptions.base import ClientException from keystoneauth1.exceptions.http import Conflict from keystoneclient.v3 import client from http import HTTPStatus -from validation import is_valid_uuid +from osm_nbi.validation import is_valid_uuid class AuthconnKeystone(Authconn): - def __init__(self, config, db, token_cache): - Authconn.__init__(self, config, db, token_cache) + def __init__(self, config, db): + Authconn.__init__(self, config, db) self.logger = logging.getLogger("nbi.authenticator.keystone") @@ -250,8 +251,9 @@ class AuthconnKeystone(Authconn): user_id = user_obj.id if user_info.get("password") or user_info.get("username") \ or user_info.get("add_project_role_mappings") or user_info.get("remove_project_role_mappings"): + ctime = user_obj._admin.get("created", 0) if hasattr(user_obj, "_admin") else 0 self.keystone.users.update(user_id, password=user_info.get("password"), name=user_info.get("username"), - _admin={"created": user_obj._admin["created"], "modified": time.time()}) + _admin={"created": ctime, "modified": time.time()}) for mapping in user_info.get("remove_project_role_mappings", []): self.remove_role_from_user(user_id, mapping["project"], mapping["role"]) for mapping in user_info.get("add_project_role_mappings", []): @@ -299,23 +301,21 @@ class AuthconnKeystone(Authconn): users = [user for user in users if filter_q["_id"] == user["_id"]] for user in users: + user["project_role_mappings"] = [] + user["projects"] = [] 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 + user["projects"].append(project.name) + + roles = self.keystone.roles.list(user=user["_id"], project=project.id) + for role in roles: + prm = { + "project": project.id, + "project_name": project.name, + "role_name": role.name, + "role": role.id, + } + user["project_role_mappings"].append(prm) return users except ClientException as e: @@ -421,7 +421,8 @@ class AuthconnKeystone(Authconn): projects = [{ "name": project.name, "_id": project.id, - "_admin": project.to_dict().get("_admin", {}) # TODO: REVISE + "_admin": project.to_dict().get("_admin", {}), # TODO: REVISE + "quotas": project.to_dict().get("quotas", {}), # TODO: REVISE } for project in projects] if filter_q and filter_q.get("_id"): @@ -444,7 +445,9 @@ class AuthconnKeystone(Authconn): """ try: result = self.keystone.projects.create(project_info["name"], self.project_domain_name, - _admin=project_info["_admin"]) + _admin=project_info["_admin"], + quotas=project_info.get("quotas", {}) + ) return result.id except ClientException as e: # self.logger.exception("Error during project creation using keystone: {}".format(e)) @@ -479,7 +482,10 @@ class AuthconnKeystone(Authconn): :return: None """ try: - self.keystone.projects.update(project_id, name=project_info["name"], _admin=project_info["_admin"]) + self.keystone.projects.update(project_id, name=project_info["name"], + _admin=project_info["_admin"], + quotas=project_info.get("quotas", {}) + ) except ClientException as e: # self.logger.exception("Error during project update using keystone: {}".format(e)) raise AuthconnOperationException("Error during project update using Keystone: {}".format(e))