From a5b9ed8160f6078e001aa8087154e6acb3f4d3c0 Mon Sep 17 00:00:00 2001 From: guillecxb Date: Thu, 29 May 2025 18:41:01 +0200 Subject: [PATCH 1/4] add supportedFeatures negotiation to create and update security context --- .../capif_security/core/servicesecurity.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/services/TS29222_CAPIF_Security_API/capif_security/core/servicesecurity.py b/services/TS29222_CAPIF_Security_API/capif_security/core/servicesecurity.py index 2cbc3e77..df4324ba 100644 --- a/services/TS29222_CAPIF_Security_API/capif_security/core/servicesecurity.py +++ b/services/TS29222_CAPIF_Security_API/capif_security/core/servicesecurity.py @@ -24,6 +24,18 @@ security_context_not_found_detail = "Security context not found" api_invoker_no_context_cause = "API Invoker has no security context" +TOTAL_FEATURES = 3 +SUPPORTED_FEATURES_HEX = "4" + +def return_negotiated_supp_feat_dict(supp_feat): + final_supp_feat = bin(int(supp_feat, 16) & int(SUPPORTED_FEATURES_HEX, 16))[2:].zfill(TOTAL_FEATURES)[::-1] + return { + "Notification_test_event": True if final_supp_feat[0] == "1" else False, + "Notification_websocket": True if final_supp_feat[1] == "1" else False, + "SecurityInfoPerAPI": True if final_supp_feat[2] == "1" else False, + "Final": hex(int(final_supp_feat[::-1], 2))[2:] + } + class SecurityOperations(Resource): def __check_invoker(self, api_invoker_id): @@ -207,6 +219,9 @@ class SecurityOperations(Resource): "Already security context defined with same api invoker id") return forbidden_error(detail="Security method already defined", cause="Identical AEF Profile IDs") + negotiated = return_negotiated_supp_feat_dict(service_security.supported_features) + service_security.supported_features = negotiated["Final"] + for service_instance in service_security.security_info: if service_instance.interface_details is not None: @@ -412,6 +427,9 @@ class SecurityOperations(Resource): mycol = self.db.get_col_by_name(self.db.security_info) try: + negotiated_supported_features = return_negotiated_supp_feat_dict(service_security.supported_features) + service_security.supported_features = negotiated_supported_features["Final"] + current_app.logger.debug("Updating security context") result = self.__check_invoker(api_invoker_id) if result != None: -- GitLab From 768ad8c1b4be93b27e2bf7b2b6e693fe38bea035 Mon Sep 17 00:00:00 2001 From: guillecxb Date: Fri, 30 May 2025 12:18:26 +0200 Subject: [PATCH 2/4] launch pipeline -- GitLab From 4308c7ac23241d9fe487296d9789f347b907f53a Mon Sep 17 00:00:00 2001 From: guillecxb Date: Mon, 9 Jun 2025 09:44:33 +0200 Subject: [PATCH 3/4] launch pipeline 2 -- GitLab From 407c1a05ea79607c1768f56a697a8a6f7720c0a7 Mon Sep 17 00:00:00 2001 From: guillecxb Date: Mon, 9 Jun 2025 11:17:32 +0200 Subject: [PATCH 4/4] launch pipeline 3 -- GitLab