From cb6946c9c77f257d0ee76a3b12222dccf57b4762 Mon Sep 17 00:00:00 2001 From: Schluffe Date: Thu, 24 Sep 2026 22:23:48 +0200 Subject: [PATCH] meh session stuff --- server/client.test.ts | 3 ++- server/handler.ts | 50 +++++++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/server/client.test.ts b/server/client.test.ts index 88d5dce..94e0517 100644 --- a/server/client.test.ts +++ b/server/client.test.ts @@ -6,7 +6,8 @@ import { close, connect, flush, href, setup } from "./testSetup.ts"; Deno.test( "test", setup(async () => { - const [s1, m1] = await connect(href); + const t1 = "123-abc"; + const [s1, m1] = await connect(`${href}?ticket=${t1}`); await flush(); assertEquals(m1, []); await close(s1); diff --git a/server/handler.ts b/server/handler.ts index 793b036..2c7ab98 100644 --- a/server/handler.ts +++ b/server/handler.ts @@ -1,21 +1,49 @@ -import { getCookies } from "jsr:@std/http/cookie"; +import { STATUS_CODE, STATUS_TEXT, type StatusCode } from "jsr:@std/http"; -function getSessionId(request: Request): null | string { - getCookies(request.headers); - return null; +const ALLOWED_ORIGIN = "http://0.0.0.0:8042"; + +const sessions = new Map(); + +function createSession(socket: WebSocket): string { + const session = crypto.randomUUID(); + sessions.set(session, socket); + + return session; +} + +function createResponse( + status: StatusCode, + body: BodyInit | null = null, +): Response { + return new Response(body, { status, statusText: STATUS_TEXT[status] }); } export default function (request: Request): Response { - if (request.headers.get("upgrade") !== "websocket") { - return new Response("Upgrade required.", { status: 426 }); + if (request.headers.get("upgrade")?.toLowerCase() !== "websocket") { + return createResponse(STATUS_CODE.UpgradeRequired); } - const sessonId = getSessionId(request); - if (!sessonId) { - return new Response("Session requierd.", { status: 401 }); + const url = new URL(request.url); + if (url.origin !== ALLOWED_ORIGIN) { + return createResponse(STATUS_CODE.BadRequest); } - const { socket, response } = Deno.upgradeWebSocket(request); + const sessionId = url.searchParams.get("sessionId"); - return response; + if (sessionId === null) { + const upgrade = Deno.upgradeWebSocket(request); + createSession(upgrade.socket); + + return upgrade.response; + } else { + const session = sessions.get(sessionId); + if (session === null) { + return createResponse(STATUS_CODE.Unauthorized); + } + + // TODO + // I need a new socket every time + } + + return createResponse(STATUS_CODE.InternalServerError); }