Resolve "Provider Management API supported feature negotiation"

Proposers

  • Stavros Charismiadis

...

Description

This MR will merge branch that contains the first implementation of suppFeat decode on provider Management.

Acknowledgements

This work is funded by the European Commission through the FIDAL project with Grant Agreement number 101096146.

Closes #134 (closed)

Edited by Jorge Moratinos

Merge request reports

Loading
+17 −0
Changes for services/TS29222_CAPIF_API_Provider_Management_API/api_provider_management/core/provider_enrolment_details_api.py: 17 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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):
@@ -50,6 +61,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")

            for api_provider_func in api_provider_enrolment_details.api_prov_funcs:
@@ -136,6 +150,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:
                    func.api_prov_func_id = func.api_prov_func_role + \
Loading