meh session stuff
This commit is contained in:
+39
-11
@@ -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<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 {
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user