Merge branch 'fosscord:master' into master
This commit is contained in:
		
						commit
						dd24e49be1
					
				
							
								
								
									
										4
									
								
								.env.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.env.example
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | MONGO_URL=mongodb://localhost/fosscord | ||||||
|  | PORT=3002 | ||||||
|  | PRODUCTION=TRUE | ||||||
|  | THREADS=# automatically use all available cores, only available if production = true | ||||||
| @ -1,11 +1,12 @@ | |||||||
| FROM node:lts-alpine | FROM node:lts-alpine | ||||||
| WORKDIR /usr/src/fosscord-gateway | WORKDIR /usr/src/fosscord-gateway | ||||||
| COPY . . | COPY package.json . | ||||||
| RUN apk --no-cache --virtual build-dependencies add \ | RUN apk --no-cache --virtual build-dependencies add \ | ||||||
|     python \ |     python \ | ||||||
|     make \ |     make \ | ||||||
|     g++ |     g++ | ||||||
| RUN npm install | RUN npm install | ||||||
| RUN apk del build-dependencies | RUN apk del build-dependencies | ||||||
|  | COPY . . | ||||||
| EXPOSE 3002 | EXPOSE 3002 | ||||||
| CMD ["npm", "start"] | CMD ["npm", "start"] | ||||||
							
								
								
									
										2267
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2267
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -13,7 +13,8 @@ | |||||||
| 	"author": "Fosscord", | 	"author": "Fosscord", | ||||||
| 	"license": "ISC", | 	"license": "ISC", | ||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
| 		"@fosscord/server-util": "^1.2.6", | 		"@fosscord/server-util": "^1.3.7", | ||||||
|  | 		"ajv": "^8.5.0", | ||||||
| 		"dotenv": "^8.2.0", | 		"dotenv": "^8.2.0", | ||||||
| 		"jsonwebtoken": "^8.5.1", | 		"jsonwebtoken": "^8.5.1", | ||||||
| 		"lambert-server": "^1.1.7", | 		"lambert-server": "^1.1.7", | ||||||
|  | |||||||
| @ -1,10 +1,9 @@ | |||||||
| import "missing-native-js-functions"; | import "missing-native-js-functions"; | ||||||
| import dotenv from "dotenv"; | import dotenv from "dotenv"; | ||||||
| dotenv.config(); | dotenv.config(); | ||||||
| import { db } from "@fosscord/server-util"; | import { Config, db } from "@fosscord/server-util"; | ||||||
| import { Server as WebSocketServer } from "ws"; | import { Server as WebSocketServer } from "ws"; | ||||||
| import { Connection } from "./events/Connection"; | import { Connection } from "./events/Connection"; | ||||||
| import Config from "./util/Config"; |  | ||||||
| 
 | 
 | ||||||
| // TODO: only listen/start the server if everything got initalized
 | // 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()
 | // https://www.npmjs.com/package/ws use "External HTTP/S server" and listen manually at the end of listen()
 | ||||||
| @ -37,8 +36,8 @@ export class Server { | |||||||
| 		// @ts-ignore
 | 		// @ts-ignore
 | ||||||
| 		await (db as Promise<Connection>); | 		await (db as Promise<Connection>); | ||||||
| 		await this.setupSchema(); | 		await this.setupSchema(); | ||||||
| 		console.log("[DB] connected"); |  | ||||||
| 		await Config.init(); | 		await Config.init(); | ||||||
|  | 		console.log("[DB] connected"); | ||||||
| 		console.log(`[Gateway] online on 0.0.0.0:${port}`); | 		console.log(`[Gateway] online on 0.0.0.0:${port}`); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ import { | |||||||
| 	UserModel, | 	UserModel, | ||||||
| 	toObject, | 	toObject, | ||||||
| 	EVENTEnum, | 	EVENTEnum, | ||||||
|  | 	Config, | ||||||
| } from "@fosscord/server-util"; | } from "@fosscord/server-util"; | ||||||
| import { setupListener } from "../listener/listener"; | import { setupListener } from "../listener/listener"; | ||||||
| import { IdentifySchema } from "../schema/Identify"; | import { IdentifySchema } from "../schema/Identify"; | ||||||
| @ -29,7 +30,8 @@ export async function onIdentify(this: WebSocket, data: Payload) { | |||||||
| 	const identify: IdentifySchema = data.d; | 	const identify: IdentifySchema = data.d; | ||||||
| 
 | 
 | ||||||
| 	try { | 	try { | ||||||
| 		var decoded = await checkToken(identify.token); // will throw an error if invalid
 | 		const { jwtSecret } = Config.get().security; | ||||||
|  | 		var decoded = await checkToken(identify.token, jwtSecret); // will throw an error if invalid
 | ||||||
| 	} catch (error) { | 	} catch (error) { | ||||||
| 		console.error("invalid token", error); | 		console.error("invalid token", error); | ||||||
| 		return this.close(CLOSECODES.Authentication_failed); | 		return this.close(CLOSECODES.Authentication_failed); | ||||||
|  | |||||||
| @ -73,10 +73,11 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { | |||||||
|         items.push({ |         items.push({ | ||||||
|             group: { |             group: { | ||||||
|                 count: role.members.length, |                 count: role.members.length, | ||||||
| 				id: role.id, |                 id: role.id === guild_id ? "online" : role.name | ||||||
| 			}, |             } | ||||||
|         }); |         }); | ||||||
|         for (const member of role.members) { |         for (const member of role.members) { | ||||||
|  |             member.roles.remove(guild_id); | ||||||
|             items.push({ member }); |             items.push({ member }); | ||||||
|         } |         } | ||||||
| 	} | 	} | ||||||
| @ -90,7 +91,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { | |||||||
| 				{ | 				{ | ||||||
| 					range: [0, 99], | 					range: [0, 99], | ||||||
| 					op: "SYNC", | 					op: "SYNC", | ||||||
| 					items: items, | 					items, | ||||||
| 				}, | 				}, | ||||||
| 			], | 			], | ||||||
| 			online_count: member_count, // TODO count online count
 | 			online_count: member_count, // TODO count online count
 | ||||||
|  | |||||||
| @ -1,21 +1,41 @@ | |||||||
|  | // @ts-nocheck
 | ||||||
| import { Config } from "@fosscord/server-util"; | import { Config } from "@fosscord/server-util"; | ||||||
| 
 | import { getConfigPathForFile } from "@fosscord/server-util/dist/util/Config"; | ||||||
| export default { | import Ajv, { JSONSchemaType } from "ajv"; | ||||||
| 	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, |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| export interface DefaultOptions { | export interface DefaultOptions { | ||||||
| 	endpoint?: string; | 	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<DefaultOptions>({ | ||||||
|  | 	path: configPath, | ||||||
|  | 	schemaValidator: validator, | ||||||
|  | 	schema: schema, | ||||||
|  | }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paul Munteanu
						Paul Munteanu