From 14523cf8976fedbe000d629aeb668e55b2170cdc Mon Sep 17 00:00:00 2001 From: Paul Munteanu Date: Sun, 23 May 2021 05:33:48 +0300 Subject: [PATCH 1/5] Fix compilation with strictNullChecks: true --- src/events/Message.ts | 1 + src/listener/listener.ts | 6 +++--- src/util/Send.ts | 2 +- tsconfig.json | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/events/Message.ts b/src/events/Message.ts index 2c3305cb..51c5a294 100644 --- a/src/events/Message.ts +++ b/src/events/Message.ts @@ -21,6 +21,7 @@ export async function Message(this: WebSocket, buffer: Data) { if (this.encoding === "etf" && buffer instanceof Buffer) data = erlpack.unpack(buffer); else if (this.encoding === "json" && typeof buffer === "string") data = JSON.parse(buffer); + else return; check.call(this, PayloadSchema, data); diff --git a/src/listener/listener.ts b/src/listener/listener.ts index 8183f70c..b8ee84fd 100644 --- a/src/listener/listener.ts +++ b/src/listener/listener.ts @@ -19,7 +19,7 @@ export interface DispatchOpts { function getPipeline(this: WebSocket, guilds: string[], channels: string[] = []) { if (this.shard_count) { - guilds = guilds.filter((x) => (BigInt(x) >> 22n) % this.shard_count === this.shard_id); + guilds = guilds.filter((x) => (BigInt(x) >> 22n) % this.shard_count! === this.shard_id); } return [ @@ -37,7 +37,7 @@ function getPipeline(this: WebSocket, guilds: string[], channels: string[] = []) export async function setupListener(this: WebSocket) { const user = await UserModel.findOne({ id: this.user_id }).lean().exec(); - var guilds = user.guilds; + var guilds = user!.guilds; const eventStream = new MongooseCache(db.collection("events"), getPipeline.call(this, guilds), { onlyEvents: true, @@ -60,7 +60,7 @@ export async function dispatch(this: WebSocket, document: Event, { eventStream, guilds.push(document.data.id); eventStream.changeStream(getPipeline.call(this, guilds)); } else if (document.event === "GUILD_DELETE") { - guilds.remove(document.guild_id); + guilds.remove(document.guild_id!); eventStream.changeStream(getPipeline.call(this, guilds)); } else if (document.event === "CHANNEL_DELETE") channel_id = null; if (document.guild_id && !this.intents.has("GUILDS")) return; diff --git a/src/util/Send.ts b/src/util/Send.ts index 09e947a5..be25ac4f 100644 --- a/src/util/Send.ts +++ b/src/util/Send.ts @@ -11,7 +11,7 @@ export async function Send(socket: WebSocket, data: Payload) { if (socket.encoding === "etf") buffer = erlpack.pack(data); // TODO: encode circular object else if (socket.encoding === "json") buffer = JSON.stringify(data); - + else return; // TODO: compression if (socket.deflate) { socket.deflate.write(buffer); diff --git a/tsconfig.json b/tsconfig.json index 279cbbf1..fd2c21ea 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,7 +29,7 @@ /* Strict Type-Checking Options */ "strict": false /* Enable all strict type-checking options. */, "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - // "strictNullChecks": true, /* Enable strict null checks. */ + "strictNullChecks": true, /* Enable strict null checks. */ // "strictFunctionTypes": true, /* Enable strict checking of function types. */ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, From c93a47d9a0b573e8c100ba9f811dbcdc6c7ad292 Mon Sep 17 00:00:00 2001 From: Diego Magdaleno Date: Sat, 22 May 2021 22:23:46 -0500 Subject: [PATCH 2/5] Meta: Enable strictNullChecks --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 279cbbf1..fd2c21ea 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,7 +29,7 @@ /* Strict Type-Checking Options */ "strict": false /* Enable all strict type-checking options. */, "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - // "strictNullChecks": true, /* Enable strict null checks. */ + "strictNullChecks": true, /* Enable strict null checks. */ // "strictFunctionTypes": true, /* Enable strict checking of function types. */ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, From 7d795903ef9264d4febb89c62bf4abb269ab8851 Mon Sep 17 00:00:00 2001 From: Diego Magdaleno Date: Sat, 22 May 2021 22:30:36 -0500 Subject: [PATCH 3/5] Config: Implement new configuration options --- package-lock.json | Bin 128223 -> 133722 bytes package.json | 3 ++- src/Server.ts | 2 -- src/opcodes/Identify.ts | 4 +++- src/util/Config.ts | 45 ++++++++++++++++++++++++++-------------- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index c9428dd1565d12f027c35e0771ecdc43f586fee6..5243808f5aa9f30a0c75ea53a178358290d8c60e 100644 GIT binary patch delta 3465 zcmd6qTWs6b8OOoQj$?OOn!rwxHi=!u!P>AgZ5-E|C#5<`A z&=ti{Y%jx#o&bCrumF2l-?n<4`q;TI#U6@n9WWrkum;=1Hgp(*wJ%#AN=tEr1i`QY z@iILed^#kh|M&mS`F=cq_{+l0>!;rM=lNLZxuwP66B1M}^!!@rrPxMf1O4g0A}632 zz`nu;H!Nwes3d5r$!VJ;mFlJmz1!g;X4*m-bxf#E~*lcfy9H z8&i2(8|VghbVbsum6rmMp7 z3~s1)L@)|)qf{C2l`#ejFkA2n*=W)gxej%h(yML3cEX}08DYtEh2B&hv4PzcuG+d5 zwp+5)7s8Guc#>sH)4Q-BJ@hC&D|lM5q;T8P`(fL$6s>b7QFH@8y2-VausSnfGcW)T zEiHl*{U-tSyA|-JzW$hG=uOFz#$81N*y6?gr^M3Pf2wOR_IPm8v z3~vGKgH`axsX4|;N5>97=CV0yO<0Otjp{*IRB2Po=tuX`8h@nod?YrKn02CSr&yT1-YZOGBm;?+ps&2HI-lt|@4d zOwq03aS&J5!CN;k?f)rp?y=MNl-IvqfL0*F$3hT(<-W=X^6r}n6aL3J=nB&&Op4U0 z5vk&FIUylgl1-A>px7@Yl1T>Xq$*mW9Op9;*&bA)iDE%T$!sf<<;!ETmC3>IuxF%_ zxlT$@9M(pO_#PeG1h+>|?tfPL?mBq$^(VmEZ;7)rg990}AdCaEe1#P)GnFA)&DMB0 zOy_C6!nG=@BN|v9>5UAmU)Io}FxF^02KU{B+@V^Q*0c?M7~vxA$^gx3C9T;`jXf=0 zN;_sMolonr!PKJKZ+rrU4woNWF2#^4 zsS%vY$+?Dx^@?(LSBNL~Dhy3=YF%bG6LEyrDqd{pbxg-J;vAW)Z1!ntSQ}z=Pv3OR zv1B$;yVA2)6Vj?^2-aC=7hN{pTwz zN87Y2wqZ5W@4+KvD^ti;8%=8$i5WQG5zu_q5zW0Ek8@H)m-E#WX$z@*zF74P5-!&g zhQ)f4CvuHZQ&aJl7ptU2^zPak9Q^gn(%miZ$2-s^aBv=jAJ7N_aSxacQPY%!@6BM$`Fi2?T z`kp5-2$JI2jGf9v=|U0l(z7D}`G%z9EF zaTWmT<*RJeDlnrFK~UJJMaB#YOU3&|XTV`7xf|Wfwd=h)#*2Ea-oq3Ht4Uc!l4LZS zZC9lt-Y#*4tuboHq*lQu+g8#o<~>bJObPP%QI+mAM+}&S%M;-wd4&I%V-hob@erSB+kB3i()y^J3 kKf3nFkTh+cm+xm%@K%3#&U$5LEco>=mnWZp0{wB}3-p+He*gdg delta 387 zcmcaLh2#E9_6ffj%{B`#nleonE@af7ep-f6W4cl$qs-(9!YpAPZi)IX5!xnEsg|i0 zS^6a*`d+DKi6us%u9fMI9wrsV9+8Qa`oaE5Zh_v;hW`25?xu;Jk!6Y52HEA6RsM!X zIq8;$nFel7L7}c5rM_jE<$kFaj*|-&<)^pEGA^E8D93nek_qo*d3N^Ae^^`jHm8ei z(cHYlk)L(*3wJ^8%`749Dw`KqRx@t4sHykceD(Az{>{vH8BMlp2r-s$(a*)x6< mZ)G%fWGtNQs3JP~_30hkSD#>H); 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 = { + 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 From cae7ed6657412b0b93b17d442b7dfe0ac3dcf457 Mon Sep 17 00:00:00 2001 From: Diego Magdaleno Date: Sun, 23 May 2021 12:32:54 -0500 Subject: [PATCH 4/5] Update: update server-util to latest --- package-lock.json | Bin 133722 -> 133722 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 5243808f5aa9f30a0c75ea53a178358290d8c60e..7315fbd619b5bbe2173ba3c75f4da9f93a27ee22 100644 GIT binary patch delta 761 zcmcaLh2z!~jtM`Qjr9zs%gZq;Y?fx!V4D2V$#D8<8Ai3qLSL1_+?_%VBYYeKy(@Ey z%+11*Otalxvm-t8vJ46Xva9r6Eb|@1f&)B*eLcgIB2)9tf;`h4gTnGs)6Lvcic-U! zwZpy5L;aEq+>5lm+`J0PeA9wc{T(M4D#~wfk!9S@ILU-}vOGKc=0B_j(-|!$U+mYP z&bypZ6v$l2E+1CxlI2zAX>J^zcvd(hH z$sO|~8I30wEE3;5Z}}a@$-6nlr%zbIcyh8di|pk6T-=-IE|ij-{@^yF{&cxrj2hFI z$TKR01%(+!6&U$O8YQMidYigyJLv}(6kFtkoBDY;R=Ju6I_D(01sIxUX$OSo255&^ z22|vDML7BU`{V~Zrlgm5W+k$ro&EMs0PM%ahaBQ8Q1CN}-MBBMfRcur=KZ)RzjVQ4^7YL=;2sa8g)^;p75E#mPF$ z9Vd6plLY#(V3GLddCTuGPTtKaK7GOx#*>q^<;6C4FVvBozTSXQf4bZ*MvdughKw?k zCkV5IdPJ2bg{7Ezrg;=6YyRRnD zEe57L_Ats!H&A6{-`*|DnAeIL_F*&$`||0Eu8h*t&o5?-h6MfOdCS?idoE#ICWD%}0Vw~p>0M%~-v;Y7A diff --git a/package.json b/package.json index 89e96cb4..f45b0008 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Fosscord", "license": "ISC", "dependencies": { - "@fosscord/server-util": "^1.2.8", + "@fosscord/server-util": "^1.3.0", "ajv": "^8.5.0", "dotenv": "^8.2.0", "jsonwebtoken": "^8.5.1", From a2a22c9afa9231c86133ba043b8111520765763d Mon Sep 17 00:00:00 2001 From: Diego Magdaleno Date: Sun, 23 May 2021 13:46:26 -0500 Subject: [PATCH 5/5] Fix: No more typecasting required --- package-lock.json | Bin 133722 -> 133722 bytes package.json | 2 +- src/opcodes/Identify.ts | 4 ++-- src/util/Config.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7315fbd619b5bbe2173ba3c75f4da9f93a27ee22..b7bb7da6e9c211ee9090a21b5fe7a5876250bd0f 100644 GIT binary patch delta 261 zcmcaLh2z!~jtRdQ4X4Y?F)D19X4GPud`Mk?`e_+Pjmbjw3ZZ_vMP3#j$x*rf9+jS< zF24DJ+M#(_`Ki9Xnfe~VNq$BJ`mVkuh6Sm4AuhpAW#P##7LmcGxki3DS*0EZffd2I z8KsU!l|Jdgt_5L+l__Ojx&EG$3ltT$x5zSXXPjihJ6WEcz4;I8_CKtQ3&cF)D19X4GPu{Mku=`e_+PjmaWk6~f$|LJcE)90R>8bBfH( z!jeq0-CeUIJ@c{*3InpM^j$3T9m9eHJcE5b!;>OY^UZ=h(;S1s@>0{y+)|2C!=1Im zz0E`Yk_+66w7uNC3d(%bf>Zq+Cl@NpZ*P%h+|D@3gm({path: configPath, schemaValidator: validator, schema: schema}) \ No newline at end of file