Commit 57b89d81 authored by Miguel Ángel Adorna Ruiz's avatar Miguel Ángel Adorna Ruiz
Browse files

Resolve "Supported Features mandatory on POST and PUT Requests"

parent 0a6f0f85
Loading
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -100,6 +100,13 @@ class InvokerManagementOperations(Resource):
            current_app.logger.error("Bad url format")
            current_app.logger.error("Bad url format")
            return bad_request_error(detail="Bad Param", cause="Detected Bad formar of param", invalid_params=[{"param": "notificationDestination", "reason": "Not valid URL format"}])
            return bad_request_error(detail="Bad Param", cause="Detected Bad formar of param", invalid_params=[{"param": "notificationDestination", "reason": "Not valid URL format"}])


        if not apiinvokerenrolmentdetail.supported_features:
            return bad_request_error(
                detail="supportedFeatures not present in request",
                cause="supportedFeatures not present",
                invalid_params=[{"param": "supportedFeatures", "reason": "not defined"}]
            )

        current_app.logger.debug("Signing Certificate")
        current_app.logger.debug("Signing Certificate")


        api_invoker_id = 'INV'+str(secrets.token_hex(15))
        api_invoker_id = 'INV'+str(secrets.token_hex(15))
@@ -148,6 +155,13 @@ class InvokerManagementOperations(Resource):
            if isinstance(result, Response):
            if isinstance(result, Response):
                return result
                return result


            if not apiinvokerenrolmentdetail.supported_features:
                return bad_request_error(
                    detail="supportedFeatures not present in request",
                    cause="supportedFeatures not present",
                    invalid_params=[{"param": "supportedFeatures", "reason": "not defined"}]
                )

            if apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key != result["onboarding_information"]["api_invoker_public_key"]:
            if apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key != result["onboarding_information"]["api_invoker_public_key"]:
                cert = self.__sign_cert(
                cert = self.__sign_cert(
                    apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key, result["api_invoker_id"])
                    apiinvokerenrolmentdetail.onboarding_information.api_invoker_public_key, result["api_invoker_id"])
+15 −1
Original line number Original line Diff line number Diff line
@@ -57,6 +57,13 @@ class ProviderManagementOperations(Resource):
                    "Found provider registered with same id")
                    "Found provider registered with same id")
                return forbidden_error(detail="Provider already registered", cause="Identical provider reg sec")
                return forbidden_error(detail="Provider already registered", cause="Identical provider reg sec")


            if not api_provider_enrolment_details.supp_feat:
                return bad_request_error(
                    detail="suppFeat not present in request",
                    cause="suppFeat not present",
                    invalid_params=[{"param": "suppFeat", "reason": "not defined"}]
                )

            api_provider_enrolment_details.api_prov_dom_id = secrets.token_hex(
            api_provider_enrolment_details.api_prov_dom_id = secrets.token_hex(
                15)
                15)
            
            
@@ -149,6 +156,13 @@ class ProviderManagementOperations(Resource):
            if isinstance(result, Response):
            if isinstance(result, Response):
                return result
                return result


            if not api_provider_enrolment_details.supp_feat:
                return bad_request_error(
                    detail="suppFeat not present in request",
                    cause="suppFeat not present",
                    invalid_params=[{"param": "suppFeat", "reason": "not defined"}]
                )

            negotiated_supported_features = return_negotiated_supp_feat_dict(api_provider_enrolment_details.supp_feat)
            negotiated_supported_features = return_negotiated_supp_feat_dict(api_provider_enrolment_details.supp_feat)
            api_provider_enrolment_details.supp_feat = negotiated_supported_features["Final"]
            api_provider_enrolment_details.supp_feat = negotiated_supported_features["Final"]


+55 −0
Original line number Original line Diff line number Diff line
@@ -182,3 +182,58 @@ Update Onboarded Network App Certificate
    # Check Results
    # Check Results
    Check Response Variable Type And Values    ${resp}    200    APIInvokerEnrolmentDetails
    Check Response Variable Type And Values    ${resp}    200    APIInvokerEnrolmentDetails
    ...    notificationDestination=${new_notification_destination}
    ...    notificationDestination=${new_notification_destination}

Onboard invoker without supported_features
    [Tags]    capif_api_invoker_management-8
    # Default Invoker Registration and Onboarding
    ${register_user_info}=    Register User At Jwt Auth
    ...    username=${invoker_username}    role=${INVOKER_ROLE}

    ${request_body}=    Create Onboarding Notification Body
    ...    http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_callback
    ...    ${register_user_info['csr_request']}
    ...    ${invoker_username}
    ...    supported_features=${None}

    ${resp}=    Post Request Capif
    ...    ${register_user_info['ccf_onboarding_url']}
    ...    json=${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    access_token=${register_user_info['access_token']}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=supportedFeatures not present in request
    ...    cause=supportedFeatures not present

Update Onboarded Network App without supported_features
    [Tags]    capif_api_invoker_management-10
    ${new_notification_destination}=    Set Variable
    ...    http://${CAPIF_CALLBACK_IP}:${CAPIF_CALLBACK_PORT}/netapp_new_callback
    # Default Invoker Registration and Onboarding
    ${register_user_info}    ${url}    ${request_body}=    Invoker Default Onboarding

    Set To Dictionary
    ...    ${request_body}
    ...    notificationDestination=${new_notification_destination}

    Remove From Dictionary
    ...    ${request_body}
    ...    supportedFeatures

    ${resp}=    Put Request Capif
    ...    ${url.path}
    ...    ${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    username=${INVOKER_USERNAME}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=supportedFeatures not present in request
    ...    cause=supportedFeatures not present
+67 −0
Original line number Original line Diff line number Diff line
@@ -203,3 +203,70 @@ Delete Not Registered Api Provider
    ...    title=Not Found
    ...    title=Not Found
    ...    detail=Not Exist Provider Enrolment Details
    ...    detail=Not Exist Provider Enrolment Details
    ...    cause=Not found registrations to send this api provider details
    ...    cause=Not found registrations to send this api provider details

Onboard provider without supported_features
    [Tags]    capif_api_provider_management-9
    # Default Provider Registration and Onboarding
    ${register_user_info}=    Register User At Jwt Auth Provider
    ...    username=${PROVIDER_USERNAME}

    # Create provider Registration Body
    ${apf_func_details}=    Create Api Provider Function Details
    ...    ${register_user_info['apf_username']}
    ...    ${register_user_info['apf_csr_request']}
    ...    APF
    ${aef_func_details}=    Create Api Provider Function Details
    ...    ${register_user_info['aef_username']}
    ...    ${register_user_info['aef_csr_request']}
    ...    AEF
    ${amf_func_details}=    Create Api Provider Function Details
    ...    ${register_user_info['amf_username']}
    ...    ${register_user_info['amf_csr_request']}
    ...    AMF
    ${api_prov_funcs}=    Create List    ${apf_func_details}    ${aef_func_details}    ${amf_func_details}

    ${request_body}=    Create Api Provider Enrolment Details Body
    ...    ${register_user_info['access_token']}
    ...    ${api_prov_funcs}
    ...    suppFeat=${None}

    # Register Provider
    ${resp}=    Post Request Capif
    ...    /api-provider-management/v1/registrations
    ...    json=${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    access_token=${register_user_info['access_token']}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=suppFeat not present in request
    ...    cause=suppFeat not present

Update Registered Api Provider
    [Tags]    capif_api_provider_management-10
    ${register_user_info}=    Provider Default Registration

    ${request_body}=    Set Variable    ${register_user_info['provider_enrollment_details']}

    Set To Dictionary    ${request_body}    apiProvDomInfo=ROBOT_TESTING_MOD

    Remove From Dictionary
    ...    ${request_body}
    ...    suppFeat

    ${resp}=    Put Request Capif
    ...    ${register_user_info['resource_url'].path}
    ...    json=${request_body}
    ...    server=${CAPIF_HTTPS_URL}
    ...    verify=ca.crt
    ...    username=${AMF_PROVIDER_USERNAME}

    # Check Results
    Check Response Variable Type And Values    ${resp}    400    ProblemDetails
    ...    status=400
    ...    title=Bad Request
    ...    detail=suppFeat not present in request
    ...    cause=suppFeat not present
+4 −2
Original line number Original line Diff line number Diff line
def create_onboarding_notification_body(notification_destination="https://host.docker.internal/netapp_callback", api_invoker_public_key="ApiInvokerPublicKey",api_invoker_information='ROBOT_TESTING', api_invoker_id=None):
def create_onboarding_notification_body(notification_destination="https://host.docker.internal/netapp_callback", api_invoker_public_key="ApiInvokerPublicKey",api_invoker_information='ROBOT_TESTING', api_invoker_id=None, supported_features="0"):
    data = {
    data = {
        "notificationDestination": notification_destination,
        "notificationDestination": notification_destination,
        "supportedFeatures": "fffffff",
        "apiInvokerInformation": api_invoker_information,
        "apiInvokerInformation": api_invoker_information,
        "websockNotifConfig": {
        "websockNotifConfig": {
            "requestWebsocketUri": True,
            "requestWebsocketUri": True,
@@ -17,4 +16,7 @@ def create_onboarding_notification_body(notification_destination="https://host.d
    if api_invoker_id != None:
    if api_invoker_id != None:
        data['apiInvokerId'] = api_invoker_id
        data['apiInvokerId'] = api_invoker_id


    if supported_features != None:
        data['supportedFeatures'] = supported_features

    return (data)
    return (data)
Loading