From 28fefd7c27f39f564bbaf8405608e5ec955ee990 Mon Sep 17 00:00:00 2001 From: Stavros-Anastasios Charismiadis Date: Thu, 5 Jun 2025 10:59:30 +0300 Subject: [PATCH] Include supported feature negotiation on POST and PUT methods --- .../core/apiinvokerenrolmentdetails.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py index e3164aeb..5956beed 100644 --- a/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py +++ b/services/TS29222_CAPIF_API_Invoker_Management_API/api_invoker_management/core/apiinvokerenrolmentdetails.py @@ -19,6 +19,24 @@ from .redis_internal_event import RedisInternalEvent from .resources import Resource from .responses import bad_request_error, forbidden_error, internal_server_error, make_response, not_found_error + +TOTAL_FEATURES = 4 +SUPPORTED_FEATURES_HEX = "0" + + +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, + "PatchUpdate": True if final_supp_feat[2] == "1" else False, + "ExpirationTime": True if final_supp_feat[3] == "1" else False, + "Final": hex(int(final_supp_feat[::-1], 2))[2:] + } + + publisher_ops = Publisher() @@ -93,6 +111,8 @@ class InvokerManagementOperations(Resource): apiinvokerenrolmentdetail.onboarding_information.api_invoker_certificate = cert[ 'data']['certificate'] + apiinvokerenrolmentdetail.supported_features = return_negotiated_supp_feat_dict(apiinvokerenrolmentdetail.supported_features)["Final"] + # Onboarding Date Record invoker_dict = apiinvokerenrolmentdetail.to_dict() invoker_dict["onboarding_date"] = datetime.now() @@ -136,6 +156,9 @@ class InvokerManagementOperations(Resource): self.auth_manager.update_auth_invoker( cert['data']["certificate"], onboard_id) + apiinvokerenrolmentdetail.supported_features = return_negotiated_supp_feat_dict( + apiinvokerenrolmentdetail.supported_features)["Final"] + apiinvokerenrolmentdetail_update = apiinvokerenrolmentdetail.to_dict() apiinvokerenrolmentdetail_update = { key: value for key, value in apiinvokerenrolmentdetail_update.items() if value is not None -- GitLab