Commit 2476a00f authored by Pelayo Torres's avatar Pelayo Torres
Browse files

check API with interface details

parent 8a1f3005
Loading
Loading
Loading
Loading
Loading
+60 −6
Original line number Diff line number Diff line
@@ -155,7 +155,31 @@ class SecurityOperations(Resource):

            for service_instance in service_security.security_info:
                if service_instance.interface_details is not None:
                    security_methods = service_instance.interface_details.security_methods

                    # We look for if the passed interface exists for the given apiId
                    capif_service_col = self.db.get_col_by_name(
                        self.db.capif_service_col)
                    
                    aef_profile = capif_service_col.find_one(
                        {"api_id": service_instance.api_id, 
                         "aef_profiles.interface_descriptions":{
                            "$elemMatch": service_instance.interface_details.to_dict()
                        }
                        }, 
                        {"aef_profiles.interface_descriptions.$": 1, "_id": 0})
                    
                    current_app.logger.debug("Aef profile: " + str(aef_profile))

                    if aef_profile is None:
                        current_app.logger.error(
                            "Not found service with this interface description: " + json.dumps(clean_empty(service_instance.interface_details.to_dict())))
                        return not_found_error(detail=f"Service with interfaceDescription {json.dumps(clean_empty(service_instance.interface_details.to_dict()))} not found", cause="Not found Service")

                    # We obtain the interface security methods
                    security_methods = aef_profile["aef_profiles"][0]["interface_descriptions"][0]["security_methods"]

                    current_app.logger.debug("Interface security methods: " + str(security_methods))

                    pref_security_methods = service_instance.pref_security_methods
                    valid_security_method = set(
                        security_methods) & set(pref_security_methods)
@@ -319,12 +343,35 @@ class SecurityOperations(Resource):

            for service_instance in service_security.security_info:
                if service_instance.interface_details is not None:
                    security_methods = service_instance.interface_details.security_methods

                     # We look for if the passed interface exists for the given apiId
                    capif_service_col = self.db.get_col_by_name(
                        self.db.capif_service_col)
                    
                    aef_profile = capif_service_col.find_one(
                        {"api_id": service_instance.api_id, 
                         "aef_profiles.interface_descriptions":{
                            "$elemMatch": service_instance.interface_details.to_dict()
                        }
                        }, 
                        {"aef_profiles.interface_descriptions.$": 1, "_id": 0})
                    
                    current_app.logger.debug("Aef profile: " + str(aef_profile))

                    if aef_profile is None:
                        current_app.logger.error(
                            "Not found service with this interface description: " + json.dumps(clean_empty(service_instance.interface_details.to_dict())))
                        return not_found_error(detail=f"Service with interfaceDescription {json.dumps(clean_empty(service_instance.interface_details.to_dict()))} not found", cause="Not found Service")

                    # We obtain the interface security methods
                    security_methods = aef_profile["aef_profiles"][0]["interface_descriptions"][0]["security_methods"]

                    current_app.logger.debug("Interface security methods: " + str(security_methods))

                    pref_security_methods = service_instance.pref_security_methods
                    valid_security_method = set(
                        security_methods) & set(pref_security_methods)
                    service_instance.sel_security_method = list(
                        valid_security_method)[0]

                else:
                    capif_service_col = self.db.get_col_by_name(
                        self.db.capif_service_col)
@@ -341,6 +388,13 @@ class SecurityOperations(Resource):
                                              for security_method in array_methods["security_methods"]]
                    valid_security_method = set(
                        valid_security_methods) & set(pref_security_methods)
                    
                    
                if len(list(valid_security_method)) == 0:
                    current_app.logger.error(
                        "Not found comptaible security method with pref security method")
                    return bad_request_error(detail="Not found compatible security method with pref security method", cause="Error pref security method", invalid_params=[{"param": "prefSecurityMethods", "reason": "pref security method not compatible with security method available"}])
                
                service_instance.sel_security_method = list(
                        valid_security_method)[0]