From 21fc10405f26db042022f86541b558cadeec27b8 Mon Sep 17 00:00:00 2001 From: mantaohuang Date: Fri, 3 Apr 2020 15:50:29 -0400 Subject: [PATCH] initial code of openvpn manager --- .gitignore | 9 +++ .vscode/settings.json | 3 + o_manager.py | 44 ++++++++++++++ openvpn.py | 138 ++++++++++++++++++++++++++++++++++++++++++ profile_scanner.py | 41 +++++++++++++ profiles.json | 1 + test.py | 82 +++++++++++++++++++++++++ 7 files changed, 318 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 o_manager.py create mode 100644 openvpn.py create mode 100644 profile_scanner.py create mode 100644 profiles.json create mode 100644 test.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..75c829f --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# virtual env +env/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +cache/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..daa2283 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "env/bin/python3" +} \ No newline at end of file diff --git a/o_manager.py b/o_manager.py new file mode 100644 index 0000000..5dc53e4 --- /dev/null +++ b/o_manager.py @@ -0,0 +1,44 @@ +import os +from openvpn import Openvpn +import asyncio + + +class OManager: + def __init__(self, base_folder, base_port=8001): + self.base_folder = base_folder + self.base_port = base_port + self.ops = [] + self.idx = 0 + + def new_op(self, cfg_fp, name=None, additional_cfg={}): + interface = f"tun{self.idx}" + folder_path = os.path.join(self.base_folder, f"session{self.idx}") + if not os.path.isdir(folder_path): + os.makedirs(folder_path) + if not name: + name = f"openvpn-{self.idx}" + op = Openvpn(cfg_fp, interface, folder_path, + f"{self.base_port + self.idx}", name=name, + additional_cfg=additional_cfg) + self.ops.append(op) + self.idx += 1 + return op + + def start_op(self, idx): + self.ops[idx].start() + + def get_all_ops(self): + return self.ops + + def stop_all(self): + loop = asyncio.get_event_loop() + for op in self.ops: + loop.create_task(op.stop()) + + +if __name__ == "__main__": + folder_fp = "/home/mantao/Desktop/t/" + cfg_fp = "/home/mantao/Desktop/t/TCP_Files/UK2-TCP.ovpn" + om = OManager(folder_fp) + om.new_op(cfg_fp, "op1", { + "auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}) diff --git a/openvpn.py b/openvpn.py new file mode 100644 index 0000000..534c431 --- /dev/null +++ b/openvpn.py @@ -0,0 +1,138 @@ +""" +openvpn supervisor +""" +import asyncio +import tempfile +import os +import time +import openvpn_api + + +def generate_config(in_fp, cfg): + def change_item(config, item_key, item_content): + output_lines = [] + changed = False + for i in config.splitlines(): + if i.startswith(item_key+" ") or i == item_key: + output_lines.append(f"{item_key} {item_content}") + changed = True + else: + output_lines.append(i) + if not changed: + output_lines.append(f"{item_key} {item_content}") + return "\n".join(output_lines) + # _, path = tempfile.mkstemp() + with open(in_fp, "r") as in_f: + config = in_f.read() + for key, value in cfg.items(): + config = change_item(config, key, value) + return config + + +IDLE = "idle" +RUNNING = "running" + + +class Openvpn: + def __init__(self, cfg_fp, interface, folder_path, management_port, name=None, additional_cfg={}, loop=None): + self.cfg_fp = cfg_fp + self.interface = interface + self.folder_path = folder_path + self.management_port = management_port + self.PID = 0 + self.status = IDLE + self.proc = None + self.exit_future = None + self.additional_cfg = additional_cfg + self.run_task = None + self.openvpn_api = None + self.name = name + if loop: + self.loop = loop + else: + self.loop = asyncio.get_event_loop() + + def get_cfg(self): + self.log_fp = os.path.join(self.folder_path, "log.txt") + cfg = { + "dev": self.interface, + "dev-type": "tun", # TODO: add code to read dev-type + "management": f"localhost {self.management_port}", + "log-append": self.log_fp + } + cfg.update(self.additional_cfg) + return cfg + + def generate_config_file(self): + cfg = self.get_cfg() + self.config_fp = os.path.join(self.folder_path, "cfg.txt") + config = generate_config(self.cfg_fp, cfg) + with open(self.config_fp, "w") as config_f: + config_f.write(config) + return self.config_fp + + def start(self): + if self.status == IDLE: + self.status = RUNNING + config_fp = self.generate_config_file() + cmd = " ".join(["openvpn", "--config", config_fp]) + self.run_task = self.loop.create_task(self.run(cmd)) + + def get_log(self): + # regenerate log_fp + _ = self.get_cfg() + try: + with open(self.log_fp, "r") as log_f: + return log_f.read() + except: + return "" + + def clear_log(self): + os.remove(self.log_fp) + + async def stop(self): + if self.status == RUNNING: + try: + await self.proc.kill() + except: + print("kill failed") + + self.status = IDLE + self.run_task.cancel() + + async def restart(self): + await self.stop() + self.start() + + async def run(self, cmd): + print(f"run: {cmd}") + self.exit_future = asyncio.Future() + while self.status == RUNNING: + print("create proc") + print(self.status) + proc = await asyncio.create_subprocess_shell( + cmd, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE) + self.proc = proc + self.PID = proc.pid + self.openvpn_api = openvpn_api.VPN( + 'localhost', int(self.management_port)) + print(f"pid: {proc.pid}") + stdout, stderr = await proc.communicate() + print(f'[{cmd!r} exited with {proc.returncode}]') + if stdout: + print(f'[stdout]\n{stdout.decode()}') + if stderr: + print(f'[stderr]\n{stderr.decode()}') + await asyncio.sleep(5) + self.exit_future.set_result(True) + self.status = IDLE + + +if __name__ == "__main__": + folder_fp = "/home/mantao/Desktop/t/" + cfg_fp = "/home/mantao/Desktop/t/TCP_Files/UK2-TCP.ovpn" + o1 = Openvpn(cfg_fp, "tun0", folder_fp, 8001, additional_cfg={ + "auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}) + o1.start() diff --git a/profile_scanner.py b/profile_scanner.py new file mode 100644 index 0000000..a680254 --- /dev/null +++ b/profile_scanner.py @@ -0,0 +1,41 @@ +import os +import json +import argparse + + +def get_all_files(path, extension=".ovpn"): + result = [os.path.join(dp, f) for dp, dn, filenames in os.walk( + path) for f in filenames if os.path.splitext(f)[-1] == extension] + return result + + +def gen_cfg(cfg_fp, auth_file): + filename = os.path.split(cfg_fp)[-1] + name = os.path.splitext(filename)[0] + return { + "cfg_fp": cfg_fp, + "name": name, + "additional_cfg": { + "auth-user-pass": auth_file + } + } + + +# Construct the argument parser +ap = argparse.ArgumentParser() +ap.add_argument("-c", "--config_folder", required=True, + help="path to the ovpn config files") +ap.add_argument("-a", "--auth_file", required=True, + help="path to the auth-user-pass file") +args = vars(ap.parse_args()) +config_folder = args["config_folder"] +auth_file = args["auth_file"] + + +all_fps = get_all_files(config_folder) +cfgs = [] +for cfg_fp in all_fps: + cfgs.append(gen_cfg(cfg_fp, auth_file)) +cfgs.sort(key=lambda x: x["name"]) +profile_fp = "profiles.json" +open(profile_fp, "w").write(json.dumps(cfgs)) diff --git a/profiles.json b/profiles.json new file mode 100644 index 0000000..cf6cda8 --- /dev/null +++ b/profiles.json @@ -0,0 +1 @@ +[{"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Australia1-TCP.ovpn", "name": "Australia1-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Australia1-UDP.ovpn", "name": "Australia1-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Australia2-TCP.ovpn", "name": "Australia2-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Australia2-UDP.ovpn", "name": "Australia2-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Austria-TCP.ovpn", "name": "Austria-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Austria-UDP.ovpn", "name": "Austria-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Belgium1-TCP.ovpn", "name": "Belgium1-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Belgium1-UDP.ovpn", "name": "Belgium1-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Belgium2-TCP.ovpn", "name": "Belgium2-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Belgium2-UDP.ovpn", "name": "Belgium2-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Belgium3-TCP.ovpn", "name": "Belgium3-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Belgium3-UDP.ovpn", "name": "Belgium3-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Brazil-TCP.ovpn", "name": "Brazil-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Brazil-UDP.ovpn", "name": "Brazil-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Bulgaria-TCP.ovpn", "name": "Bulgaria-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Bulgaria-UDP.ovpn", "name": "Bulgaria-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Canada-TCP.ovpn", "name": "Canada-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Canada-UDP.ovpn", "name": "Canada-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Czechia-TCP.ovpn", "name": "Czechia-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Czechia-UDP.ovpn", "name": "Czechia-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Egypt-TCP.ovpn", "name": "Egypt-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Egypt-UDP.ovpn", "name": "Egypt-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Finland-TCP.ovpn", "name": "Finland-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Finland-UDP.ovpn", "name": "Finland-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/France-TCP.ovpn", "name": "France-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/France-UDP.ovpn", "name": "France-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Germany-TCP.ovpn", "name": "Germany-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Germany-UDP.ovpn", "name": "Germany-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Hong.Kong-TCP.ovpn", "name": "Hong.Kong-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Hong.Kong-UDP.ovpn", "name": "Hong.Kong-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/India-Jaipur-TCP.ovpn", "name": "India-Jaipur-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/India-Jaipur-UDP.ovpn", "name": "India-Jaipur-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/India2-TCP.ovpn", "name": "India2-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/India2-UDP.ovpn", "name": "India2-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Italy-TCP.ovpn", "name": "Italy-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Italy-UDP.ovpn", "name": "Italy-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Japan-TCP.ovpn", "name": "Japan-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Japan-UDP.ovpn", "name": "Japan-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Luxembourg-TCP.ovpn", "name": "Luxembourg-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Luxembourg-UDP.ovpn", "name": "Luxembourg-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Netherlands1-TCP.ovpn", "name": "Netherlands1-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Netherlands1-UDP.ovpn", "name": "Netherlands1-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Netherlands2-TCP.ovpn", "name": "Netherlands2-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Netherlands2-UDP.ovpn", "name": "Netherlands2-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Netherlands3-TCP.ovpn", "name": "Netherlands3-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Netherlands3-UDP.ovpn", "name": "Netherlands3-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Netherlands4-TCP.ovpn", "name": "Netherlands4-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Netherlands4-UDP.ovpn", "name": "Netherlands4-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Norway-TCP.ovpn", "name": "Norway-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Norway-UDP.ovpn", "name": "Norway-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Poland-TCP.ovpn", "name": "Poland-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Poland-UDP.ovpn", "name": "Poland-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Romania-TCP.ovpn", "name": "Romania-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Romania-UDP.ovpn", "name": "Romania-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Russia-TCP.ovpn", "name": "Russia-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Russia-UDP.ovpn", "name": "Russia-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Serbia-TCP.ovpn", "name": "Serbia-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Serbia-UDP.ovpn", "name": "Serbia-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Singapore-TCP.ovpn", "name": "Singapore-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Singapore-UDP.ovpn", "name": "Singapore-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/South.Korea-TCP.ovpn", "name": "South.Korea-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/South.Korea-UDP.ovpn", "name": "South.Korea-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Spain-TCP.ovpn", "name": "Spain-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Spain-UDP.ovpn", "name": "Spain-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Sweden-TCP.ovpn", "name": "Sweden-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Sweden-UDP.ovpn", "name": "Sweden-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Switzerland-TCP.ovpn", "name": "Switzerland-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Switzerland-UDP.ovpn", "name": "Switzerland-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/Turkey-TCP.ovpn", "name": "Turkey-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/Turkey-UDP.ovpn", "name": "Turkey-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/UAE-Dubai-TCP.ovpn", "name": "UAE-Dubai-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/UAE-Dubai-UDP.ovpn", "name": "UAE-Dubai-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/UK1-TCP.ovpn", "name": "UK1-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/UK1-UDP.ovpn", "name": "UK1-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/UK2-TCP.ovpn", "name": "UK2-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/UK2-UDP.ovpn", "name": "UK2-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Atlanta-TCP.ovpn", "name": "US-Atlanta-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Atlanta-UDP.ovpn", "name": "US-Atlanta-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Charlotte-TCP.ovpn", "name": "US-Charlotte-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Charlotte-UDP.ovpn", "name": "US-Charlotte-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Chicago1-TCP.ovpn", "name": "US-Chicago1-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Chicago1-UDP.ovpn", "name": "US-Chicago1-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Chicago2-TCP.ovpn", "name": "US-Chicago2-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Chicago2-UDP.ovpn", "name": "US-Chicago2-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Chicago3-TCP.ovpn", "name": "US-Chicago3-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Chicago3-UDP.ovpn", "name": "US-Chicago3-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Dallas-TCP.ovpn", "name": "US-Dallas-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Dallas-UDP.ovpn", "name": "US-Dallas-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Denver-TCP.ovpn", "name": "US-Denver-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Denver-UDP.ovpn", "name": "US-Denver-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Los.Angeles-TCP.ovpn", "name": "US-Los.Angeles-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Los.Angeles-UDP.ovpn", "name": "US-Los.Angeles-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-Miami-TCP.ovpn", "name": "US-Miami-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Miami-UDP.ovpn", "name": "US-Miami-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-Netflix-UDP.ovpn", "name": "US-Netflix-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/TCP_Files/US-New.York-TCP.ovpn", "name": "US-New.York-TCP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}, {"cfg_fp": "/home/mantao/Desktop/t/UDP_Files/US-New.York-UDP.ovpn", "name": "US-New.York-UDP", "additional_cfg": {"auth-user-pass": "/home/mantao/Desktop/t/fast.txt"}}] \ No newline at end of file diff --git a/test.py b/test.py new file mode 100644 index 0000000..c3cefbc --- /dev/null +++ b/test.py @@ -0,0 +1,82 @@ +import tornado.ioloop +import tornado.web +import json +import argparse +from o_manager import OManager + + +ap = argparse.ArgumentParser() +ap.add_argument("-s", "--session_folder", required=True, + help="path to the session folder") +args = vars(ap.parse_args()) +session_folder = args["session_folder"] +om = OManager(session_folder) + + +class MainHandler(tornado.web.RequestHandler): + def get(self): + buf = f"ops len: {len(om.ops)}
\n" + if len(om.ops): + for idx, op in enumerate(om.ops): + buf += f"op #{idx}, name: {op.name}
\n" + buf += f"status: {op.status}
\n" + buf += f"pid: {op.PID}
\n" + buf += "log:
\n" + buf += "
\n"
+                buf += op.get_log()
+                buf += "\n
\n" + self.write(buf) + + +class ConfigsHandeler(tornado.web.RequestHandler): + def get(self): + cfgs = json.loads(open("profiles.json", "r").read()) + buf = "Select one configuration to create.
\n" + for idx, cfg in enumerate(cfgs): + buf += f"{cfg['name']}
\n" + self.write(buf) + + +class CreateInstantceHandler(tornado.web.RequestHandler): + def get(self): + idx = self.get_query_argument("i", None) + if idx != None: + idx = int(idx) + cfgs = json.loads(open("profiles.json", "r").read()) + cfg = cfgs[idx] + om.new_op(cfg["cfg_fp"], cfg["name"], + additional_cfg=cfg["additional_cfg"]) + self.write("create sucess!") + else: + self.write("need idx") + + +class StartInstatnceHandler(tornado.web.RequestHandler): + def get(self): + idx = self.get_query_argument("i", None) + if idx != None: + om.start_op(int(idx)) + self.write("start sucess!") + else: + self.write("need idx") + + +class StopAll(tornado.web.RequestHandler): + def get(self): + om.stop_all() + + +def make_app(): + return tornado.web.Application([ + (r"/", MainHandler), + (r"/select", ConfigsHandeler), + (r"/create", CreateInstantceHandler), + (r"/start", StartInstatnceHandler), + (r"/stop", StopAll) + ]) + + +if __name__ == "__main__": + app = make_app() + app.listen(8000) + tornado.ioloop.IOLoop.current().start()