PM/server/server.py

128 lines
4.2 KiB
Python

import os
import random
import string
import ast
import copy
import time
if not os.path.exists("PM server/acc's"):
os.mkdir("PM server")
file = open("PM server/acc's", 'w')
file.write(str({}))
file.close()
file = open("PM server/conversations", 'w')
file.write(str({}))
file.close()
else:
file = open("PM server/acc's", 'r')
accounts = file.read()
accounts = ast.literal_eval(accounts)
file.close()
file = open("PM server/conversations", 'r')
conversations = file.read()
conversations = ast.literal_eval(conversations)
file.close()
currentsessionids = {}
sessiontime = {}
def updatefiles():
global accounts
global conversations
while True:
try:
file = open("PM server/acc's", 'r')
accounts = file.read()
accounts = ast.literal_eval(accounts)
file.close()
file = open("PM server/conversations", 'r')
conversations = file.read()
conversations = ast.literal_eval(conversations)
file.close()
break
except:
pass
def saveaccounts(target):
file = open("PM server/acc's", 'w')
file.write(str(target))
file.close()
def saveconversations(target):
file = open("PM server/conversations", 'w')
file.write(str(target))
file.close()
def GET(args, ressources=None):
function = args["targetfunction"]
if function == "getsessionid":
name = args["name"]
password = args["pass"]
for i in currentsessionids.copy():
if currentsessionids[i] == name:
del currentsessionids[i]
del sessiontime[i]
if name in accounts:
if accounts[name]["pass"] == password:
temp = " "
for i in range(1,20):
temp = temp + random.choice(list(string.ascii_letters+string.digits))
currentsessionids[temp] = name
sessiontime[temp] = time.time()
return temp
else:
return "wrong password"
else:
return "account not found"
elif function == "register":
name = args["name"]
password = args["pass"]
if not name in accounts:
accounts[name] = {"pass": password}
saveaccounts(accounts)
temp = " "
for i in range(1,20):
temp = temp + random.choice(list(string.ascii_letters+string.digits))
currentsessionids[temp] = name
sessiontime[temp] = time.time()
return temp
else:
return "name already used!"
elif args["targetfunction"] == "update":
updatefiles()
sessionid = args["sessionid"]
if sessionid in currentsessionids:
lasttime = sessiontime[sessionid]
temp = time.time() - lasttime
if not temp > 60:
sessiontime[sessionid] = time.time()
name = currentsessionids[sessionid]
temp = []
for i in conversations:
if name in i.split("<splitedaccountname>"):
temp.append({"speakers": i, "conversation": copy.deepcopy(conversations[i])})
return temp
else:
currentsessionids.pop(sessionid)
sessiontime.pop(sessionid)
return "sessionid ran out"
def PATCH(args, ressources=None):
if args["targetfunction"] == "send":
updatefiles()
sessionid = args["sessionid"]
message = args["message"]
name = currentsessionids[sessionid]
conversation = args["conversation"]
if conversation in conversations:
if name in conversation:
conversations[conversation] = conversations[conversation] + name + ":" + message + "\n"
saveconversations(conversations)
elif args["targetfunction"] == "newconv":
sessionid = args["sessionid"]
name = currentsessionids[sessionid]
target = args["target"]
if target in accounts:
conversations[name+"<splitedaccountname>"+target] = ""
saveconversations(conversations)