137 lines
4.2 KiB
Python
137 lines
4.2 KiB
Python
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() |