Commit 3192d778 authored by Pelayo Torres's avatar Pelayo Torres
Browse files

Multiple security context for one invoker

parent c2834ff9
Loading
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ class SecurityOperations(Resource):
                return bad_request_error(detail="Bad Param", cause="Detected Bad format of param", invalid_params=[{"param": "notificationDestination", "reason": "Not valid URL format"}])

            services_security_object = mycol.find_one(
                {"api_invoker_id": api_invoker_id})
                {"api_invoker_id": api_invoker_id, "security_info.api_id": {"$in": [info.api_id for info in service_security.security_info]}}, {"_id": 0})

            if services_security_object is not None:

@@ -388,12 +388,19 @@ class SecurityOperations(Resource):
                current_app.logger.debug(
                    "Inserted security context in database")

            rec = dict()
            rec['api_invoker_id'] = api_invoker_id
            rec.update(service_security.to_dict())
            mycol.insert_one(rec)
            # We use update with $setOnInsert and $push with $each to add the security info array if the document is created
            on_insert = service_security.to_dict().copy()
            on_insert.pop('security_info', None) 

            res = make_response(object=serialize_clean_camel_case(service_security), status=201)
            security_context = mycol.find_one_and_update({'api_invoker_id': api_invoker_id},
                             {"$setOnInsert": on_insert,
                              "$push": {"security_info": {"$each": [sec.to_dict() for sec in service_security.security_info]}}},
                             upsert=True ,
                             return_document=ReturnDocument.AFTER,
                             projection={'_id': 0, 'api_invoker_id': 0}   
                             )

            res = make_response(object=dict_to_camel_case(security_context), status=201)
            res.headers['Location'] = f"https://{os.getenv("CAPIF_HOSTNAME")}/capif-security/v1/trustedInvokers/{str(api_invoker_id)}"

            return res