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.