apeters 36e606693b Users & Groups fixes/changes
Signed-off-by: apeters <apeters@korves.net>
2025-05-23 08:47:10 +00:00

61 lines
2.4 KiB
Python

import asyncio
import json
import random
async def cli_processor(streams: tuple[asyncio.StreamReader, asyncio.StreamWriter]):
from components.users import what_id, get
from components.database import IN_MEMORY_DB
try:
reader, writer = streams
while not reader.at_eof():
cmd = await reader.readexactly(1)
if cmd == b"\x97":
data = await reader.readuntil(b"\n")
login = data.strip().decode("utf-8")
try:
user_id = await what_id(login=login)
user = await get(user_id=user_id)
if "system" not in user.acl:
IN_MEMORY_DB["PROMOTE_USERS"].add(user_id)
writer.write(b"\x01")
else:
writer.write(b"\x02")
except Exception as e:
writer.write(b"\x03")
await writer.drain()
elif cmd == b"\x98":
awaiting = dict()
tokens = (
IN_MEMORY_DB["TOKENS"]["LOGIN"] | IN_MEMORY_DB["TOKENS"]["REGISTER"]
)
for idx, (k, v) in enumerate(tokens.items(), start=1):
awaiting[idx] = (k, v["intention"])
writer.write(f"{json.dumps(awaiting)}\n".encode("ascii"))
await writer.drain()
elif cmd == b"\x99":
data = await reader.readexactly(14)
confirmed = data.strip().decode("ascii")
code = "%06d" % random.randint(0, 999999)
if confirmed in IN_MEMORY_DB["TOKENS"]["LOGIN"]:
IN_MEMORY_DB["TOKENS"]["LOGIN"].get(confirmed, {}).update(
{"status": "confirmed", "code": code}
)
elif confirmed in IN_MEMORY_DB["TOKENS"]["REGISTER"]:
IN_MEMORY_DB["TOKENS"]["REGISTER"].get(confirmed, {}).update(
{"status": "confirmed", "code": code}
)
writer.write(f"{code}\n".encode("ascii"))
await writer.drain()
except Exception as e:
if type(e) not in [
asyncio.exceptions.IncompleteReadError,
ConnectionResetError,
]:
raise
finally:
writer.close()
await writer.wait_closed()