Dateien nach "pm" hochladen
parent
b4bee3758f
commit
0d8a5c71f1
|
@ -0,0 +1,2 @@
|
|||
# PM
|
||||
|
|
@ -0,0 +1,193 @@
|
|||
import ast
|
||||
import communicate
|
||||
import tkinter as tk
|
||||
from tkinter import messagebox
|
||||
import threading
|
||||
import tkinter.ttk as ttk
|
||||
import os
|
||||
import time
|
||||
|
||||
file = open("config.config", 'r')
|
||||
file = file.read()
|
||||
config = ast.literal_eval(file)
|
||||
sessionid = ""
|
||||
global conversations
|
||||
conversations = []
|
||||
def updateconfig():
|
||||
global config
|
||||
file = open("config.config", 'w')
|
||||
file.write(str(config))
|
||||
file.close()
|
||||
|
||||
def registeeer(name, password):
|
||||
global container
|
||||
global sessionid
|
||||
name = name.get()
|
||||
password = password.get()
|
||||
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
|
||||
config["logindata"]["pass"] = password
|
||||
updateconfig()
|
||||
sessionid = back
|
||||
container.destroy()
|
||||
else:
|
||||
messagebox.showerror("fehler!", "kann nicht registrieren: name wird schon benutzt")
|
||||
|
||||
def register():
|
||||
global container
|
||||
container.destroy()
|
||||
container = tk.Tk("registrieren")
|
||||
namevar = tk.StringVar(container)
|
||||
passvar = tk.StringVar(container)
|
||||
nameentry = tk.Entry(container, textvariable=namevar)
|
||||
passentry = tk.Entry(container, textvariable=passvar)
|
||||
registerbutton = tk.Button(container, text="registrieren", command=lambda: registeeer(namevar, passvar))
|
||||
namelabel = tk.Label(container, text="Name")
|
||||
passlabel = tk.Label(container, text="Passwort")
|
||||
namelabel.grid()
|
||||
nameentry.grid()
|
||||
passlabel.grid()
|
||||
passentry.grid()
|
||||
registerbutton.grid()
|
||||
container.mainloop()
|
||||
|
||||
def loginnn(name, password):
|
||||
global container
|
||||
global sessionid
|
||||
name = name.get()
|
||||
password = password.get()
|
||||
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
|
||||
config["logindata"]["pass"] = password
|
||||
updateconfig()
|
||||
sessionid = back
|
||||
container.destroy()
|
||||
else:
|
||||
messagebox.showerror("fehler!", "kann nicht anmelden: falscher name oder passwort")
|
||||
|
||||
def login():
|
||||
global container
|
||||
container.destroy()
|
||||
container = tk.Tk("anmelden")
|
||||
namevar = tk.StringVar(container)
|
||||
passvar = tk.StringVar(container)
|
||||
nameentry = tk.Entry(container, textvariable=namevar)
|
||||
passentry = tk.Entry(container, textvariable=passvar)
|
||||
registerbutton = tk.Button(container, text="anmelden", command=lambda: loginnn(namevar, passvar))
|
||||
namelabel = tk.Label(container, text="Name")
|
||||
passlabel = tk.Label(container, text="Passwort")
|
||||
namelabel.grid()
|
||||
nameentry.grid()
|
||||
passlabel.grid()
|
||||
passentry.grid()
|
||||
registerbutton.grid()
|
||||
container.mainloop()
|
||||
|
||||
def send(message, conversation):
|
||||
global sessionid
|
||||
message = message.get()
|
||||
communicate.patch(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "send", "sessionid": sessionid, "message": message, "conversation": conversation})
|
||||
|
||||
def turnback(target):
|
||||
temp = ""
|
||||
for i in target:
|
||||
temp = temp + i + "\n"
|
||||
return temp
|
||||
|
||||
def showconversation(conversation2):
|
||||
global conversations
|
||||
container2 = tk.Tk("conversation")
|
||||
conversationtext = conversations[conversation2]["conversation"]
|
||||
conversation = tk.Text(container2)
|
||||
conversation.insert(tk.END, conversationtext)
|
||||
conversation.config(state=tk.DISABLED)
|
||||
conversation.grid(padx=2, pady=2)
|
||||
scrollbar = ttk.Scrollbar(container2, command=conversation.yview)
|
||||
scrollbar.grid(column=3)
|
||||
conversation['yscrollcommand'] = scrollbar.set
|
||||
sendvar = tk.StringVar(container2)
|
||||
entry = tk.Entry(container2, textvariable=sendvar)
|
||||
sendbutton = tk.Button(container2, command=lambda: send(sendvar, conversations[conversation2]["speakers"]), text="senden")
|
||||
entry.grid()
|
||||
sendbutton.grid()
|
||||
while True:
|
||||
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"):
|
||||
try:
|
||||
temp.remove(i)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
print(conversationtext)
|
||||
print(temp)
|
||||
if len(temp) != 0:
|
||||
conversation.grid_forget()
|
||||
conversation.config(state=tk.NORMAL)
|
||||
conversation.insert(tk.END, turnback(temp))
|
||||
conversation.config(state=tk.DISABLED)
|
||||
conversation.grid(row=0)
|
||||
conversationtext = conversationtext + turnback(temp)
|
||||
container2.update()
|
||||
time.sleep(0.1)
|
||||
|
||||
def updatescreen():
|
||||
global container
|
||||
global conversations
|
||||
global conversationbuttons
|
||||
global config
|
||||
if True:
|
||||
for temp in range(len(conversations)):
|
||||
temp2 = conversations[temp]["speakers"].split("<splitedaccountname>")
|
||||
temp2.remove(config["logindata"]["name"])
|
||||
temp2 = temp2[0]
|
||||
if not temp2 in conversationbuttons:
|
||||
conversationbuttons[temp2] = tk.Button(container, text=temp2, command=lambda temp=temp: showconversation(temp))
|
||||
conversationbuttons[temp2].grid()
|
||||
|
||||
def update():
|
||||
global sessionid
|
||||
global conversations
|
||||
while True:
|
||||
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": "python messages main server", "targetfunction": "newconv", "sessionid": sessionid, "target": name})
|
||||
container2.destroy()
|
||||
|
||||
def newconversation():
|
||||
container2 = tk.Tk("new conversation")
|
||||
namelabel = tk.Label(container2, text="name des benutzers: ")
|
||||
namelabel.grid()
|
||||
stringvar = tk.StringVar(container2)
|
||||
entry = tk.Entry(container2, textvariable=stringvar)
|
||||
entry.grid()
|
||||
gobutton = tk.Button(container2, text="konversation erstellen", command=lambda: newww(stringvar, container2))
|
||||
gobutton.grid()
|
||||
container2.mainloop()
|
||||
|
||||
if config["logindata"]["name"] == None:
|
||||
container = tk.Tk("PM")
|
||||
messagebox.showinfo("nicht angemeldet!", "sie sind nicht angemeldet bitte melden sie sich an!")
|
||||
registerbutton = tk.Button(container, text="registrieren", command=register)
|
||||
loginbutton = tk.Button(container, text="anmelden", command=login)
|
||||
loginbutton.grid()
|
||||
registerbutton.grid()
|
||||
container.mainloop()
|
||||
else:
|
||||
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")
|
||||
updatethread.start()
|
||||
|
||||
newconversationbutton = tk.Button(container, text="neue konversation", command=newconversation)
|
||||
newconversationbutton.grid()
|
||||
|
||||
while True:
|
||||
container.update()
|
||||
updatescreen()
|
|
@ -0,0 +1,34 @@
|
|||
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)))
|
||||
|
|
@ -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("<splitedaccountname>"):\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+"<splitedaccountname>"+target] = ""\n saveconversations(conversations)\n', 'ressources': {}}
|
|
@ -0,0 +1 @@
|
|||
{'serveraddress': 'http://localhost', 'port': '8080', 'logindata': {'name': None, 'pass': 'test'}}
|
Loading…
Reference in New Issue