Fix Invalid URL error

This commit is contained in:
Vendicated
2025-05-16 20:48:34 +02:00
parent 1a673f2318
commit bb3cec0d13

View File

@@ -8,25 +8,33 @@ import { ipcMain, IpcMainEvent, IpcMainInvokeEvent, WebFrameMain } from "electro
import { DISCORD_HOSTNAMES } from "main/constants"; import { DISCORD_HOSTNAMES } from "main/constants";
import { IpcEvents } from "shared/IpcEvents"; import { IpcEvents } from "shared/IpcEvents";
export function validateSender(frame: WebFrameMain | null) { export function validateSender(frame: WebFrameMain | null, event: string) {
if (!frame) throw new Error("ipc: No sender frame"); if (!frame) throw new Error(`ipc[${event}]: No sender frame`);
if (!frame.url) return;
try {
var { hostname, protocol } = new URL(frame.url);
} catch (e) {
throw new Error(`ipc[${event}]: Invalid URL ${frame.url}`);
}
const { hostname, protocol } = new URL(frame.url);
if (protocol === "file:") return; if (protocol === "file:") return;
if (!DISCORD_HOSTNAMES.includes(hostname)) throw new Error("ipc: Disallowed host " + hostname); if (!DISCORD_HOSTNAMES.includes(hostname)) {
throw new Error(`ipc[${event}]: Disallowed hostname ${hostname}`);
}
} }
export function handleSync(event: IpcEvents, cb: (e: IpcMainEvent, ...args: any[]) => any) { export function handleSync(event: IpcEvents, cb: (e: IpcMainEvent, ...args: any[]) => any) {
ipcMain.on(event, (e, ...args) => { ipcMain.on(event, (e, ...args) => {
validateSender(e.senderFrame); validateSender(e.senderFrame, event);
e.returnValue = cb(e, ...args); e.returnValue = cb(e, ...args);
}); });
} }
export function handle(event: IpcEvents, cb: (e: IpcMainInvokeEvent, ...args: any[]) => any) { export function handle(event: IpcEvents, cb: (e: IpcMainInvokeEvent, ...args: any[]) => any) {
ipcMain.handle(event, (e, ...args) => { ipcMain.handle(event, (e, ...args) => {
validateSender(e.senderFrame); validateSender(e.senderFrame, event);
return cb(e, ...args); return cb(e, ...args);
}); });
} }