Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev/post refactor fixes #927

Merged
merged 11 commits into from
Jan 12, 2023
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ build
*.log.ansi
*.tmp
tmp/
dump/
Empty file modified .husky/pre-commit
100644 → 100755
Empty file.
3 changes: 3 additions & 0 deletions src/api/middlewares/Authentication.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NextFunction, Request, Response } from "express";
import { HTTPError } from "lambert-server";
import { checkToken, Config, Rights } from "@fosscord/util";
import * as Sentry from "@sentry/node";

export const NO_AUTHORIZATION_ROUTES = [
// Authentication routes
Expand Down Expand Up @@ -63,6 +64,8 @@ export async function Authentication(
if (!req.headers.authorization)
return next(new HTTPError("Missing Authorization Header", 401));

Sentry.setUser({ id: req.user_id });
MaddyUnderStars marked this conversation as resolved.
Show resolved Hide resolved

try {
const { jwtSecret } = Config.get().security;

Expand Down
6 changes: 5 additions & 1 deletion src/gateway/events/Connection.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import WS from "ws";
import { WebSocket } from "@fosscord/gateway";
import { genSessionId, WebSocket } from "@fosscord/gateway";
import { Send } from "../util/Send";
import { CLOSECODES, OPCODES } from "../util/Constants";
import { setHeartbeat } from "../util/Heartbeat";
Expand Down Expand Up @@ -30,6 +30,10 @@ export async function Connection(

socket.ipAddress = ipAddress;

//Create session ID when the connection is opened. This allows gateway dump to group the initial websocket messages with the rest of the conversation.
const session_id = genSessionId();
socket.session_id = session_id; //Set the session of the WebSocket object
MaddyUnderStars marked this conversation as resolved.
Show resolved Hide resolved

try {
// @ts-ignore
socket.on("close", Close);
Expand Down
17 changes: 17 additions & 0 deletions src/gateway/events/Message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import WS from "ws";
import { PayloadSchema } from "@fosscord/util";
import * as Sentry from "@sentry/node";
import BigIntJson from "json-bigint";
import path from "path";
import fs from "fs/promises";
const bigIntJson = BigIntJson({ storeAsString: true });

var erlpack: any;
Expand Down Expand Up @@ -41,6 +43,21 @@ export async function Message(this: WebSocket, buffer: WS.Data) {
if (process.env.WS_VERBOSE)
console.log(`[Websocket] Incomming message: ${JSON.stringify(data)}`);

if (process.env.WS_DUMP) {
const id = this.session_id || "unknown";

await fs.mkdir(path.join("dump", this.session_id), { recursive: true });
await fs.writeFile(
path.join("dump", this.session_id, `${Date.now()}.in.json`),
JSON.stringify(data, null, 2),
);

if (!this.session_id)
console.log(
"[Gateway] Unknown session id, dumping to unknown folder",
);
}

check.call(this, PayloadSchema, data);

// @ts-ignore
Expand Down
4 changes: 1 addition & 3 deletions src/gateway/opcodes/Identify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@ export async function onIdentify(this: WebSocket, data: Payload) {
return this.close(CLOSECODES.Authentication_failed);
}
this.user_id = decoded.id;

const session_id = genSessionId();
this.session_id = session_id; //Set the session of the WebSocket object
let session_id = this.session_id;

const [user, read_states, members, recipients, session, application] =
await Promise.all([
Expand Down
19 changes: 19 additions & 0 deletions src/gateway/util/Send.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,27 @@ try {
);
}
import { Payload, WebSocket } from "@fosscord/gateway";
import fs from "fs/promises";
import path from "path";

export function Send(socket: WebSocket, data: Payload) {
if (process.env.WS_VERBOSE)
console.log(`[Websocket] Outgoing message: ${JSON.stringify(data)}`);

if (process.env.WS_DUMP) {
const id = socket.session_id || "unknown";

(async () => {
await fs.mkdir(path.join("dump", id), {
recursive: true,
});
await fs.writeFile(
path.join("dump", id, `${Date.now()}.out.json`),
JSON.stringify(data, null, 2),
);
})();
}

let buffer: Buffer | string;
if (socket.encoding === "etf") buffer = erlpack.pack(data);
// TODO: encode circular object
Expand Down
2 changes: 1 addition & 1 deletion src/util/util/AutoUpdate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ async function download(url: string, dir: string) {
const response = await fetch(url, { agent });
const buffer = await response.buffer();
const tempDir = await fs.mkdtemp("fosscord");
fs.writeFile(path.join(tempDir, "Fosscord.zip"), buffer);
await fs.writeFile(path.join(tempDir, "Fosscord.zip"), buffer);
} catch (error) {
console.error(`[Auto Update] download failed`, error);
}
Expand Down
12 changes: 8 additions & 4 deletions src/util/util/Config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { ConfigEntity } from "../entities/Config";
import fs from "fs";
import fs from "fs/promises";
import syncFs from "fs";
import { ConfigValue } from "../config";

// TODO: yaml instead of json
Expand Down Expand Up @@ -31,11 +32,14 @@ export const Config = {
);
try {
const overrideConfig = JSON.parse(
fs.readFileSync(overridePath, { encoding: "utf8" }),
await fs.readFile(overridePath, { encoding: "utf8" }),
);
config = overrideConfig.merge(config);
} catch (error) {
fs.writeFileSync(overridePath, JSON.stringify(config, null, 4));
await fs.writeFile(
overridePath,
JSON.stringify(config, null, 4),
);
}
}

Expand Down Expand Up @@ -79,7 +83,7 @@ function applyConfig(val: ConfigValue) {
}

if (process.env.CONFIG_PATH)
fs.writeFileSync(overridePath, JSON.stringify(val, null, 4));
syncFs.writeFileSync(overridePath, JSON.stringify(val, null, 4));

return apply(val);
}
Expand Down