From e839a5f61f0faa21ca8b4bd5767f7575d5e576ee Mon Sep 17 00:00:00 2001 From: polwex Date: Wed, 21 May 2025 14:00:28 +0700 Subject: the card flip animation is legit --- src/lib/server/cookie.ts | 52 +++++++++++++---------------- src/lib/server/cookiebridge.ts | 76 +++++++++++++++++++++++++----------------- src/lib/server/setcookie.ts | 16 +-------- 3 files changed, 69 insertions(+), 75 deletions(-) (limited to 'src/lib/server') 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; - cookies?: ResponseCookie[]; - }; - const headerObj = ctx.headers || {}; - headerObj["set-cookie"] = mergeSetCookies( - headerObj["set-cookie"] || [], - (ctx.cookies || []) as ResponseCookie[], - ); - const headers = new Headers(headerObj as Record); - 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).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).sorlang; }; return { getCookie, setCookie, delCookie }; }; -export { cookies }; +export { useCookies }; + +function parseCoki(s: string) { + return s + .split(";") + .map((v) => v.split("=")) + .reduce((acc: Record, 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, v: any) => { + acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim()); + return acc; + }, {}); +} +function cokiToString(m: Record): 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; }; }; -- cgit v1.2.3