summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDiego Magdaleno <diegomagdaleno@protonmail.com>2021-05-22 22:30:36 -0500
committerDiego Magdaleno <diegomagdaleno@protonmail.com>2021-05-22 22:30:36 -0500
commit7d795903ef9264d4febb89c62bf4abb269ab8851 (patch)
treeba63b45ac0fd6258382045c6bc45d1435739fb66 /src
parentMerge branch 'master' of github.com:DiegoMagdaleno/fosscord-gateway (diff)
downloadserver-7d795903ef9264d4febb89c62bf4abb269ab8851.tar.xz
Config: Implement new configuration options
Diffstat (limited to 'src')
-rw-r--r--src/Server.ts2
-rw-r--r--src/opcodes/Identify.ts4
-rw-r--r--src/util/Config.ts45
3 files changed, 33 insertions, 18 deletions
diff --git a/src/Server.ts b/src/Server.ts

index 46ff56a3..46130b29 100644 --- a/src/Server.ts +++ b/src/Server.ts
@@ -4,7 +4,6 @@ dotenv.config(); import { db } from "@fosscord/server-util"; import { Server as WebSocketServer } from "ws"; import { Connection } from "./events/Connection"; -import Config from "./util/Config"; // TODO: only listen/start the server if everything got initalized // https://www.npmjs.com/package/ws use "External HTTP/S server" and listen manually at the end of listen() @@ -38,7 +37,6 @@ export class Server { await (db as Promise<Connection>); await this.setupSchema(); console.log("[DB] connected"); - await Config.init(); console.log(`[Gateway] online on 0.0.0.0:${port}`); } } diff --git a/src/opcodes/Identify.ts b/src/opcodes/Identify.ts
index f31eebfe..be805eda 100644 --- a/src/opcodes/Identify.ts +++ b/src/opcodes/Identify.ts
@@ -17,6 +17,7 @@ import { IdentifySchema } from "../schema/Identify"; import { Send } from "../util/Send"; import experiments from "./experiments.json"; import { check } from "./instanceOf"; +import { DefaultOptions, gatewayConfig } from "../util/Config"; // TODO: bot sharding // TODO: check priviliged intents @@ -29,7 +30,8 @@ export async function onIdentify(this: WebSocket, data: Payload) { const identify: IdentifySchema = data.d; try { - var decoded = await checkToken(identify.token); // will throw an error if invalid + const { jwtSecret } = (gatewayConfig.getAll() as DefaultOptions).security; + var decoded = await checkToken(identify.token, jwtSecret); // will throw an error if invalid } catch (error) { console.error("invalid token", error); return this.close(CLOSECODES.Authentication_failed); diff --git a/src/util/Config.ts b/src/util/Config.ts
index eee20e1d..138e1c2f 100644 --- a/src/util/Config.ts +++ b/src/util/Config.ts
@@ -1,21 +1,36 @@ import { Config } from "@fosscord/server-util"; - -export default { - init() { - return Config.init({ gateway: DefaultOptions }); - }, - get() { - return Config.getAll().gateway; - }, - set(val: any) { - return Config.setAll({ gateway: val }); - }, - getAll: Config.getAll, - setAll: Config.setAll, -}; +import { getConfigPathForFile } from "@fosscord/server-util/dist/util/Config"; +import Ajv, { JSONSchemaType } from "ajv"; export interface DefaultOptions { endpoint?: string; + security: { + jwtSecret: string; + } } -export const DefaultOptions: DefaultOptions = {}; +const schema: JSONSchemaType<DefaultOptions> = { + type: "object", + properties: { + endpoint: { + type: "string", + nullable: true + }, + security: { + type: "object", + properties: { + jwtSecret: { + type: "string" + } + }, + required: ["jwtSecret"] + }, + }, + required: ["security"] +} + +const ajv = new Ajv(); +const validator = ajv.compile(schema); + +const configPath = getConfigPathForFile("fosscord", "gateway", ".json"); +export const gatewayConfig = new Config({path: configPath, schemaValidator: validator, schema: schema}) \ No newline at end of file