Loading services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/internal_service_ops.py +21 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,23 @@ class InternalServiceOps(Resource): mycol = self.db.get_col_by_name(self.db.acls) # 🚨 Nueva Lógica: Recuperar configuración desde capifConfiguration en MongoDB config_col = self.db.get_col_by_name("capifConfiguration") capif_config = config_col.find_one({"config_name": "default"}) if capif_config: settings = capif_config.get("settings", {}).get("acl_policy_settings", {}) allowed_total_invocations = settings.get("allowedTotalInvocations", 100) allowed_invocations_per_second = settings.get("allowedInvocationsPerSecond", 10) time_range_days = settings.get("allowedInvocationTimeRangeDays", 365) else: current_app.logger.error("CAPIF Configuration not found, applying all values to 0.") allowed_total_invocations = 0 allowed_invocations_per_second = 0 time_range_days = 0 res = mycol.find_one( {"service_id": service_id, "aef_id": aef_id}, {"_id": 0}) Loading @@ -28,9 +45,9 @@ class InternalServiceOps(Resource): current_app.logger.info( f"Adding invoker ACL for invoker {invoker_id}") range_list = [TimeRangeList( datetime.utcnow(), datetime.utcnow()+timedelta(days=365))] datetime.utcnow(), datetime.utcnow()+timedelta(days=time_range_days))] invoker_acl = ApiInvokerPolicy( invoker_id, current_app.config["invocations"]["total"], current_app.config["invocations"]["perSecond"], range_list) invoker_id, allowed_total_invocations, allowed_invocations_per_second, range_list) r = mycol.find_one({"service_id": service_id, "aef_id": aef_id, "api_invoker_policies.api_invoker_id": invoker_id}, {"_id": 0}) if r is None: Loading @@ -40,9 +57,9 @@ class InternalServiceOps(Resource): current_app.logger.info( f"Creating service ACLs for service: {service_id}") range_list = [TimeRangeList( datetime.utcnow(), datetime.utcnow()+timedelta(days=365))] datetime.utcnow(), datetime.utcnow()+timedelta(days=time_range_days))] invoker_acl = ApiInvokerPolicy( invoker_id, current_app.config["invocations"]["total"], current_app.config["invocations"]["perSecond"], range_list) invoker_id, allowed_total_invocations, allowed_invocations_per_second, range_list) service_acls = { "service_id": service_id, Loading services/helper/config.yaml +7 −3 Original line number Diff line number Diff line Loading @@ -25,11 +25,15 @@ capifConfiguration: { description: "Default CAPIF Configuration", settings: { certify_expiration_period: 30, acls_size_configuration: 24, security_method_priority: { psk: 1, oauth: 1, pki: 2, oauth: 3 psk: 3 }, acl_policy_settings: { allowedTotalInvocations: 5, allowedInvocationsPerSecond: 10, allowedInvocationTimeRangeDays: 365 } } } services/helper/helper_service/controllers/helper_controller.py +29 −0 Original line number Diff line number Diff line Loading @@ -113,3 +113,32 @@ def getEvents(): @helper_routes.route("/helper/deleteEntities/<uuid>", methods=["DELETE"]) def deleteUserEntities(uuid): return helper_operation.remove_entities(uuid) @helper_routes.route("/helper/getConfiguration", methods=["GET"]) def getConfiguration(): """Devuelve toda la configuración actual""" return helper_operation.get_configuration() @helper_routes.route("/helper/updateConfigParam", methods=["PATCH"]) def updateConfigParam(): """Actualiza un único parámetro de la configuración""" data = request.json param_path = data.get("param_path") # Ej. "settings.acl_policy_settings.allowedTotalInvocations" new_value = data.get("new_value") if not param_path or new_value is None: return jsonify(message="Missing 'param_path' or 'new_value' in request body"), 400 return helper_operation.update_config_param(param_path, new_value) @helper_routes.route("/helper/replaceConfiguration", methods=["PUT"]) def replaceConfiguration(): """Reemplaza toda la configuración con una nueva""" new_config = request.json if not new_config: return jsonify(message="Missing new configuration in request body"), 400 return helper_operation.replace_configuration(new_config) services/helper/helper_service/core/helper_operations.py +48 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,54 @@ class HelperOperations: current_app.logger.debug(f"User entities removed successfully") return jsonify(message="User entities removed successfully"), 200 def get_configuration(self): """Recupera toda la configuración actual""" current_app.logger.debug("Retrieving current CAPIF configuration") config_col = self.db.get_col_by_name(self.db.capifConfiguration) config = config_col.find_one({"config_name": "default"}, {"_id": 0}) if not config: return jsonify(message="No CAPIF configuration found"), 404 return jsonify(config), 200 def update_config_param(self, param_path, new_value): """ Actualiza un único parámetro en la configuración. param_path: Ruta del parámetro (ej. settings.acl_policy_settings.allowedTotalInvocations) """ current_app.logger.debug(f"Updating configuration parameter: {param_path} with value: {new_value}") config_col = self.db.get_col_by_name(self.db.capifConfiguration) # Construir el query dinámico para actualizar un parámetro específico update_query = {"$set": {param_path: new_value}} result = config_col.update_one({"config_name": "default"}, update_query) if result.modified_count == 0: return jsonify(message=f"No configuration found or parameter '{param_path}' not updated"), 404 return jsonify(message=f"Parameter '{param_path}' updated successfully"), 200 def replace_configuration(self, new_config): """ Reemplaza toda la configuración actual con una nueva. """ current_app.logger.debug("Replacing entire CAPIF configuration") config_col = self.db.get_col_by_name(self.db.capifConfiguration) # Reemplazar la configuración existente con la nueva result = config_col.replace_one({"config_name": "default"}, new_config, upsert=True) if result.matched_count == 0: return jsonify(message="No existing configuration found; a new one was created"), 201 return jsonify(message="Configuration replaced successfully"), 200 Loading
services/TS29222_CAPIF_Access_Control_Policy_API/capif_acl/core/internal_service_ops.py +21 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,23 @@ class InternalServiceOps(Resource): mycol = self.db.get_col_by_name(self.db.acls) # 🚨 Nueva Lógica: Recuperar configuración desde capifConfiguration en MongoDB config_col = self.db.get_col_by_name("capifConfiguration") capif_config = config_col.find_one({"config_name": "default"}) if capif_config: settings = capif_config.get("settings", {}).get("acl_policy_settings", {}) allowed_total_invocations = settings.get("allowedTotalInvocations", 100) allowed_invocations_per_second = settings.get("allowedInvocationsPerSecond", 10) time_range_days = settings.get("allowedInvocationTimeRangeDays", 365) else: current_app.logger.error("CAPIF Configuration not found, applying all values to 0.") allowed_total_invocations = 0 allowed_invocations_per_second = 0 time_range_days = 0 res = mycol.find_one( {"service_id": service_id, "aef_id": aef_id}, {"_id": 0}) Loading @@ -28,9 +45,9 @@ class InternalServiceOps(Resource): current_app.logger.info( f"Adding invoker ACL for invoker {invoker_id}") range_list = [TimeRangeList( datetime.utcnow(), datetime.utcnow()+timedelta(days=365))] datetime.utcnow(), datetime.utcnow()+timedelta(days=time_range_days))] invoker_acl = ApiInvokerPolicy( invoker_id, current_app.config["invocations"]["total"], current_app.config["invocations"]["perSecond"], range_list) invoker_id, allowed_total_invocations, allowed_invocations_per_second, range_list) r = mycol.find_one({"service_id": service_id, "aef_id": aef_id, "api_invoker_policies.api_invoker_id": invoker_id}, {"_id": 0}) if r is None: Loading @@ -40,9 +57,9 @@ class InternalServiceOps(Resource): current_app.logger.info( f"Creating service ACLs for service: {service_id}") range_list = [TimeRangeList( datetime.utcnow(), datetime.utcnow()+timedelta(days=365))] datetime.utcnow(), datetime.utcnow()+timedelta(days=time_range_days))] invoker_acl = ApiInvokerPolicy( invoker_id, current_app.config["invocations"]["total"], current_app.config["invocations"]["perSecond"], range_list) invoker_id, allowed_total_invocations, allowed_invocations_per_second, range_list) service_acls = { "service_id": service_id, Loading
services/helper/config.yaml +7 −3 Original line number Diff line number Diff line Loading @@ -25,11 +25,15 @@ capifConfiguration: { description: "Default CAPIF Configuration", settings: { certify_expiration_period: 30, acls_size_configuration: 24, security_method_priority: { psk: 1, oauth: 1, pki: 2, oauth: 3 psk: 3 }, acl_policy_settings: { allowedTotalInvocations: 5, allowedInvocationsPerSecond: 10, allowedInvocationTimeRangeDays: 365 } } }
services/helper/helper_service/controllers/helper_controller.py +29 −0 Original line number Diff line number Diff line Loading @@ -113,3 +113,32 @@ def getEvents(): @helper_routes.route("/helper/deleteEntities/<uuid>", methods=["DELETE"]) def deleteUserEntities(uuid): return helper_operation.remove_entities(uuid) @helper_routes.route("/helper/getConfiguration", methods=["GET"]) def getConfiguration(): """Devuelve toda la configuración actual""" return helper_operation.get_configuration() @helper_routes.route("/helper/updateConfigParam", methods=["PATCH"]) def updateConfigParam(): """Actualiza un único parámetro de la configuración""" data = request.json param_path = data.get("param_path") # Ej. "settings.acl_policy_settings.allowedTotalInvocations" new_value = data.get("new_value") if not param_path or new_value is None: return jsonify(message="Missing 'param_path' or 'new_value' in request body"), 400 return helper_operation.update_config_param(param_path, new_value) @helper_routes.route("/helper/replaceConfiguration", methods=["PUT"]) def replaceConfiguration(): """Reemplaza toda la configuración con una nueva""" new_config = request.json if not new_config: return jsonify(message="Missing new configuration in request body"), 400 return helper_operation.replace_configuration(new_config)
services/helper/helper_service/core/helper_operations.py +48 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,54 @@ class HelperOperations: current_app.logger.debug(f"User entities removed successfully") return jsonify(message="User entities removed successfully"), 200 def get_configuration(self): """Recupera toda la configuración actual""" current_app.logger.debug("Retrieving current CAPIF configuration") config_col = self.db.get_col_by_name(self.db.capifConfiguration) config = config_col.find_one({"config_name": "default"}, {"_id": 0}) if not config: return jsonify(message="No CAPIF configuration found"), 404 return jsonify(config), 200 def update_config_param(self, param_path, new_value): """ Actualiza un único parámetro en la configuración. param_path: Ruta del parámetro (ej. settings.acl_policy_settings.allowedTotalInvocations) """ current_app.logger.debug(f"Updating configuration parameter: {param_path} with value: {new_value}") config_col = self.db.get_col_by_name(self.db.capifConfiguration) # Construir el query dinámico para actualizar un parámetro específico update_query = {"$set": {param_path: new_value}} result = config_col.update_one({"config_name": "default"}, update_query) if result.modified_count == 0: return jsonify(message=f"No configuration found or parameter '{param_path}' not updated"), 404 return jsonify(message=f"Parameter '{param_path}' updated successfully"), 200 def replace_configuration(self, new_config): """ Reemplaza toda la configuración actual con una nueva. """ current_app.logger.debug("Replacing entire CAPIF configuration") config_col = self.db.get_col_by_name(self.db.capifConfiguration) # Reemplazar la configuración existente con la nueva result = config_col.replace_one({"config_name": "default"}, new_config, upsert=True) if result.matched_count == 0: return jsonify(message="No existing configuration found; a new one was created"), 201 return jsonify(message="Configuration replaced successfully"), 200