Files
fluxer/fluxer_desktop/src/main/PrivilegedRendererDocuments.ts
T

36 lines
955 B
TypeScript

// SPDX-License-Identifier: AGPL-3.0-or-later
import {isTrustedOrigin} from '@electron/main/Window';
import type {IpcMainInvokeEvent} from 'electron';
export class UntrustedRendererDocumentSenderError extends Error {
public constructor(channel: string) {
super(`${channel} is only reachable from a trusted top-level renderer document`);
this.name = 'UntrustedRendererDocumentSenderError';
}
}
function isPrivilegedRendererDocumentSender(event: IpcMainInvokeEvent): boolean {
const frame = event.senderFrame;
if (frame == null) {
return false;
}
try {
if (frame.detached) {
return false;
}
if (frame.parent != null) {
return false;
}
return isTrustedOrigin(frame.url);
} catch {
return false;
}
}
export function requirePrivilegedRendererDocumentSender(event: IpcMainInvokeEvent, channel: string): void {
if (!isPrivilegedRendererDocumentSender(event)) {
throw new UntrustedRendererDocumentSenderError(channel);
}
}