From 5971bfb3f78a2088540749307eab783183958136 Mon Sep 17 00:00:00 2001 From: Cristiano Hoshikawa Date: Tue, 26 Mar 2024 13:59:46 -0300 Subject: [PATCH] Teste para applyValidationAPI() no folder test --- files/OCI_API_Gateway_Automation_files.zip | Bin 27467 -> 35104 bytes files/test/config | 7 + files/test/config.json | 12 + files/test/oci_api_key.pem | 27 ++ files/test/process_api_spec.py | 468 +++++++++++++++++++++ files/test/requirements.txt | 9 + 6 files changed, 523 insertions(+) create mode 100644 files/test/config create mode 100644 files/test/config.json create mode 100644 files/test/oci_api_key.pem create mode 100644 files/test/process_api_spec.py create mode 100644 files/test/requirements.txt diff --git a/files/OCI_API_Gateway_Automation_files.zip b/files/OCI_API_Gateway_Automation_files.zip index 254afecf73dbfc5f7347ee64f1c99c330ed1b9bc..d76a9ee7f1849689e2e831041814fb6fdd3f31af 100644 GIT binary patch delta 11250 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 delta 4180 zcmb7`3s6+o8OQIw_wEWTxFEZCU%>7P%d$Mh8qgI8r~@0ZDPf%zk-;T#BuWDEMp;E3 zc~$+K`huE?)Jdy$w07E#X~5JvO(rB-r%ANBb!0MW(nuqYnS>^4&pmhV%c+^|o!On) zyZ8L=|D5mto%4TvpY;8YCEDsrnOslM*Aj@OGD(kK+Jrx_rd2Kr@xDVgD%9 z!!3Cxgg5wd1~2B_oOj#$pz+g$=>%Q)qyOA`_tqQah6}sfzavlj^S@b=O;lH^)Ze{* z^rM&13&L<(Vt@`)f%>)PzXeq%t_Pu9G7LrLA|-tTgI%!Nzu)z8aKdoa`~6?ub^O_3 zJ9pyi3wtk=&p*Gf^sQGF&usA)jaV^vd0Oo~h*_HogO+?5!kzu2rAwj+qc>%N)tLeT zn@Jj#T1xZV?f35v$75>nfxDGaD{&YgKE%t#zYzoCBf5R0zh1V81NLV_vh z;{QW1d3&<`g+vvmo_afdBSZbf>BlRax6mfXE4&Dc?aZ`CDVFT*?D)mY^D)-4GxZXK zHM^fw2pjyhH(N>H=9k#}c&i=JOwILt>rBJw71WtLj7B8h+4h6* zL5Veg993tB zp~{PBL3~y2=-2rz?Y$d)ll!!oEW7U^c=7_Dja`(p%X~Lg2yLlxJ+d0hAMe%xdCziv z$B+!8zv!6%PmD%xmnJ3p5MAuS1Wb?Y;{416@`>y$=`+2di*4sI;f2h9~z081iYW>8wB-8md_Ya-n znXL_3Smv>Ym*hyMr)jZ3X71yixLN!C)`vIWV|M!fnMGGIl7OWx$?&i#Rke|^-r4kL zvq;4a2F;3et>#`|lzsk`mOl74zU$5HpntA!j zoyP}A*M}dRw;dimdg6e;dJp`nwt9d4&ki3rcwkiXpq!)D|YAkq?i$;jn)@aT`7_3Wo(#Ome#2VYbz3=7I+o z#w3gvD5xMbbB%|NI^l9}4h}PPMT}nh4`G&|f2##UW=cjE5=6tcw&zM(Hf3XjvNG>yjB*ZWG!RzK~}_S8pEA`)+oaG#N!N{_q{N@|nmou4`u97s5)`uk(aIS)Hu$somxR>KIf?P+E$gd_Y9Uz!V1baFU&$wl$0)8Ee5iA_ttJ5K) zbVWWqKy1-0g^9o@!ug6KI2|`rV+ndGAxr@DZ;fEsOo_LcAR1o`HnasBSevo=fVG*8 zCU8eTBIt#L&`>c@yC{+!#aOCtmqpsT6#8~K#GBw^vk8FS| z2V$koUhog3^EKkmcqB)>IVF|A&?$LkXpjyPFc%i96a6kPmXi2Ck9*W*dc8u4^rKVGL#XGY0}7|m{{r&`r#%1w diff --git a/files/test/config b/files/test/config new file mode 100644 index 0000000..74fb1cd --- /dev/null +++ b/files/test/config @@ -0,0 +1,7 @@ +[DEFAULT] +user=ocid1.user.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +fingerprint=36:04:63:cd:36:04:63:cd:36:04:63:cd:36:04:63:cd +key_file=oci_api_key.pem +tenancy=ocid1.tenancy.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +region=us-ashburn-1 + diff --git a/files/test/config.json b/files/test/config.json new file mode 100644 index 0000000..cfdb527 --- /dev/null +++ b/files/test/config.json @@ -0,0 +1,12 @@ +{ + "ClientId" : "0b8cd92bb60b8cd92bb60b8cd92bb6", + "ClientSecret" : "41964196-2cfb-2cfb-2cfb-63246a63246a", + "BaseUrl" : "https://idcs-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.identity.oraclecloud.com", + "AudienceServiceUrl" : "https://idcs-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.identity.oraclecloud.com", + "scope" : "aaaaaaaaaaaaaaaaaaaaaaa.apigateway.us-ashburn-1.oci.customer-oci.com/super_scope", + "TokenIssuer" : "https://identity.oraclecloud.com", + "redirectURL": "http://localhost:8000/callback", + "logoutSufix":"/oauth2/v1/userlogout", + "LogLevel":"INFO", + "ConsoleLog":"True" +} \ No newline at end of file diff --git a/files/test/oci_api_key.pem b/files/test/oci_api_key.pem new file mode 100644 index 0000000..2dba649 --- /dev/null +++ b/files/test/oci_api_key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK +MIIEpAIBAAKCAQEA16UCid4+eyt6kzo+u1BRV4UM8QKfViBZasZBclCOvt8j+lDK ++PlyICemh7G2GNTwleCu61CVYaVcXxZG8LQkHAHCykuq+R7d6lwxkHQTIyKmUj+o +6BCWIQKBgQCAHaQZ4p/XDHVqajity2YCauQKM7eD0cyUnY9h+MKkih1g7brU43DR +u1yJoOnQzddapVr7yVXMl874mU+Jgm7arh+XRL8WuV2RtltKurBhYqtSwiGg0JFx +pRZm1D73NtXRaTSSwYdXakQjPb4FaFdwBouxVylP6GSy4kI2iva3og== +-----END RSA PRIVATE KEY----- diff --git a/files/test/process_api_spec.py b/files/test/process_api_spec.py new file mode 100644 index 0000000..4ce38df --- /dev/null +++ b/files/test/process_api_spec.py @@ -0,0 +1,468 @@ +import base64 +import json +import io +from fdk import response +import oci +import requests +import time +from itertools import groupby +import yaml +import datetime + +# DEFINIR AS VARIAVEIS +# +# Método: process_api_spec() +# displayName = "qrcode" +# compartmentId = "ocid1.compartment.oc1..aaaaaaaaqom2belitvh5ubr342rgzyeycvyg3zt6b4i4owmkzpnpwft37rga" +# config = oci.config.from_file(profile_name='DEFAULT') +# +# Método: getSpec() +# text_file = open("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-15/qrcode.yaml", "r") + +def migrate_to_apigw(payload, url, clientID, secretID): + auth = clientID + ":" + secretID + auth_bytes = auth.encode("ascii") + auth_base64_bytes = base64.b64encode(auth_bytes) + auth_base64_message = auth_base64_bytes.decode("ascii") + + headers = { + 'Content-Type': 'application/json', + 'Authorization': 'Basic ' + auth_base64_message + } + + response = requests.request("POST", url, headers=headers, data=payload) + return response + + +def getSpec(name): + text_file = open(name, "r") + data = text_file.read() + text_file.close() + + if (is_json(data)): + data = data + else: + data = convert_json(data) + + return data + + +def find_base_path(strPath): + base_path = strPath.split('/')[1] + if (len(base_path) == 0): + base_path = strPath + else: + base_path = "/" + base_path + return base_path + +def has_path_endpoint(endPoint): + endPointAux = endPoint.replace("//", "#") + endPointSplited = endPointAux.split('/') + if (len(endPointSplited) > 1): + return True + else: + return False + +def concatSplited(endPointSplited): + count = 0 + endPointStr = "" + for item in endPointSplited: + if (count > 0): + endPointStr = endPointStr + "/" + item + count = count + 1 + return endPointStr + +def find_base_pathendpoint(endPoint, strPath): + base_path = strPath.split('/')[1] + if (len(base_path) == 0 and has_path_endpoint(endPoint)): + endPointAux = endPoint.replace("//", "#") + endPointSplited = endPointAux.split('/') + if (len(endPointSplited) > 1): + endPointSplitedStr = concatSplited(endPointSplited) + if (endPointSplitedStr != None): + base_path = endPointSplitedStr + else: + base_path = strPath + else: + base_path = strPath + else: + endPointAux = endPoint.replace("//", "#") + endPointSplited = endPointAux.split('/') + if (len(endPointSplited) > 1): + endPointSplitedStr = concatSplited(endPointSplited) + if (endPointSplitedStr != None): + base_path = endPointSplitedStr + endPoint = endPointSplited[0].replace("#", "//") + else: + base_path = "/" + base_path + else: + base_path = "/" + base_path + return base_path + +def find_base_endpoint(endPoint): + endPointAux = endPoint.replace("//", "#") + endPointSplited = endPointAux.split('/') + if (len(endPointSplited) > 1): + endPointSplitedStr = endPointSplited[1] + if (endPointSplitedStr != None): + endPoint = endPointSplited[0].replace("#", "//") + return endPoint + +def find_path(strPath): + base_path = strPath.split('/') + if (len(base_path) == 0): + return strPath + else: + auxPath = "" + skipCount = 0 + for b in base_path: + if (skipCount > 1): + auxPath = auxPath + "/" + b + skipCount = skipCount + 1 + base_path = auxPath + return auxPath + +def removeLastSlash(path): + return path.rstrip("/") + +def accMethods(routes, path, status): + METHOD = "" + for spec in routes: + if (find_path(spec["path"]) == path and spec["backend"]["status"] == status): + for method in spec["methods"]: + if (method not in METHOD): + METHOD = (METHOD + " " + method).lstrip().upper() + return METHOD + +def accMethods_v2(routes, path, status): + METHOD = "" + for spec in routes: + if (spec["path"] == path and spec["backend"]["status"] == status): + for method in spec["methods"]: + if (method not in METHOD): + METHOD = (METHOD + " " + method).lstrip().upper() + return METHOD + +def accMethods_v3(routes, path, status): + METHOD = "" + for spec in routes: + if (spec["path"] == path and spec["backend"]["status"] == status): + for method in spec["methods"]: + if (method not in METHOD): + METHOD = (METHOD + " " + method).lstrip().upper() + return METHOD + +def check_endpoint(schemes, endpoint): + if (schemes == ""): + if (endpoint.find("http://") == -1 and endpoint.find("https://") == -1): + endpoint = "https://" + endpoint + else: + if (endpoint.find("http://") == -1 and endpoint.find("https://") == -1): + if (schemes.find("://") == -1): + endpoint = schemes + "://" + endpoint + else: + endpoint = schemes + endpoint + return endpoint + +def key_func(k): + return k['PATH'] + +def group_by(payload): + payload = json.loads(payload) + INFO = sorted(payload, key=key_func) + result_payload = [ ] + for key, value in groupby(INFO, key_func): + list_elements = [ ] + method_list = "" + for element in list(value): + list_elements.append(element) + for subItem in list_elements: + item = json.loads(json.dumps(subItem)) + if (item["METHOD"] not in method_list): + method_list = (method_list + " " + item["METHOD"]).lstrip().upper() + API_NAME = item["API_NAME"] + TYPE = item["TYPE"] + ENVIRONMENT = item["ENVIRONMENT"] + PATH_PREFIX = item["PATH_PREFIX"] + PATH = item["PATH"] + ENDPOINT = item["ENDPOINT"] + SCHEMA_BODY_VALIDATION = item["SCHEMA_BODY_VALIDATION"] + result_payload.append({"API_NAME": API_NAME, "TYPE": TYPE, "ENVIRONMENT": ENVIRONMENT, "PATH_PREFIX": PATH_PREFIX, "PATH": PATH, "ENDPOINT": ENDPOINT, "METHOD": method_list, "SCHEMA_BODY_VALIDATION": SCHEMA_BODY_VALIDATION}) + return result_payload + +def verify_path(json_data_list): + list_final = [] + for item in json_data_list: + if (item["PATH"] == ""): + for item2 in json_data_list: + if (item2["PATH"] == ""): + list_final.append({ + 'API_NAME': item2["API_NAME"], + 'TYPE': item2["TYPE"], + 'ENVIRONMENT': item2["ENVIRONMENT"], + 'METHOD': item2["METHOD"], + 'PATH_PREFIX': "/", + 'PATH': item2["PATH_PREFIX"], + 'ENDPOINT': item2["ENDPOINT"], + 'SCHEMA_BODY_VALIDATION': item2["SCHEMA_BODY_VALIDATION"], + 'CONTENT_TYPE': item2["CONTENT_TYPE"] + }) + else: + list_final.append({ + 'API_NAME': item2["API_NAME"], + 'TYPE': item2["TYPE"], + 'ENVIRONMENT': item2["ENVIRONMENT"], + 'METHOD': item2["METHOD"], + 'PATH_PREFIX': item2["PATH_PREFIX"], + 'PATH': item2["PATH"], + 'ENDPOINT': item2["ENDPOINT"], + 'SCHEMA_BODY_VALIDATION': item2["SCHEMA_BODY_VALIDATION"], + 'CONTENT_TYPE': item2["CONTENT_TYPE"] + }) + + return list_final + return json_data_list + +def DateEncoder(obj): + if isinstance(obj, datetime.datetime): + return obj.strftime('%Y-%m-%d') + +def is_json(swagger): + try: + body = json.loads(swagger) + return True + except: + try: + yaml_object = yaml.safe_load(swagger) # yaml_object will be a list or a dict + s = json.dumps(yaml_object, indent=2, default=DateEncoder) + return False + except: + return False + +def convert_json(swagger): + yaml_object = yaml.safe_load(swagger) # yaml_object will be a list or a dict + return json.dumps(yaml_object, indent=2, default=DateEncoder) + + +def process_api_spec(): + # displayName = "EXEMPLO" + compartmentId = "ocid1.compartment.oc1..aaaaaaaaqom2belitvh5ubr342rgzyeycvyg3zt6b4i4owmkzpnpwft37rga" + environment = "QA" + type = "REST" + rate_limit = "2500,CLIENT_IP" + + try: + rate_config = rate_limit.split(',') + rate_seconds = int(rate_config[0]) + rate_key = rate_config[1] + print(rate_seconds) + print(rate_key) + except: + print("erro") + + +# Create a default config using DEFAULT profile in default location + # Refer to + # https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File + # for more info + config = oci.config.from_file(profile_name='DEFAULT') + + # TELEMETRY + # monitoring_client = oci.monitoring.MonitoringClient(config, service_endpoint="https://telemetry-ingestion.us-ashburn-1.oraclecloud.com/20180401") + # + # post_metric_data_response = monitoring_client.post_metric_data( + # post_metric_data_details=oci.monitoring.models.PostMetricDataDetails( + # metric_data=[ + # oci.monitoring.models.MetricDataDetails( + # namespace="api_customers", + # compartment_id=compartmentId, + # name="customer_request", + # dimensions={ + # "customer": "Cliente A"}, + # datapoints=[ + # oci.monitoring.models.Datapoint( + # timestamp=datetime.strptime( + # datetime.utcnow().isoformat() + 'Z', + # "%Y-%m-%dT%H:%M:%S.%fZ"), + # value=1, + # count=1)], + # resource_group="API_group", + # metadata={ + # "metadados": "api"})])) + + # Initialize service client with default config file + apigateway_client = oci.apigateway.ApiGatewayClient(config) + + # ----------------------------------------------------------------- + + arquivo = [] + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Testes 2024-03-11/1.0.0-rc2_rcc-interop-agenda_modificado.json") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Testes 2024-03-11/caso1.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Testes 2024-03-11/caso2.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-15/caso2024-03-15.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-15/qrcode.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-18/1.0.0-rc1_cob 1.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-18/1.0.0-rc1_cobv.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-18/1.0.0-rc1_loc.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-18/1.0.0-rc1_lotecobv.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-18/1.0.0-rc1_pix.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-18/1.0.0-rc1_webhook.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-20/1.0.0-rc8_cprs.json") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-21/1.0.0-rc1_cob 1.yaml") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-21/1.0.0-rc2_rcc-interop-agenda.json") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-22/1.0.0-rc8_cprs.json") + arquivo.append("/Users/cristianohoshikawa/Dropbox/ORACLE/B3/API Gateway/Teste 2024-03-25/Banco B3/1.0.0-rc1_cob.yaml") + display = [] + display.append("Interoperabilidades-Agenda") + display.append("caso-1") + display.append("caso-2") + display.append("caso2024-03-15") + display.append("qrcode") + display.append("cob") + display.append("cobv") + display.append("loc") + display.append("lotecobv") + display.append("pix") + display.append("webhook") + display.append("cprs") + display.append("cob1") + display.append("rcc-interop-agenda") + display.append("Rural") + display.append("cob") + + idxArquivo = 0 + + while idxArquivo < len(arquivo): + + print("---------------------------------------------------------") + print(arquivo[idxArquivo]) + print("") + + data = getSpec(arquivo[idxArquivo]) + fullSpec = json.loads(data) + + displayName = display[idxArquivo] + + version = "3" + try: + version = (fullSpec["swagger"])[:1] + except: + version = (fullSpec["openapi"])[:1] + + print("version", version) + + if (version == "3"): + endPoint = fullSpec["servers"][0]["url"] + else: + endPoint = fullSpec["host"] + print("url") + print(endPoint) + + listApis = apigateway_client.list_apis(compartment_id=compartmentId, display_name=displayName, + lifecycle_state="ACTIVE") + apis = json.loads(str(listApis.data)) + c = len(apis["items"]) + api_id = apis["items"][0]["id"] + print(api_id) + + try: + get_api = apigateway_client.get_api_deployment_specification(api_id=api_id) + + api_spec = json.loads(str(get_api.data)) + print(api_spec["routes"]) + json_data_list = [] + + endPointOrigin = endPoint + for spec in api_spec["routes"]: + status = spec["backend"]["status"] + specPath = spec["path"] + + if (version == "3"): + if (has_path_endpoint(endPointOrigin)): + endPoint = find_base_endpoint(endPointOrigin) + specPath = (find_base_pathendpoint(endPointOrigin, specPath)).replace("//", "/") + fullEndpoint = (endPoint + specPath + spec["path"]).replace("{", "${request.path[").replace("}", "]}") + FULL_PATH = specPath + ENDPOINT = fullEndpoint + PATH = spec["path"] + PATH_PREFIX = specPath + METHOD = accMethods_v3(api_spec["routes"], spec["path"], status) + else: + fullEndpoint = (endPoint + find_base_path(specPath) + find_path(specPath)).replace("{", "${request.path[").replace("}", "]}") + FULL_PATH = specPath + ENDPOINT = fullEndpoint + PATH = find_path(specPath) + PATH_PREFIX = find_base_path(specPath) + METHOD = accMethods(api_spec["routes"], find_path(spec["path"]), status) + else: + schemes = "" + try: + schemes = fullSpec["schemes"][0] + except: + schemes = "https" + + fullEndpoint = check_endpoint(schemes, (endPoint + removeLastSlash(fullSpec["basePath"]) + spec["path"]).replace("{", "${request.path[").replace("}", "]}")) + FULL_PATH = fullSpec["basePath"] + spec["path"] + ENDPOINT = fullEndpoint + PATH = spec["path"] + PATH_PREFIX = removeLastSlash(fullSpec["basePath"]) + METHOD = accMethods_v2(api_spec["routes"], PATH, status) + + OPERATIONID = fullSpec["paths"][spec["path"]][str(spec["methods"][0]).lower()]["operationId"] + API_NAME = fullSpec["info"]["title"] + if (version == "3"): + try: + SCHEMA_BODY_VALIDATION = str(fullSpec["paths"][spec["path"]][str(spec["methods"][0]).lower()]["requestBody"]["content"]["application/json"]) + CONTENT_TYPE = "application/json" + except: + SCHEMA_BODY_VALIDATION = "" + CONTENT_TYPE = "" + else: + SCHEMA_BODY_VALIDATION = "" + CONTENT_TYPE = "" + try: + reference = str(fullSpec["paths"][spec["path"]][str(spec["methods"][0]).lower()]["parameters"][0]["schema"]["$ref"]).replace("#/definitions/", "") + SCHEMA_BODY_VALIDATION = reference + "," + api_id + CONTENT_TYPE = "application/json" + except: + SCHEMA_BODY_VALIDATION = "" + CONTENT_TYPE = "" + TYPE = type + ENVIRONMENT = environment + json_data_list.append({ + 'API_NAME': API_NAME, + 'TYPE': TYPE, + 'ENVIRONMENT': ENVIRONMENT, + 'METHOD': METHOD, + 'PATH_PREFIX': PATH_PREFIX, + 'PATH': PATH, + 'ENDPOINT': ENDPOINT, + 'SCHEMA_BODY_VALIDATION': SCHEMA_BODY_VALIDATION, + 'CONTENT_TYPE': CONTENT_TYPE + }) + print(API_NAME, TYPE, ENVIRONMENT, METHOD, PATH_PREFIX, PATH, ENDPOINT, SCHEMA_BODY_VALIDATION, CONTENT_TYPE) + + json_data_list = verify_path(json_data_list) + payload = json.dumps(json_data_list) + json_data_list = { each['PATH'] : each for each in json_data_list}.values() + + # if (version == "2"): + # payload = json.loads(json.dumps(group_by(payload))) + # #json_data_list = { each['PATH'] : each for each in payload}.values() + payload = json.loads(json.dumps(group_by(payload))) + print(payload) + # migrate_to_apigw(payload, "https://oic-hoshikawa2-idcci5ks1puo-ia.integration.ocp.oraclecloud.com:443/ic/api/integration/v1/flows/rest/MIGRATE_TO_APIGW/1.0/convert", "OIC_SERVICE_USER_BASICAUTH", "e7ae6069-e471-496e-916d-5dc2ae3edac0") + + c = 0 + idxArquivo = idxArquivo + 1 + + except(Exception) as ex: + print(ex) + time.sleep(2) + +# Mudar DisplayName e text_file para poder executar +process_api_spec() + +# data = getSpec() +# fullSpec = json.loads(data) +# print(fullSpec["paths"]["/v1/credit-rights/{internal_number}"]["get"]["operationId"]) diff --git a/files/test/requirements.txt b/files/test/requirements.txt new file mode 100644 index 0000000..500c823 --- /dev/null +++ b/files/test/requirements.txt @@ -0,0 +1,9 @@ +fdk>=0.1.54 +requests +oci +cryptography +six +PyJWT +py3_lru_cache +simplejson +PyYAML