From bf85b4d81ca69a3042ac577d20006b44813af267 Mon Sep 17 00:00:00 2001 From: creations Date: Sun, 13 Apr 2025 10:57:52 -0400 Subject: [PATCH 1/4] init preact testing --- .gitignore | 2 ++ package.json | 1 + src/components/head.tsx | 42 +++++++++++++++++++++++++++++++++++++++++ src/routes/test.tsx | 26 +++++++++++++++++++++++++ src/server.ts | 2 +- src/templates/shell.tsx | 12 ++++++++++++ tsconfig.json | 3 ++- types/preact.d.ts | 6 ++++++ 8 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 src/components/head.tsx create mode 100644 src/routes/test.tsx create mode 100644 src/templates/shell.tsx create mode 100644 types/preact.d.ts diff --git a/.gitignore b/.gitignore index 36e4935..1ba5dab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ bun.lock .env /uploads .idea +temp +.vscode/settings.json diff --git a/package.json b/package.json index cea47bb..c82425e 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "fluent-ffmpeg": "^2.1.3", "image-thumbnail": "^1.0.17", "luxon": "^3.6.1", + "preact-render-to-string": "^6.5.13", "redis": "^4.7.0" } } diff --git a/src/components/head.tsx b/src/components/head.tsx new file mode 100644 index 0000000..b519547 --- /dev/null +++ b/src/components/head.tsx @@ -0,0 +1,42 @@ +import type { FunctionalComponent, JSX } from "preact"; + +export const Head: FunctionalComponent = ({ + title, + styles, + scripts, +}): JSX.Element => ( + <> + + + + + {title && {title}} + + + + {styles?.map( + (style): JSX.Element => ( + + ), + )} + + {scripts?.map( + (script: string | [string, boolean]): JSX.Element | undefined => { + if (typeof script === "string") { + return - <% } else if (Array.isArray(script)) { %> - <% if (script[1]) { %> - - <% } else { %> - - <% } %> - <% } %> - <% }) %> -<% } %> - - diff --git a/src/views/index.ejs b/src/views/index.ejs deleted file mode 100644 index dfc2c62..0000000 --- a/src/views/index.ejs +++ /dev/null @@ -1,9 +0,0 @@ - - - - <%- include("global", { styles: [], scripts: [] }) %> - - - - - diff --git a/types/ejs.d.ts b/types/ejs.d.ts deleted file mode 100644 index 486a4a4..0000000 --- a/types/ejs.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -interface EjsTemplateData { - [key: string]: string | number | boolean | object | undefined | null; -} From b31d77983cbcc74e626f464586ca498a6cfb40b8 Mon Sep 17 00:00:00 2001 From: creations Date: Thu, 22 May 2025 17:52:20 -0400 Subject: [PATCH 4/4] add session fix cors, add session --- config/index.ts | 2 ++ src/routes/auth/session.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/server.ts | 29 +++++++++++++++++++++++++++++ types/config.d.ts | 1 + 4 files changed, 70 insertions(+) create mode 100644 src/routes/auth/session.ts diff --git a/config/index.ts b/config/index.ts index bdd2845..ad67386 100644 --- a/config/index.ts +++ b/config/index.ts @@ -8,6 +8,8 @@ const environment: Environment = { development: process.env.NODE_ENV === "development" || process.argv.includes("--dev"), fqdn: normalizeFqdn(process.env.FQDN) || "http://localhost:8080", + frontendUrl: + normalizeFqdn(process.env.FRONTEND_URL) || "http://localhost:8080", }; const dataType: { type: string; path: string | undefined } = { diff --git a/src/routes/auth/session.ts b/src/routes/auth/session.ts new file mode 100644 index 0000000..a087358 --- /dev/null +++ b/src/routes/auth/session.ts @@ -0,0 +1,38 @@ +const routeDef: RouteDef = { + method: "GET", + accepts: "*/*", + returns: "application/json", +}; + +async function handler(request: ExtendedRequest): Promise { + if (!request.session) { + return Response.json( + { + success: false, + code: 403, + error: "Not logged in", + }, + { status: 403 }, + ); + } + + const { session } = request; + + if ((session as ApiUserSession).is_api === true) { + return Response.json( + { + success: false, + code: 403, + error: "You cannot use this endpoint with an authorization token", + }, + { status: 403 }, + ); + } + + return Response.json({ + success: true, + session, + }); +} + +export { routeDef, handler }; diff --git a/src/server.ts b/src/server.ts index e9d7c15..6a381cf 100644 --- a/src/server.ts +++ b/src/server.ts @@ -116,6 +116,19 @@ class ServerHandler { request: Request, server: BunServer, ): Promise { + if (request.method === "OPTIONS") { + return new Response(null, { + status: 204, + headers: { + "Access-Control-Allow-Origin": environment.frontendUrl, + "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Headers": + request.headers.get("Access-Control-Request-Headers") || "*", + }, + }); + } + const extendedRequest: ExtendedRequest = request as ExtendedRequest; extendedRequest.startPerf = performance.now(); @@ -258,6 +271,22 @@ class ServerHandler { ); } + if (response?.headers) { + response.headers.set( + "Access-Control-Allow-Origin", + environment.frontendUrl, + ); + response.headers.set( + "Access-Control-Allow-Methods", + "GET, POST, PUT, DELETE, OPTIONS", + ); + response.headers.set("Access-Control-Allow-Credentials", "true"); + response.headers.set( + "Access-Control-Allow-Headers", + request.headers.get("Access-Control-Request-Headers") || "Content-Type", + ); + } + return response; } } diff --git a/types/config.d.ts b/types/config.d.ts index 2d0f7dd..e65c147 100644 --- a/types/config.d.ts +++ b/types/config.d.ts @@ -3,6 +3,7 @@ type Environment = { host: string; development: boolean; fqdn: string; + frontendUrl: string; }; type UserValidation = {