Commit 62c22279 authored by Stavros-Anastasios Charismiadis's avatar Stavros-Anastasios Charismiadis
Browse files

Fix vendor specific bug (when vendExt parameters missing), Add RNAA in...

Fix vendor specific bug (when vendExt parameters missing), Add RNAA in Discover, Publish and Security (not finished)
parent 0725b52b
Loading
Loading
Loading
Loading
Loading
+9 −9
Original line number Original line Diff line number Diff line
@@ -66,19 +66,19 @@ def all_service_apis_get(api_invoker_id, api_name=None, api_version=None, comm_t


    if supported_features is not None:
    if supported_features is not None:
        supp_feat_dict = DiscoveredAPIs.return_supp_feat_dict(supported_features)
        supp_feat_dict = DiscoveredAPIs.return_supp_feat_dict(supported_features)
        current_app.logger.info(supp_feat_dict)

        vs_fields_exist = False
        # vs_fields_exist = False
        if supp_feat_dict['VendSpecQueryParams']:
        if supp_feat_dict['VendSpecQueryParams']:
            for q_params in request.args:
            for q_params in request.args:
                if "vend-spec" in q_params:
                if "vend-spec" in q_params:
                    query_params[q_params] = json.loads(request.args[q_params])
                    query_params[q_params] = json.loads(request.args[q_params])
                    vs_fields_exist = True
                    # vs_fields_exist = True
            if not vs_fields_exist:
            # if not vs_fields_exist:
                return bad_request_error(
            #     return bad_request_error(
                    detail="If VendorExt feature is enabled, then vendor-specific parameters are mandatory",
            #         detail="If VendorExt feature is enabled, then vendor-specific parameters are mandatory",
                    cause="Mandatory parameters missing",
            #         cause="Mandatory parameters missing",
                    invalid_params=[{"param": "vendor extensibility parameters", "reason": "missing"}]
            #         invalid_params=[{"param": "vendor extensibility parameters", "reason": "missing"}]
                )
            #     )
        if supp_feat_dict['RNAA']:
        if supp_feat_dict['RNAA']:
            if not query_params["api_prov_name"] and not query_params["ue_ip_addr"]:
            if not query_params["api_prov_name"] and not query_params["ue_ip_addr"]:
                return bad_request_error(detail="req_api_prov_name or ue_ip_addr parameters are mandatory when RNAA is enabled",
                return bad_request_error(detail="req_api_prov_name or ue_ip_addr parameters are mandatory when RNAA is enabled",
+2 −2
Original line number Original line Diff line number Diff line
@@ -48,10 +48,10 @@ class DiscoverApisOperations(Resource):
                "data_format": '{"aef_profiles": {"$elemMatch": {"data_format":"QPV"}}}',
                "data_format": '{"aef_profiles": {"$elemMatch": {"data_format":"QPV"}}}',
                "api_cat": "service_api_category",
                "api_cat": "service_api_category",
                "api_prov_name": "api_prov_name",
                "api_prov_name": "api_prov_name",
                "ue_ip_addr": '{"$or":[{"aef_profiles": {"$elemMatch": {"ue_ip_range.ue_ipv4_addr_ranges" : {"$elemMatch": {"start":"QPV"}}}}},{"aef_profiles": {"$elemMatch": {"ue_ip_range.ue_ipv4_addr_ranges" : {"$elemMatch": {"end":"QPV"}}}}}, {"aef_profiles": {"$elemMatch": {"ue_ip_range.ue_ipv6_addr_ranges" : {"$elemMatch": {"start":"QPV"}}}}}, {"aef_profiles": {"$elemMatch": {"ue_ip_range.ue_ipv6_addr_ranges" : {"$elemMatch": {"end":"QPV"}}}}}]}',
                "supported_features": "supported_features",
                "supported_features": "supported_features",
                "api_supported_features": "api_supp_feats"
                "api_supported_features": "api_supp_feats"
            }
            }

            vend_spec_query_params_n_values = {}
            vend_spec_query_params_n_values = {}
            supp_feat = query_params["supported_features"]
            supp_feat = query_params["supported_features"]
            del query_params["supported_features"]
            del query_params["supported_features"]
@@ -62,7 +62,7 @@ class DiscoverApisOperations(Resource):
                        vend_param = param.split("vend-spec-")[1]
                        vend_param = param.split("vend-spec-")[1]
                        attribute_path = query_params[param]["target"].split('/')
                        attribute_path = query_params[param]["target"].split('/')
                        vend_spec_query_params_n_values[attribute_path[1] + "." + vend_param] = query_params[param]["value"]
                        vend_spec_query_params_n_values[attribute_path[1] + "." + vend_param] = query_params[param]["value"]
                    elif param in ["api_version", "comm_type", "protocol", "aef_id", "data_format"]:
                    elif param in ["api_version", "comm_type", "protocol", "aef_id", "data_format", "ue_ip_addr"]:
                        my_params.append(json.loads(query_params_name[param].replace("QPV", query_params[param])))
                        my_params.append(json.loads(query_params_name[param].replace("QPV", query_params[param])))
                    else:
                    else:
                        my_params.append({query_params_name[param]: query_params[param]})
                        my_params.append({query_params_name[param]: query_params[param]})
+2 −2
Original line number Original line Diff line number Diff line
@@ -1167,10 +1167,10 @@ components:
      title: DiscoveredAPIs
      title: DiscoveredAPIs
      type: object
      type: object
    IpAddrInfo:
    IpAddrInfo:
      description: Represents the UE IP address information.
      type: string
      type: string
      description: Represents the UE IP address information.
      nullable: true
      nullable: true
      oneOf: []
#      oneOf: []
      properties:
      properties:
        ipv4Addr:
        ipv4Addr:
          description: |
          description: |
+1 −1
Original line number Original line Diff line number Diff line
@@ -1907,7 +1907,7 @@ components:
      title: ServiceKpis
      title: ServiceKpis
      type: object
      type: object
    IpAddrRange:
    IpAddrRange:
      anyOf: []
#      anyOf: []
      description: Represents the list of public IP ranges
      description: Represents the list of public IP ranges
      example:
      example:
        ueIpv4AddrRanges:
        ueIpv4AddrRanges:
+15 −0
Original line number Original line Diff line number Diff line
@@ -15,6 +15,9 @@ from flask import request, current_app


from ..core.redis_internal_event import RedisInternalEvent
from ..core.redis_internal_event import RedisInternalEvent


from capif_security.rnaa import find_rnaa_attribute_in_body
from ..core.responses import bad_request_error

service_security_ops = SecurityOperations()
service_security_ops = SecurityOperations()
publish_ops = Publisher()
publish_ops = Publisher()


@@ -175,6 +178,18 @@ def trusted_invokers_api_invoker_id_put(api_invoker_id, body): # noqa: E501
    """
    """
    current_app.logger.info("Creating security context")
    current_app.logger.info("Creating security context")


    supp_feat_dict = ServiceSecurity.return_supp_feat_dict(
        body['supportedFeatures'])
    current_app.logger.info(supp_feat_dict)

    rnaa_fields = find_rnaa_attribute_in_body(body, '')
    current_app.logger.info(rnaa_fields)
    if supp_feat_dict['RNAA'] ^ bool(rnaa_fields):
        return bad_request_error(
            detail="If and only if RNAA  feature is enabled, grantTypes parameter are mandatory",
            cause="Mandatory parameters missing", invalid_params=[
                {"param": "grantTypes", "reason": "missing"}])

    if request.is_json:
    if request.is_json:
        body = ServiceSecurity.from_dict(request.get_json())  # noqa: E501
        body = ServiceSecurity.from_dict(request.get_json())  # noqa: E501
    res = service_security_ops.create_servicesecurity(api_invoker_id, body)
    res = service_security_ops.create_servicesecurity(api_invoker_id, body)
Loading