client can now set secret other than 'test'

This commit is contained in:
Christoph Stahl 2022-11-23 16:48:20 +01:00
parent c21b5095ee
commit 1193580403
7 changed files with 17 additions and 808 deletions

View file

@ -1,4 +1,6 @@
import asyncio import asyncio
import string
import secrets
from traceback import print_exc from traceback import print_exc
from json import load from json import load
import logging import logging
@ -17,7 +19,7 @@ sources: dict[str, Source] = {}
currentLock = asyncio.Semaphore(0) currentLock = asyncio.Semaphore(0)
state = {"current": None, "queue": [], "room": None, "server": ""} state = {"current": None, "queue": [], "recent": [], "room": None, "server": "", "secret": ""}
@sio.on("skip") @sio.on("skip")
@ -29,6 +31,7 @@ async def handle_skip():
@sio.on("state") @sio.on("state")
async def handle_state(data): async def handle_state(data):
state["queue"] = [Entry(**entry) for entry in data["queue"]] state["queue"] = [Entry(**entry) for entry in data["queue"]]
state["recent"] = [Entry(**entry) for entry in data["recent"]]
@sio.on("connect") @sio.on("connect")
@ -37,8 +40,9 @@ async def handle_connect():
await sio.emit( await sio.emit(
"register-client", "register-client",
{ {
"secret": "test", "secret": state["secret"],
"queue": [entry.to_dict() for entry in state["queue"]], "queue": [entry.to_dict() for entry in state["queue"]],
"recent": [entry.to_dict() for entry in state["recent"]],
"room": state["room"], "room": state["room"],
}, },
) )
@ -109,6 +113,7 @@ async def aiomain():
parser = ArgumentParser() parser = ArgumentParser()
parser.add_argument("--room", "-r") parser.add_argument("--room", "-r")
parser.add_argument("--secret", "-s")
parser.add_argument("--config-file", "-C", default="syng-client.json") parser.add_argument("--config-file", "-C", default="syng-client.json")
parser.add_argument("server") parser.add_argument("server")
@ -120,6 +125,12 @@ async def aiomain():
if args.room: if args.room:
state["room"] = args.room state["room"] = args.room
if args.secret:
state["secret"] = args.secret
else:
state["secret"] = ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(8))
print(f"Generated secret: {state['secret']}")
state["server"] = args.server state["server"] = args.server
await sio.connect(args.server) await sio.connect(args.server)

View file

@ -203,7 +203,8 @@ async def handle_register_client(sid, data: dict[str, Any]):
else: else:
logger.info("Registerd new client %s", room) logger.info("Registerd new client %s", room)
initial_entries = [Entry(**entry) for entry in data["queue"]] initial_entries = [Entry(**entry) for entry in data["queue"]]
clients[room] = State(data["secret"], {}, [], Queue(initial_entries), [], sid) initial_recent = [Entry(**entry) for entry in data["recent"]]
clients[room] = State(data["secret"], {}, [], Queue(initial_entries), initial_recent, sid)
sio.enter_room(sid, room) sio.enter_room(sid, room)
await sio.emit("client-registered", {"success": True, "room": room}, room=sid) await sio.emit("client-registered", {"success": True, "room": room}, room=sid)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,15 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
<script type="module" crossorigin src="/assets/index.533d2b73.js"></script>
<link rel="stylesheet" href="/assets/index.d713a926.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

View file

@ -67,9 +67,9 @@ class SyngShell(aiocmd.PromptToolkitCmd):
async def do_admin(self, data): async def do_admin(self, data):
await sio.emit("register-admin", {"secret": data}) await sio.emit("register-admin", {"secret": data})
async def do_connect(self, room): async def do_connect(self, server, room):
state["room"] = room state["room"] = room
await sio.connect("http://127.0.0.1:8080") await sio.connect(server)
async def do_skip(self): async def do_skip(self):
await sio.emit("skip") await sio.emit("skip")