summaryrefslogtreecommitdiff
path: root/src/lib/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/server')
-rw-r--r--src/lib/server/cookie.ts52
-rw-r--r--src/lib/server/cookiebridge.ts76
-rw-r--r--src/lib/server/setcookie.ts16
3 files changed, 69 insertions, 75 deletions
diff --git a/src/lib/server/cookie.ts b/src/lib/server/cookie.ts
index 30f215e..bbabd63 100644
--- a/src/lib/server/cookie.ts
+++ b/src/lib/server/cookie.ts
@@ -1,47 +1,41 @@
-import {
- getCookie,
- getSignedCookie,
- setCookie,
- setSignedCookie,
- deleteCookie,
-} from "hono/cookie";
+import { getHonoContext } from "waku/unstable_hono";
import cookie from "cookie";
-// console.log("db module path:", "@/lib/db");
-// console.log(
-// "globalThis.__WAKU_MIDDLEWARE_CONTEXT_STORAGE__:",
-// globalThis.__WAKU_MIDDLEWARE_CONTEXT_STORAGE__,
-// );
import db from "../db";
import type { Middleware } from "waku/config";
-// XXX we would probably like to extend config.
-
const cookieMiddleware: Middleware = () => {
console.log("cookieMiddleware executed");
return async (ctx, next) => {
const cookies = cookie.parse(ctx.req.headers.cookie || "");
- console.log({ cookies });
const coki = cookies.sorlang;
- if (!coki) {
- if (ctx.req.url.pathname === "/login") return await next();
- ctx.res.status = 301;
- ctx.res.headers = {
- Location: "/login",
- };
- }
+ // if (!coki) {
+ // if (ctx.req.url.pathname === "/login") return await next();
+ // ctx.res.status = 301;
+ // ctx.res.headers = {
+ // Location: "/login",
+ // };
+ // }
if (coki) {
const userRow = db.fetchCookie(coki);
+ console.log({ userRow });
if (userRow) ctx.data.user = { id: userRow.id, name: userRow.name };
- else {
- if (ctx.req.url.pathname === "/login") return await next();
- ctx.res.status = 301;
- ctx.res.headers = {
- Location: "/login",
- };
- }
+ // else {
+ // if (ctx.req.url.pathname === "/login") return await next();
+ // ctx.res.status = 301;
+ // ctx.res.headers = {
+ // Location: "/login",
+ // };
+ // }
}
await next();
+ const hctx: any = getHonoContext();
+ console.log("hono", hctx.lol);
+ console.log("ctx coki", ctx.data.cookie);
+ ctx.res.headers ||= {};
+ if (ctx.data.cookie)
+ ctx.res.headers["set-cookie"] = ctx.data.cookie as string;
+ ctx.res.headers["set-lmao"] = "wtf man";
};
};
diff --git a/src/lib/server/cookiebridge.ts b/src/lib/server/cookiebridge.ts
index 4dce095..778fc2c 100644
--- a/src/lib/server/cookiebridge.ts
+++ b/src/lib/server/cookiebridge.ts
@@ -1,38 +1,52 @@
-import { getContextData } from "waku/middleware/context";
-import {
- RequestCookies,
- ResponseCookies,
- type ResponseCookie,
-} from "@edge-runtime/cookies";
-import { mergeSetCookies } from "./setcookie";
+import { getContext, getContextData } from "waku/middleware/context";
-const cookies = () => {
- const ctx = getContextData() as {
- headers: Record<string, string | string[]>;
- cookies?: ResponseCookie[];
- };
- const headerObj = ctx.headers || {};
- headerObj["set-cookie"] = mergeSetCookies(
- headerObj["set-cookie"] || [],
- (ctx.cookies || []) as ResponseCookie[],
- );
- const headers = new Headers(headerObj as Record<string, string>);
- const reqCookies = new RequestCookies(headers);
- const resCookies = new ResponseCookies(headers);
+const useCookies = () => {
+ const ctx = getContext();
+ const headers = ctx.req.headers;
+ console.log(headers.cookie);
- const getCookie: ResponseCookies["get"] = (...args) =>
- resCookies.get(...args) || reqCookies.get(...args);
- const setCookie: ResponseCookies["set"] = (...args) => {
- const updated = resCookies.set(...args);
- ctx.cookies = updated.getAll();
- return updated;
+ const getCookie = (s: string) => {
+ const coki = headers.cookie;
+ if (!coki) return {};
+ const cokiMap = parseCoki(coki);
+ return cokiMap;
+ };
+ const setCookie = (s: string) => {
+ const ctxdata = getContextData();
+ // (ctxdata.cokimap as Record<string, string>).sorlang = s;
+ // ctxdata.cookie = `sorlang=${s}; Secure`
+ ctxdata.cookie = `sorlang=${s};`;
};
- const delCookie: ResponseCookies["delete"] = (...args) => {
- const updated = resCookies.delete(...args);
- ctx.cookies = updated.getAll();
- return updated;
+ const delCookie = (s: string) => {
+ const ctxdata = getContextData();
+ delete (ctxdata.cokimap as Record<string, string>).sorlang;
};
return { getCookie, setCookie, delCookie };
};
-export { cookies };
+export { useCookies };
+
+function parseCoki(s: string) {
+ return s
+ .split(";")
+ .map((v) => v.split("="))
+ .reduce((acc: Record<string, string>, v: any) => {
+ acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());
+ return acc;
+ }, {});
+}
+function parseSetCoki(s: string) {
+ return s
+ .split(";")
+ .map((v) => v.split("="))
+ .reduce((acc: Record<string, string>, v: any) => {
+ acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());
+ return acc;
+ }, {});
+}
+function cokiToString(m: Record<string, string>): string {
+ return Object.entries(m).reduce((acc: string, item: [string, string]) => {
+ const [key, val] = item;
+ return `${acc} ${key}=${val};`;
+ }, "");
+}
diff --git a/src/lib/server/setcookie.ts b/src/lib/server/setcookie.ts
index f64b380..61da128 100644
--- a/src/lib/server/setcookie.ts
+++ b/src/lib/server/setcookie.ts
@@ -1,24 +1,10 @@
import type { Middleware } from "waku/config";
-import { type ResponseCookie, stringifyCookie } from "@edge-runtime/cookies";
-
-export const mergeSetCookies = (
- resSetCookies: string | string[],
- cookiesInContext: ResponseCookie[],
-) => {
- if (typeof resSetCookies === "string") {
- resSetCookies = [resSetCookies];
- }
- return [...resSetCookies, ...cookiesInContext.map(stringifyCookie)];
-};
const setCookieMiddleware: Middleware = () => {
return async (ctx, next) => {
await next();
ctx.res.headers ||= {};
- ctx.res.headers["set-cookie"] = mergeSetCookies(
- ctx.res.headers["set-cookie"] || [],
- (ctx.data.cookies || []) as ResponseCookie[],
- );
+ ctx.res.headers["set-cookie"] = ctx.data.cookie as string;
};
};