added interface settings with color depth and text encoding
This commit is contained in:
@@ -12,6 +12,9 @@ userdb = Database("users")
|
||||
userdb.createTable("NAMES",{"id":"int","name":"string","creation_date":"int","last_login":"int","last_namechange":"int"})
|
||||
userdb.createTable("PASSWORDS",{"id":"int","sum":"string"})
|
||||
|
||||
isetdb = Database("isettings")
|
||||
isetdb.createTable("BASIC",{"id":"int","color":"int","encoding":"str"})
|
||||
|
||||
def makeUserID() -> int:
|
||||
count = userdb.rowAmount("NAMES")
|
||||
digits = max(4,1+int(math.log10(10+count)))
|
||||
@@ -35,6 +38,13 @@ def isValidChecksum(cs) -> bool:
|
||||
if match==None: return False
|
||||
return match.start()==0 and match.end()==len(cs)
|
||||
|
||||
def isValidSimpleName(name) -> bool:
|
||||
if len(name)==0: return False
|
||||
pattern = re.compile("^[a-z][a-z0-9-_]*")
|
||||
match = pattern.match(name.lower())
|
||||
if match==None: return False
|
||||
return match.start()==0 and match.end()==len(name)
|
||||
|
||||
|
||||
def response(msg,**kwargs) -> str:
|
||||
return json.dumps({"type":"response","response":msg,**kwargs})
|
||||
@@ -154,6 +164,37 @@ async def handleCommand(ws,cmd):
|
||||
userdb.updateFromPK("PASSWORDS","id",uid,{"sum":newpass})
|
||||
return await ws.send(response("success"))
|
||||
|
||||
# interface settings
|
||||
case "getisettings":
|
||||
if uid == None:
|
||||
return await ws.send(clientError("You are not logged in."))
|
||||
intname = cmd["interface"]
|
||||
intname = intname.upper()
|
||||
if (not isValidSimpleName(intname)) or (not isetdb.tableExists(intname)):
|
||||
return await ws.send(clientError(f"The interface '{intname}' is not an existing interface."))
|
||||
row = isetdb.rowFromPK(intname,"id",uid)
|
||||
if row == None:
|
||||
return await ws.send(clientError("This user has no settings for this interface set up."))
|
||||
del row["id"]
|
||||
return await ws.send(response(row))
|
||||
|
||||
case "setisettings":
|
||||
if uid == None:
|
||||
return await ws.send(clientError("You are not logged in."))
|
||||
intname = cmd["interface"]
|
||||
intname = intname.upper()
|
||||
if (not isValidSimpleName(intname)) or (not isetdb.tableExists(intname)):
|
||||
return await ws.send(clientError(f"The interface '{intname}' is not an existing interface."))
|
||||
newset = cmd["settings"]
|
||||
if not isetdb.hasPK(intname,"id",uid):
|
||||
newset["id"]=uid
|
||||
isetdb.insertRow(intname,newset)
|
||||
else:
|
||||
if "id" in newset:
|
||||
del newset["id"]
|
||||
isetdb.updateFromPK(intname,"id",uid,newset)
|
||||
return await ws.send(response("success"))
|
||||
|
||||
case _:
|
||||
return await ws.send(clientError(f"Command '{cmd["type"]}' does not exist."))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user