meh session stuff

This commit is contained in:
Schluffe
2026-09-24 22:23:48 +02:00
parent 9ca21bdcb8
commit cb6946c9c7
2 changed files with 41 additions and 12 deletions
+2 -1
View File
@@ -6,7 +6,8 @@ import { close, connect, flush, href, setup } from "./testSetup.ts";
Deno.test( Deno.test(
"test", "test",
setup(async () => { setup(async () => {
const [s1, m1] = await connect(href); const t1 = "123-abc";
const [s1, m1] = await connect(`${href}?ticket=${t1}`);
await flush(); await flush();
assertEquals(m1, []); assertEquals(m1, []);
await close(s1); await close(s1);
+39 -11
View File
@@ -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 { const ALLOWED_ORIGIN = "http://0.0.0.0:8042";
getCookies(request.headers);
return null; const sessions = new Map<string, WebSocket>();
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 { export default function (request: Request): Response {
if (request.headers.get("upgrade") !== "websocket") { if (request.headers.get("upgrade")?.toLowerCase() !== "websocket") {
return new Response("Upgrade required.", { status: 426 }); return createResponse(STATUS_CODE.UpgradeRequired);
} }
const sessonId = getSessionId(request); const url = new URL(request.url);
if (!sessonId) { if (url.origin !== ALLOWED_ORIGIN) {
return new Response("Session requierd.", { status: 401 }); 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);
} }