Commit 523288ae authored by Jorge Moratinos's avatar Jorge Moratinos
Browse files

Merge branch 'OCF134-provider-management-api-supported-feature-negotiation' into 'staging'

Resolve "Provider Management API supported feature negotiation"

Closes #134

See merge request !117
parents 9dda8838 f9e765ea
Loading
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line 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
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):
class ProviderManagementOperations(Resource):


    def __check_api_provider_domain(self, api_prov_dom_id):
    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(
            api_provider_enrolment_details.api_prov_dom_id = secrets.token_hex(
                15)
                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")
            current_app.logger.debug("Generating certs to api prov funcs")


            for api_provider_func in api_provider_enrolment_details.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):
            if isinstance(result, Response):
                return result
                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:
            for func in api_provider_enrolment_details.api_prov_funcs:
                if func.api_prov_func_id is None:
                if func.api_prov_func_id is None:
                    func.api_prov_func_id = func.api_prov_func_role + \
                    func.api_prov_func_id = func.api_prov_func_role + \