From 7138e02570e7d3d83f7985447d8a6ef58bc55ab7 Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Fri, 26 Jul 2024 19:38:24 -0400 Subject: [PATCH] Add basic token generation, primitive memory profiling --- README.md | 1 + bun.lockb | Bin 72469 -> 74579 bytes config/users.yml | 9 +++++++- package.json | 18 ++++++++-------- src/channel/Channel.ts | 16 ++++++++++++-- src/util/token.ts | 14 +++++++++++- src/ws/events/user/handlers/hi.ts | 34 ++++++++++++++++++------------ src/ws/server.ts | 2 +- src/ws/usersConfig.ts | 4 +++- 9 files changed, 70 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index e8775be..d5285da 100755 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Brandon's server originally used MongoDB for storing user data, but there are to ## TODO - Implement both UUID-based and JWT-based token auth + - Add `openssl genrsa -out mppkey 2048` to the instructions - Redo all of the validations with Zod - This probably means making Zod schemas for every single message type - Also user and channel data diff --git a/bun.lockb b/bun.lockb index 9b184271f5249ec32573c199f0687a84c22785da..050587be155e9fabc4041fc31abd4e23f08a658e 100755 GIT binary patch delta 14496 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 { + this.printMemoryInChat(); + }, 1000); + } } private alreadyBound = false; @@ -205,8 +212,8 @@ export class Channel extends EventEmitter { const ownsChannel = this.hasUser(socket.getUserID()); if (cmd == "help") { - } else if (cmd == "") { - + } else if (cmd == "mem") { + this.printMemoryInChat(); } }); @@ -1139,6 +1146,11 @@ export class Channel extends EventEmitter { } } } + + public printMemoryInChat() { + const mem = heapStats(); + this.sendChatAdmin(`Size: ${(mem.heapSize / 1000 / 1000).toFixed(2)}M / Capacity: ${(mem.heapCapacity / 1000 / 1000).toFixed(2)}M`); + } } export default Channel; diff --git a/src/util/token.ts b/src/util/token.ts index b3fdcb7..bc93dcb 100644 --- a/src/util/token.ts +++ b/src/util/token.ts @@ -49,5 +49,17 @@ export function generateToken(id: string): Promise | undefin if (token) resolve(token); }); - } else return undefined; + } else return new Promise(() => undefined); +} + +export function verifyToken(token: string) { + return jsonwebtoken.verify(token, privkey, { algorithms: ["RS256"] }); +} + +export async function decryptJWT(token: string) { + if (config.tokenAuth != "jwt") return undefined; + + if (!privkey) throw new Error("Cannot decrypt JWT without private key loaded"); + + return jsonwebtoken.decode(token); } diff --git a/src/ws/events/user/handlers/hi.ts b/src/ws/events/user/handlers/hi.ts index 846a62a..e37db73 100755 --- a/src/ws/events/user/handlers/hi.ts +++ b/src/ws/events/user/handlers/hi.ts @@ -1,7 +1,10 @@ +import { Logger } from "../../../../util/Logger"; import { generateToken } from "../../../../util/token"; import { ServerEventListener } from "../../../../util/types"; import { config } from "../../../usersConfig"; +const logger = new Logger("Hi handler"); + export const hi: ServerEventListener<"hi"> = { id: "hi", callback: async (msg, socket) => { @@ -9,21 +12,25 @@ export const hi: ServerEventListener<"hi"> = { let generatedToken: string | undefined; + // Is the browser challenge enabled and has the user completed it? + if (config.browserChallenge !== "none" && !socket.gateway.hasCompletedBrowserChallenge) return; + + // Is token auth enabled? if (config.tokenAuth !== "none") { - if (socket.gateway.hasCompletedBrowserChallenge) { - if (msg.token) { - // Check if they have passed the browser challenge - // Send the token to the authenticator - // TODO - } else { - // Generate a token - generatedToken = await generateToken(socket.getUserID()) as string | undefined; - if (!generatedToken) return; - } + logger.debug("token auth is enabled"); + + // Is the browser challenge enabled and has the user completed it? + if (msg.token) { + // Check if they have passed the browser challenge + // Send the token to the authenticator + // TODO } else { - // TODO Ban the user for logging in without the browser - // TODO config for this + // Generate a token + generatedToken = await generateToken(socket.getUserID()); + if (!generatedToken) return; } + + logger.debug("token:", generatedToken); } if (socket.rateLimits) @@ -51,7 +58,8 @@ export const hi: ServerEventListener<"hi"> = { _id: part._id, color: part.color, name: part.name - } + }, + token: generatedToken } ]); diff --git a/src/ws/server.ts b/src/ws/server.ts index f021a84..402dde1 100755 --- a/src/ws/server.ts +++ b/src/ws/server.ts @@ -91,7 +91,7 @@ export const app = Bun.serve<{ ip: string }>({ // logger.debug("Connection at " + socket.getIP()); // Let's put it in the dinner bucket. - socketsBySocketID.set(socket.socketID, socket); + socketsBySocketID.set((socket.socketID as any), socket); }, message: (ws, message) => { diff --git a/src/ws/usersConfig.ts b/src/ws/usersConfig.ts index d902cca..dd64545 100755 --- a/src/ws/usersConfig.ts +++ b/src/ws/usersConfig.ts @@ -9,6 +9,7 @@ export interface UsersConfig { adminParticipant: Participant; enableAdminEval: boolean; tokenAuth: "jwt" | "uuid" | "none"; + browserChallenge: "none" | "obf" | "basic"; } export const usersConfigPath = "config/users.yml"; @@ -27,7 +28,8 @@ export const defaultUsersConfig: UsersConfig = { id: "0" }, enableAdminEval: false, - tokenAuth: "none" + tokenAuth: "none", + browserChallenge: "none" }; // Importing this elsewhere causes bun to segfault