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() def log_message(self, format, *args): return #https://www.justserv2.l--n.de httpd = http.server.ThreadingHTTPServer(('192.168.178.139', 8080 ), JSRequestHandler) threading.Thread(target=httpd.serve_forever).start() container.mainloop()