diff --git a/communicate.py b/communicate.py new file mode 100644 index 0000000..81df0d9 --- /dev/null +++ b/communicate.py @@ -0,0 +1,27 @@ +import requests +import urllib.parse as safer +def encode(target): + temp = "?" + for i in target: + temp = temp + i + "=" + target[i] + "&" + + temp = temp[:-1] + return safer.quote(temp) + +def decode(target): + target = safer.unquote(target) + out = {} + target = target[1:] + args = target.split("&") + for i in args: + temp = i.split("=") + out[temp[0]] = temp[1] + return out + +def get(args): + return requests.get("http://localhost:8080/{}".format(encode(args))).content.decode() + +def patch(args): + print(encode(args)) + requests.patch("http://localhost:8080/{}".format(encode(args))) + diff --git a/main.py b/main.py new file mode 100644 index 0000000..b202120 --- /dev/null +++ b/main.py @@ -0,0 +1,134 @@ +import os +import tkinter as tk +import threading +import http.server +import random +import querytools +from tkinter import filedialog +from tkinter import messagebox +import ast +container = tk.Tk("server manager") +temp = os.listdir("servers") +servers = {} +avaible = {} +def toggle(target): + global avaible + if avaible[target] == True: + avaible[target] = False + else: + avaible[target] = True + +def menu(target): + global servers + global avaible + tempcon = tk.Tk(target) + textvar = tk.StringVar(tempcon) + if avaible[target] == True: + textvar.set("stop") + else: + textvar.set("start") + runbutton = tk.Button(tempcon, command=lambda: toggle(target), textvariable=textvar) + runbutton.grid() + backbutton = tk.Button(tempcon, command=tempcon.destroy, text="zurück") + backbutton.grid() + tempcon.mainloop() + +for i in temp: + if i != "__pycache__": + i = i[:-1] + i = i[:-1] + i = i[:-1] + temp3 = "servers.{}".format(i) + servers[i] = __import__(temp3, fromlist=[""]) + avaible[i] = False + +temp = os.listdir("ressources") +ressources = {} +for i in temp: + if i != "__pycache__" and i != "__init__.py": + ressources[i] = {} + for f in os.listdir("ressources/{}".format(i)): + if f != "__pycache__" and f != "__init__.py": + f = f[:-1] + f = f[:-1] + f = f[:-1] + ressources[i][f] = __import__("ressources.{}.{}".format(i, f), fromlist=[""]) + +title = tk.Label(container, text="servers:") +title.grid() + +for i in servers: + temp = tk.Button(container, text=i, command=lambda i=i: menu(i)) + temp.grid() + +def install(): + target = filedialog.askopenfilename() + target = open(target, 'r') + target = target.read() + target = ast.literal_eval(target) + serverfile = open("servers/"+target["servername"]+".py", 'w') + serverfile.write(target["serverdata"]) + serverfile.close() + temp = target["ressources"] + os.mkdir("ressources/{}".format(target["servername"])) + init = open("ressources/{}/__init__.py".format(target["servername"]), 'x') + init.close() + for i in temp: + temp2 = open("ressources/{}/{}".format(target["servername"], i), 'w') + temp2.write(temp[i]) + temp2.close() + messagebox.showinfo("info!", "server installiert! bitte starten sie server managment neu!") + +installbutton = tk.Button(container, text="installiere einen neuen server", command=install) +installbutton.grid() + +class JSRequestHandler(http.server.BaseHTTPRequestHandler): + + def getAppname(self): + if self.path == "" or self.path == "/": + p = "__root__" + else: + p = self.path.split("/")[1] + return p + + def do_GET(self): + global avaible + global ressources + + args = self.getAppname() + if args != "favicon.ico": + args = querytools.decode(args) + + if args["targetserver"] in avaible: + if avaible[args["targetserver"]] == True: + sb = str(servers[args["targetserver"]].GET(args, ressources[args["targetserver"]])).encode("utf-8") + else: + sb = str("server is down").encode("utf-8") + else: + sb = str("server not found").encode("utf-8") + + self.send_response(200) + self.send_header("content-length", len(sb)) + self.end_headers() + + self.wfile.write(sb) + + def do_PATCH(self): + global avaible + global ressources + + args = self.getAppname() + if args != "favicon.ico": + args = querytools.decode(args) + + bpatch = self.rfile.read(int(self.headers.get('content-length', 0))) + ps = bpatch.decode("utf-8") + if args["targetserver"] in avaible: + if avaible[args["targetserver"]] == True: + servers[args["targetserver"]].PATCH(args, ressources[args["targetserver"]]) + return self.do_GET() + +#https://www.justserv2.l--n.de +httpd = http.server.ThreadingHTTPServer(('localhost', 8080 ), JSRequestHandler) +threading.Thread(target=httpd.serve_forever).start() +container.mainloop() \ No newline at end of file diff --git a/querytools.py b/querytools.py new file mode 100644 index 0000000..7a96555 --- /dev/null +++ b/querytools.py @@ -0,0 +1,19 @@ +import urllib.parse as safer +def encode(target): + temp = "?" + for i in target: + temp = temp + i + "=" + target[i] + "&" + + temp = temp[:-1] + return safer.quote(temp) + +def decode(target): + target = safer.unquote(target) + print(target) + out = {} + target = target[1:] + args = target.split("&") + for i in args: + temp = i.split("=") + out[temp[0]] = temp[1] + return out \ No newline at end of file diff --git a/states b/states new file mode 100644 index 0000000..b74293d --- /dev/null +++ b/states @@ -0,0 +1 @@ +{'test': {"test2": 1}} \ No newline at end of file