From 111fb4e9fea3a156864b4c77eb362dd2216c9bd5 Mon Sep 17 00:00:00 2001 From: Justus Jan Nico Wolff Date: Sun, 30 Oct 2022 14:49:29 +0100 Subject: [PATCH] =?UTF-8?q?Dateien=20hochladen=20nach=20=E2=80=9E=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client.py | 30 +++++++++++++++--------------- communicate.py | 42 ++++++++++++++++++++++++++++++++++-------- compiled.server | 1 + config.config | 2 +- 4 files changed, 51 insertions(+), 24 deletions(-) create mode 100644 compiled.server diff --git a/client.py b/client.py index c3dc672..8506622 100644 --- a/client.py +++ b/client.py @@ -1,14 +1,15 @@ import ast -import threading import communicate import tkinter as tk from tkinter import messagebox import threading import tkinter.ttk as ttk + file = open("config.config", 'r') file = file.read() config = ast.literal_eval(file) sessionid = "" +global conversations conversations = [] def updateconfig(): global config @@ -21,7 +22,7 @@ def registeeer(name, password): global sessionid name = name.get() password = password.get() - back = communicate.get(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "register", "name": name, "pass": password}) + back = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "register", "name": name, "pass": password}) if back[0] == " ": messagebox.showinfo("erfolgreich!", "sie haben sich erfolgreich registriert!") config["logindata"]["name"] = name @@ -55,7 +56,7 @@ def loginnn(name, password): global sessionid name = name.get() password = password.get() - back = communicate.get(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "getsessionid", "name": name, "pass": password}) + back = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "getsessionid", "name": name, "pass": password}) if back[0] == " ": messagebox.showinfo("erfolgreich!", "sie haben sich erfolgreich angemeldet!") config["logindata"]["name"] = name @@ -87,7 +88,7 @@ def login(): def send(message, conversation): global sessionid message = message.get() - communicate.patch(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "send", "sessionid": sessionid, "message": message, "conversation": conversation}) + communicate.patch(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "send", "sessionid": sessionid, "message": message, "conversation": conversation}) def turnback(target): temp = "" @@ -112,7 +113,7 @@ def showconversation(conversation2): entry.grid() sendbutton.grid() while True: - temp = communicate.get(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "update", "sessionid": sessionid})[conversation2]["conversation"].split("\n") + temp = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "update", "sessionid": sessionid})[conversation2]["conversation"].split("\n") for i in conversationtext.split("\n"): temp.remove(i) if len(temp) != 0: @@ -129,28 +130,25 @@ def updatescreen(): global conversations global conversationbuttons global config - try: + if True: for temp in range(len(conversations)): - temp2 = conversations[temp]["speakers"].split("&&") + temp2 = conversations[temp]["speakers"].split("") temp2.remove(config["logindata"]["name"]) temp2 = temp2[0] if not temp2 in conversationbuttons: - conversationbuttons[temp2] = tk.Button(container, text=temp2, command=lambda: showconversation(temp)) + conversationbuttons[temp2] = tk.Button(container, text=temp2, command=lambda temp=temp: showconversation(temp)) conversationbuttons[temp2].grid() - except Exception as e: - print(e) def update(): global sessionid global conversations while True: - conversations = communicate.get(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "update", "sessionid": sessionid}) - updatescreen() + conversations = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "update", "sessionid": sessionid}) def newww(name, container2): global sessionid name = name.get() - communicate.patch(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "newconv", "sessionid": sessionid, "target": name}) + communicate.patch(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "newconv", "sessionid": sessionid, "target": name}) container2.destroy() def newconversation(): @@ -173,7 +171,7 @@ if config["logindata"]["name"] == None: registerbutton.grid() container.mainloop() else: - sessionid = communicate.get(config["serveraddress"]+config["port"], {"targetserver": "PM", "targetfunction": "getsessionid", "name": config["logindata"]["name"], "pass": config["logindata"]["pass"]}) + sessionid = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "getsessionid", "name": config["logindata"]["name"], "pass": config["logindata"]["pass"]}) conversationbuttons = {} updatethread = threading.Thread(target=update) container = tk.Tk("PM") @@ -182,4 +180,6 @@ updatethread.start() newconversationbutton = tk.Button(container, text="neue konversation", command=newconversation) newconversationbutton.grid() -container.mainloop() \ No newline at end of file +while True: + container.update() + updatescreen() diff --git a/communicate.py b/communicate.py index 4c3b441..cd65948 100644 --- a/communicate.py +++ b/communicate.py @@ -1,8 +1,34 @@ -from server import server -def get(address, args): - return server.GET(args) - -def patch(address, args): - server.PATCH(args) - -print("communication module successfully initialized") \ No newline at end of file +import requests +import urllib.parse as safer +import ast + +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(address, args): + temp = requests.get("{}/{}".format(address, encode(args)), timeout=5).content.decode() + try: + temp = ast.literal_eval(temp) + except: + print("NOT an warning or error! just for debug") + print("non dictionary response from server: "+temp) + return temp + +def patch(address, args): + requests.patch("{}/{}".format(address, encode(args))) + diff --git a/compiled.server b/compiled.server new file mode 100644 index 0000000..1066f5f --- /dev/null +++ b/compiled.server @@ -0,0 +1 @@ +{'servername': 'python messages main server', 'serverdata': 'import os\nimport random\nimport string\nimport ast\nimport copy\nimport time\n\nif not os.path.exists("PM server/acc\'s"):\n os.mkdir("PM server")\n file = open("PM server/acc\'s", \'w\')\n file.write(str({}))\n file.close()\n file = open("PM server/conversations", \'w\')\n file.write(str({}))\n file.close()\nelse:\n file = open("PM server/acc\'s", \'r\')\n accounts = file.read()\n accounts = ast.literal_eval(accounts)\n file.close()\n file = open("PM server/conversations", \'r\')\n conversations = file.read()\n conversations = ast.literal_eval(conversations)\n file.close()\n\ncurrentsessionids = {}\nsessiontime = {}\n\ndef updatefiles():\n global accounts\n global conversations\n while True:\n try:\n file = open("PM server/acc\'s", \'r\')\n accounts = file.read()\n accounts = ast.literal_eval(accounts)\n file.close()\n file = open("PM server/conversations", \'r\')\n conversations = file.read()\n conversations = ast.literal_eval(conversations)\n file.close()\n break\n except:\n pass\n\ndef saveaccounts(target):\n file = open("PM server/acc\'s", \'w\')\n file.write(str(target))\n file.close()\n\ndef saveconversations(target):\n file = open("PM server/conversations", \'w\')\n file.write(str(target))\n file.close()\n\ndef GET(args, ressources=None):\n function = args["targetfunction"]\n if function == "getsessionid":\n name = args["name"]\n password = args["pass"]\n for i in currentsessionids.copy():\n if currentsessionids[i] == name:\n del currentsessionids[i]\n del sessiontime[i]\n if name in accounts:\n if accounts[name]["pass"] == password:\n temp = " "\n for i in range(1,20):\n temp = temp + random.choice(list(string.ascii_letters+string.digits))\n currentsessionids[temp] = name\n sessiontime[temp] = time.time()\n return temp\n else:\n return "wrong password"\n else:\n return "account not found"\n elif function == "register":\n name = args["name"]\n password = args["pass"]\n if not name in accounts:\n accounts[name] = {"pass": password}\n saveaccounts(accounts)\n temp = " "\n for i in range(1,20):\n temp = temp + random.choice(list(string.ascii_letters+string.digits))\n currentsessionids[temp] = name\n sessiontime[temp] = time.time()\n return temp\n else:\n return "name already used!"\n elif args["targetfunction"] == "update":\n updatefiles()\n sessionid = args["sessionid"]\n if sessionid in currentsessionids:\n lasttime = sessiontime[sessionid]\n temp = time.time() - lasttime\n if not temp > 60:\n sessiontime[sessionid] = time.time()\n name = currentsessionids[sessionid]\n temp = []\n for i in conversations:\n if name in i.split(""):\n temp.append({"speakers": i, "conversation": copy.deepcopy(conversations[i])})\n return temp\n else:\n currentsessionids.pop(sessionid)\n sessiontime.pop(sessionid)\n return "sessionid ran out"\n \ndef PATCH(args, ressources=None):\n if args["targetfunction"] == "send":\n updatefiles()\n sessionid = args["sessionid"]\n message = args["message"]\n name = currentsessionids[sessionid]\n conversation = args["conversation"]\n if conversation in conversations:\n if name in conversation:\n conversations[conversation] = conversations[conversation] + name + ":" + message + "\\n"\n saveconversations(conversations)\n elif args["targetfunction"] == "newconv":\n sessionid = args["sessionid"]\n name = currentsessionids[sessionid]\n target = args["target"]\n if target in accounts:\n conversations[name+""+target] = ""\n saveconversations(conversations)\n', 'ressources': {}} \ No newline at end of file diff --git a/config.config b/config.config index 5690843..0c75557 100644 --- a/config.config +++ b/config.config @@ -1 +1 @@ -{'serveraddress': 'localhost', 'port': '8080', 'logindata': {'name': 'Justus Wolff', 'pass': 'highsc0re'}} \ No newline at end of file +{'serveraddress': 'http://localhost', 'port': '8080', 'logindata': {'name': None, 'pass': 'highsc0re'}} \ No newline at end of file