main.py aktualisiert

master
Justus Jan Nico Wolff 2023-07-21 14:17:08 +02:00
parent eadc77dbe8
commit d762da1943
1 changed files with 136 additions and 136 deletions

272
main.py
View File

@ -1,137 +1,137 @@
import os import os
import tkinter as tk import tkinter as tk
import threading import threading
import http.server import http.server
import random import random
import querytools import querytools
from tkinter import filedialog from tkinter import filedialog
from tkinter import messagebox from tkinter import messagebox
import ast import ast
container = tk.Tk("server manager") container = tk.Tk("server manager")
temp = os.listdir("servers") temp = os.listdir("servers")
servers = {} servers = {}
avaible = {} avaible = {}
def toggle(target): def toggle(target):
global avaible global avaible
if avaible[target] == True: if avaible[target] == True:
avaible[target] = False avaible[target] = False
else: else:
avaible[target] = True avaible[target] = True
def menu(target): def menu(target):
global servers global servers
global avaible global avaible
tempcon = tk.Tk(target) tempcon = tk.Tk(target)
textvar = tk.StringVar(tempcon) textvar = tk.StringVar(tempcon)
if avaible[target] == True: if avaible[target] == True:
textvar.set("stop") textvar.set("stop")
else: else:
textvar.set("start") textvar.set("start")
runbutton = tk.Button(tempcon, command=lambda: toggle(target), textvariable=textvar) runbutton = tk.Button(tempcon, command=lambda: toggle(target), textvariable=textvar)
runbutton.grid() runbutton.grid()
backbutton = tk.Button(tempcon, command=tempcon.destroy, text="zurück") backbutton = tk.Button(tempcon, command=tempcon.destroy, text="zurück")
backbutton.grid() backbutton.grid()
tempcon.mainloop() tempcon.mainloop()
for i in temp: for i in temp:
if i != "__pycache__": if i != "__pycache__":
i = i[:-1] i = i[:-1]
i = i[:-1] i = i[:-1]
i = i[:-1] i = i[:-1]
temp3 = "servers.{}".format(i) temp3 = "servers.{}".format(i)
servers[i] = __import__(temp3, fromlist=[""]) servers[i] = __import__(temp3, fromlist=[""])
avaible[i] = False avaible[i] = False
temp = os.listdir("ressources") temp = os.listdir("ressources")
ressources = {} ressources = {}
for i in temp: for i in temp:
if i != "__pycache__" and i != "__init__.py": if i != "__pycache__" and i != "__init__.py":
ressources[i] = {} ressources[i] = {}
for f in os.listdir("ressources/{}".format(i)): for f in os.listdir("ressources/{}".format(i)):
if f != "__pycache__" and f != "__init__.py": if f != "__pycache__" and f != "__init__.py":
f = f[:-1] f = f[:-1]
f = f[:-1] f = f[:-1]
f = f[:-1] f = f[:-1]
ressources[i][f] = __import__("ressources.{}.{}".format(i, f), fromlist=[""]) ressources[i][f] = __import__("ressources.{}.{}".format(i, f), fromlist=[""])
title = tk.Label(container, text="servers:") title = tk.Label(container, text="servers:")
title.grid() title.grid()
for i in servers: for i in servers:
temp = tk.Button(container, text=i, command=lambda i=i: menu(i)) temp = tk.Button(container, text=i, command=lambda i=i: menu(i))
temp.grid() temp.grid()
def install(): def install():
target = filedialog.askopenfilename() target = filedialog.askopenfilename()
target = open(target, 'r') target = open(target, 'r')
target = target.read() target = target.read()
target = ast.literal_eval(target) target = ast.literal_eval(target)
serverfile = open("servers/"+target["servername"]+".py", 'w') serverfile = open("servers/"+target["servername"]+".py", 'w')
serverfile.write(target["serverdata"]) serverfile.write(target["serverdata"])
serverfile.close() serverfile.close()
temp = target["ressources"] temp = target["ressources"]
os.mkdir("ressources/{}".format(target["servername"])) os.mkdir("ressources/{}".format(target["servername"]))
init = open("ressources/{}/__init__.py".format(target["servername"]), 'x') init = open("ressources/{}/__init__.py".format(target["servername"]), 'x')
init.close() init.close()
for i in temp: for i in temp:
temp2 = open("ressources/{}/{}".format(target["servername"], i), 'w') temp2 = open("ressources/{}/{}".format(target["servername"], i), 'w')
temp2.write(temp[i]) temp2.write(temp[i])
temp2.close() temp2.close()
messagebox.showinfo("info!", "server installiert! bitte starten sie server managment neu!") messagebox.showinfo("info!", "server installiert! bitte starten sie server managment neu!")
installbutton = tk.Button(container, text="installiere einen neuen server", command=install) installbutton = tk.Button(container, text="installiere einen neuen server", command=install)
installbutton.grid() installbutton.grid()
class JSRequestHandler(http.server.BaseHTTPRequestHandler): class JSRequestHandler(http.server.BaseHTTPRequestHandler):
def getAppname(self): def getAppname(self):
if self.path == "" or self.path == "/": if self.path == "" or self.path == "/":
p = "__root__" p = "__root__"
else: else:
p = self.path.split("/")[1] p = self.path.split("/")[1]
return p return p
def do_GET(self): def do_GET(self):
global avaible global avaible
global ressources global ressources
args = self.getAppname() args = self.getAppname()
if args != "favicon.ico": if args != "favicon.ico":
args = querytools.decode(args) args = querytools.decode(args)
if args["targetserver"] in avaible: if args["targetserver"] in avaible:
if avaible[args["targetserver"]] == True: if avaible[args["targetserver"]] == True:
sb = str(servers[args["targetserver"]].GET(args, ressources[args["targetserver"]])).encode("utf-8") sb = str(servers[args["targetserver"]].GET(args, ressources[args["targetserver"]])).encode("utf-8")
else: else:
sb = str("server is down").encode("utf-8") sb = str("server is down").encode("utf-8")
else: else:
sb = str("server not found").encode("utf-8") sb = str("server not found").encode("utf-8")
self.send_response(200) self.send_response(200)
self.send_header("content-length", len(sb)) self.send_header("content-length", len(sb))
self.end_headers() self.end_headers()
self.wfile.write(sb) self.wfile.write(sb)
def do_PATCH(self): def do_PATCH(self):
global avaible global avaible
global ressources global ressources
args = self.getAppname() args = self.getAppname()
if args != "favicon.ico": if args != "favicon.ico":
args = querytools.decode(args) args = querytools.decode(args)
bpatch = self.rfile.read(int(self.headers.get('content-length', 0))) bpatch = self.rfile.read(int(self.headers.get('content-length', 0)))
ps = bpatch.decode("utf-8") ps = bpatch.decode("utf-8")
if args["targetserver"] in avaible: if args["targetserver"] in avaible:
if avaible[args["targetserver"]] == True: if avaible[args["targetserver"]] == True:
servers[args["targetserver"]].PATCH(args, ressources[args["targetserver"]]) servers[args["targetserver"]].PATCH(args, ressources[args["targetserver"]])
return self.do_GET() return self.do_GET()
def log_message(self, format, *args): def log_message(self, format, *args):
return return
#https://www.justserv2.l--n.de #https://www.justserv2.l--n.de
httpd = http.server.ThreadingHTTPServer(('localhost', 8080 ), JSRequestHandler) httpd = http.server.ThreadingHTTPServer(('192.168.178.139', 8080 ), JSRequestHandler)
threading.Thread(target=httpd.serve_forever).start() threading.Thread(target=httpd.serve_forever).start()
container.mainloop() container.mainloop()