diff --git a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py index 9c96434553e438f1ad04f9044421913d3b5c3c7a..a721a5aa4c141fc20f31bfce9962c1dcb3756325 100644 --- a/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py +++ b/services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py @@ -15,6 +15,17 @@ from ..core.sign_certificate import sign_certificate from ..util import dict_to_camel_case, clean_empty, serialize_clean_camel_case +TOTAL_FEATURES = 2 +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 { + "PatchUpdate": True if final_supp_feat[0] == "1" else False, + "RNAA": True if final_supp_feat[1] == "1" else False, + "Final": hex(int(final_supp_feat[::-1], 2))[2:] + } + class ProviderManagementOperations(Resource): def __check_api_provider_domain(self, api_prov_dom_id): @@ -49,6 +60,9 @@ class ProviderManagementOperations(Resource): api_provider_enrolment_details.api_prov_dom_id = secrets.token_hex( 15) + + negotiated_supported_features = return_negotiated_supp_feat_dict(api_provider_enrolment_details.supp_feat) + api_provider_enrolment_details.supp_feat = negotiated_supported_features["Final"] current_app.logger.debug("Generating certs to api prov funcs") @@ -135,6 +149,9 @@ class ProviderManagementOperations(Resource): if isinstance(result, Response): return result + + negotiated_supported_features = return_negotiated_supp_feat_dict(api_provider_enrolment_details.supp_feat) + api_provider_enrolment_details.supp_feat = negotiated_supported_features["Final"] for func in api_provider_enrolment_details.api_prov_funcs: if func.api_prov_func_id is None: