Fix Invalid URL error
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user