diff --git a/src/config/parameters.yaml b/src/config/parameters.yaml index 3ab78cf..fa60c78 100644 --- a/src/config/parameters.yaml +++ b/src/config/parameters.yaml @@ -26,7 +26,8 @@ paths: default: "{{Query}}" example: "{{Query}}" - # ======== Security ======== + # {% if header == parameters %} + - name: authorization in: header required: true @@ -55,6 +56,9 @@ paths: type: string default: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" description: "UserAgent, some APIs may be rejected if changed." + + # {% endif %} + responses: "200": description: "" diff --git a/src/config/variable.json b/src/config/variable.json new file mode 100644 index 0000000..63f623d --- /dev/null +++ b/src/config/variable.json @@ -0,0 +1,8 @@ +{ + "dart": { + "header": "parameters" + }, + "typescript": { + "header": "securitySchemes" + } +} \ No newline at end of file diff --git a/src/openapi/openapi-3.0.yaml b/src/openapi/openapi-3.0.yaml index 6e18dca..e2a1da5 100644 --- a/src/openapi/openapi-3.0.yaml +++ b/src/openapi/openapi-3.0.yaml @@ -18,12 +18,6 @@ components: schemas: {} securitySchemes: - # Moved to Parameters because it is not working as Security - # BearerAuth: - # type: http - # scheme: bearer - # description: "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA" - CsrfToken: type: apiKey in: header @@ -48,6 +42,30 @@ components: name: x-twitter-auth-type description: "OAuth2Session if you are logged in" + # {% if header == securitySchemes %} + + UserAgent: + description: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36" + in: header + name: user-agent + type: apiKey + ActiveUser: + description: "yes" + in: header + name: x-twitter-active-user + type: apiKey + BearerAuth: + description: AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA + scheme: bearer + type: http + ClientLanguage: + description: en + in: header + name: x-twitter-client-language + type: apiKey + + # {% endif %} + security: - bearerAuth: [] - CsrfToken: [] diff --git a/tools/build.py b/tools/build.py index 1eaf812..339b1a4 100644 --- a/tools/build.py +++ b/tools/build.py @@ -3,6 +3,8 @@ import glob import json import yaml import shutil +import copy +import re class placeholder_manager: @@ -36,57 +38,79 @@ class placeholder_manager: return file -OUTPUT_DIR = "dist" +OUTPUT_DIR = "dist/{0}" INPUT_DIR = "src/openapi" +try: + shutil.rmtree("dist") +except: + pass -def read(file: str): - with open(file, mode="r", encoding="utf-8") as f: - return f.read() +with open("src/config/variable.json", mode="r", encoding="utf-8") as f: + variable = json.load(f) -def write(file: str, data: str) -> None: - with open(file.replace(INPUT_DIR, OUTPUT_DIR, 1), mode="w+", encoding="utf-8") as f: - f.write(data) +for lang in variable.keys(): + def read(file: str): + with open(file, mode="r", encoding="utf-8") as f: + return remove(f.read()) -def get_yaml(data, key): - return yaml.safe_load(placeholder.replace_file(str(data), key)) + def write(file: str, data: str) -> None: + with open( + file.replace(INPUT_DIR, OUTPUT_DIR.format(lang), 1), + mode="w+", + encoding="utf-8", + ) as f: + f.write(data) + def get_yaml(data, key): + return yaml.safe_load(placeholder.replace_file(str(data), key)) -shutil.rmtree("dist") -for dir in glob.glob(os.path.join(INPUT_DIR, "**/")): - os.makedirs(dir.replace(INPUT_DIR, OUTPUT_DIR, 1), exist_ok=True) + def remove(data): + for match in re.findall(r"(\{% (.*?) %\})", data): + equation = match[1].split(" ") + if equation[0] == "if" and equation[2] == "==": + if equation[3] != variable[lang][equation[1]]: + data = re.sub( + re.escape(match[0]) + "[\s\S]*?" + re.escape("{% endif %}"), + "", + data, + ) -placeholder = placeholder_manager() -parameters = read("src/config/parameters.yaml") -header = read("src/config/header.yaml") + return data -paths = {} -for file in glob.glob(os.path.join(INPUT_DIR, "**/*.yaml")): - file = file.replace(os.path.sep, "/") - relative = file.replace(INPUT_DIR, "", 1) + for dir in glob.glob(os.path.join(INPUT_DIR, "**/")): + os.makedirs(dir.replace(INPUT_DIR, OUTPUT_DIR.format(lang), 1), exist_ok=True) - load = yaml.safe_load(placeholder.replace(read(file))) + placeholder = placeholder_manager() + parameters = read("src/config/parameters.yaml") + header = read("src/config/header.yaml") - for key in load["paths"].keys(): - append = get_yaml(parameters, key.split("/")[-1]) - req = load["paths"][key]["get"] - req["parameters"] = append["paths"]["/parameters"]["get"]["parameters"] + paths = {} + for file in glob.glob(os.path.join(INPUT_DIR, "**/*.yaml")): + file = file.replace(os.path.sep, "/") + relative = file.replace(INPUT_DIR, "", 1) - append = get_yaml(header, key.split("/")[-1]) - req = load["paths"][key]["get"] - req["responses"]["200"]["headers"] = append["components"]["headers"] + load = yaml.safe_load(placeholder.replace(read(file))) + + for key in load["paths"].keys(): + append = get_yaml(parameters, key.split("/")[-1]) + req = load["paths"][key]["get"] + req["parameters"] = append["paths"]["/parameters"]["get"]["parameters"] + + append = get_yaml(header, key.split("/")[-1]) + req = load["paths"][key]["get"] + req["responses"]["200"]["headers"] = append["components"]["headers"] + + escape = key.replace("/", "~1") + paths.update({key: {"$ref": f".{relative}#/paths/{escape}"}}) + write(file, yaml.dump(load)) + + file = "src/openapi/openapi-3.0.yaml" + data = read(file) + for path in paths: + load = yaml.safe_load(placeholder.replace(data)) + load["paths"] = paths - escape = key.replace("/", "~1") - paths.update({key: {"$ref": f".{relative}#/paths/{escape}"}}) write(file, yaml.dump(load)) - - -file = "src/openapi/openapi-3.0.yaml" -data = read(file) -for path in paths: - load = yaml.safe_load(placeholder.replace(data)) - load["paths"] = paths - -write(file, yaml.dump(load))