From 7480da4b6919ab08d2d87d0d8cd3c3a9bc4e67d6 Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Mon, 12 Feb 2024 06:15:50 -0600 Subject: [PATCH] Setup client + server framework --- .env.example | 2 + .gitignore | 8 +++- .gitmodules | 3 ++ Dockerfile | 17 +++++++ bun.lockb | Bin 0 -> 302402 bytes client | 1 + common/events.ts | 22 +++++++++ package.json | 26 +++++++---- server/index.ts | 109 +++++++++++++++++++++++++++++++++++++++++++ server/migrations.ts | 12 +++++ src/index.ts | 7 --- 11 files changed, 189 insertions(+), 18 deletions(-) create mode 100644 .env.example create mode 100644 .gitmodules create mode 100644 Dockerfile create mode 100644 bun.lockb create mode 160000 client create mode 100644 common/events.ts create mode 100644 server/index.ts create mode 100644 server/migrations.ts delete mode 100644 src/index.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7c3fb9d --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +OAUTH_CLIENT_ID= +OAUTH_CLIENT_SECRET= diff --git a/.gitignore b/.gitignore index 87e5610..919c740 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,10 @@ yarn-error.log* **/*.tgz **/*.log package-lock.json -**/*.bun \ No newline at end of file +**/*.bun + +.vscode + +.env + +db.sqlite diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..5c85638 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "client"] + path = client + url = git@code.incremental.social:thepaperpilot/chromatic-lattice.git diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2909a35 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM oven/bun + +WORKDIR /app + +COPY package.json . +COPY bun.lockb . + +RUN bun install --production + +COPY src src +COPY tsconfig.json . +# COPY public public + +ENV NODE_ENV production +CMD ["bun", "src/index.ts"] + +EXPOSE 3000 diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..de1405c2697deb99c179b7faea42fd1b6695e749 GIT binary patch literal 302402 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 void; + info: (message: string) => void; + "set cursor position": (user: string, pos: { x: number; y: number }) => void; + chat: (user: string, message: string) => void; +} + +export const clientToServerEvents = t.Object({ + message: t.Union([ + t.Object({ + type: t.Literal("set cursor position"), + x: t.Number(), + y: t.Number() + }), + t.Object({ + type: t.Literal("chat"), + messageq: t.String() + }) + ]) +}); diff --git a/package.json b/package.json index 4e2df44..a942226 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,24 @@ { - "name": "@bun-examples/elysia", - "version": "1.0.50", + "name": "chromatic-lattice", + "version": "1.0.0", + "private": true, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "bun run --watch src/index.ts" + "start": "bun run server/index.ts", + "dev": "conc npm:dev:server npm:dev:client", + "dev:server": "bun run --watch server/index.ts", + "dev:client": "bunx --bun vite client", + "build": "bunx --bun vite build client", + "test": "vitest run -r client", + "testw": "vitest -r client" }, "dependencies": { - "elysia": "latest" + "@bogeychan/elysia-oauth2": "^0.0.19", + "elysia": "latest", + "profectus": "file:./client" }, "devDependencies": { - "bun-types": "latest" + "bun-types": "latest", + "concurrently": "^8.2.2" }, - "module": "src/index.js", - "bun-create": { - "start": "bun run src/index.ts" - } + "module": "server/index.js" } diff --git a/server/index.ts b/server/index.ts new file mode 100644 index 0000000..e8b7ff1 --- /dev/null +++ b/server/index.ts @@ -0,0 +1,109 @@ +import { Elysia, t } from "elysia"; +import oauth2 from "@bogeychan/elysia-oauth2"; +import { Database } from "bun:sqlite"; +import { randomBytes } from "crypto"; + + +import { migrateDatabase } from "./migrations"; +import { clientToServerEvents } from "../common/events"; + +const db = new Database("db.sqlite", { create: true }); +migrateDatabase(db); + +const states = new Set(); + +const auth = oauth2({ + profiles: { + incsoc: { + provider: { + clientId: Bun.env.OAUTH_CLIENT_ID!, + clientSecret: Bun.env.OAUTH_CLIENT_SECRET!, + + auth: { + url: 'https://auth.incremental.social/auth/v1', + params: {} + }, + + token: { + url: 'https://auth.incremental.social/oauth/v2/token', + params: {} + } + }, + scope: ['email', 'profile'] + } + }, + state: { + check(ctx, id, state) { + if (states.has(state)) { + states.delete(state); + return true; + } + + return false; + }, + generate(ctx, id) { + const state = randomBytes(8).toString('hex'); + states.add(state); + return state; + } + }, + storage: { + get(ctx, id) { + console.log(`get token: ${id}`); + + // const token = ( + // db + // .query('SELECT token FROM storage WHERE uuid = ? AND id = ?') + // .get(uuid, id) as { token: string } + // )?.token; + + // if (!token) { + // return; + // } + + // return JSON.parse(token); + return undefined; + }, + set(ctx, id, token) { + console.log(`new token: ${id}`); + + // db.run( + // 'INSERT OR REPLACE INTO storage (id, token) VALUES (?, ?)', + // [id, JSON.stringify(token)] + // ); + }, + delete(ctx, id) { + // db.run('DELETE FROM storage WHERE id = ?', [id]); + } + } +}); + +const app = new Elysia() + .use(auth) + .ws('/ws', { + body: t.Object({ + message: clientToServerEvents + }), + message(ws, { message }) { + console.log(message); + }, + beforeHandle: async function({ set, authorized, tokenHeaders }) { + // Check auth + if (!(await authorized("incsoc"))) { + return (set.status = 'Unauthorized'); + } + + const user = await fetch('https://auth.incremental.social/oidc/v1/userinfo', { + headers: await tokenHeaders("incsoc") + }); + + console.log(JSON.stringify(user)); + + // Update avatar and display name from mbin, fallback to userinfo + } + }) + .listen(3000); + +console.log( + `🦊 Chromatic Lattice server is running at ${app.server?.url.href}` +); diff --git a/server/migrations.ts b/server/migrations.ts new file mode 100644 index 0000000..c295e38 --- /dev/null +++ b/server/migrations.ts @@ -0,0 +1,12 @@ +import { Database } from "bun:sqlite"; + +export function migrateDatabase(db: Database) { + const version = (db.query("PRAGMA user_version").get() as { user_version: number }).user_version; + + if (version < 1) { + console.log("Applying migration 0 -> 1") + db.run("CREATE TABLE tokens (id TEXT, token TEXT, PRIMARY KEY(id))") + } + + db.run("PRAGMA user_version = 1;"); +} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 9c1f7a1..0000000 --- a/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Elysia } from "elysia"; - -const app = new Elysia().get("/", () => "Hello Elysia").listen(3000); - -console.log( - `🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}` -);