diff --git a/eslint.config.mjs b/eslint.config.mjs index fce7e8c86a..aba11a8b8f 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -222,4 +222,22 @@ export default defineConfig([ '**/.react-router/*', ], }, + // Main process ESLint rules + { + files: ['packages/insomnia/src/main/**/*.{ts,tsx,js,mjs}'], + rules: { + 'no-restricted-globals': [ + 'error', + // block usage of browser globals in main process code + { + name: 'window', + message: '"window" is not available in main process.', + }, + { + name: 'document', + message: '"document" is not available in main process.', + }, + ], + }, + }, ]); diff --git a/packages/insomnia/src/main/secure-read-file.ts b/packages/insomnia/src/main/secure-read-file.ts index 8e78db35c9..d5fe4f76a5 100644 --- a/packages/insomnia/src/main/secure-read-file.ts +++ b/packages/insomnia/src/main/secure-read-file.ts @@ -16,8 +16,7 @@ export const isPathAllowed = (filePath: string, userAllowList: string[]) => { }; const securePath = (filePath: string) => path.resolve(decodeURIComponent(filePath)); const getSecuredFolderAllowList = (userAllowList: string[]) => { - const userDataPath = process.type === 'renderer' ? window.app.getPath('userData') : electron.app.getPath('userData'); - const userdataDirectory = process.env.INSOMNIA_DATA_PATH || userDataPath; + const userdataDirectory = process.env.INSOMNIA_DATA_PATH || electron.app.getPath('userData'); // we use tmpdir for buildMultipart // we put the db in userData // the user can also specifiy other folders diff --git a/packages/insomnia/src/main/window-utils.ts b/packages/insomnia/src/main/window-utils.ts index dccb027443..e596c3e9ff 100644 --- a/packages/insomnia/src/main/window-utils.ts +++ b/packages/insomnia/src/main/window-utils.ts @@ -610,7 +610,10 @@ export function createWindow(): ElectronBrowserWindow { }, { label: `R${MNEMONIC_SYM}estart`, - click: window?.main.restart, + click: () => { + app.relaunch(); + app.exit(); + }, }, { label: `Set window for ${MNEMONIC_SYM}FHD Screenshot`, diff --git a/packages/insomnia/src/templating/base-extension.ts b/packages/insomnia/src/templating/base-extension.ts index 1a0028430e..f5e0583324 100644 --- a/packages/insomnia/src/templating/base-extension.ts +++ b/packages/insomnia/src/templating/base-extension.ts @@ -8,7 +8,6 @@ import { jarFromCookies } from '~/common/cookies'; import { getBodyBuffer } from '~/models/helpers/response-operations'; import { database as db } from '../common/database'; -import { secureReadFile } from '../main/secure-read-file'; import * as models from '../models/index'; import type { Request } from '../models/request'; import type { RequestGroup } from '../models/request-group'; @@ -122,9 +121,7 @@ export default class BaseExtension { userInfo: os.userInfo(), }; }, - readFile: async (path: string) => { - return secureReadFile(path); - }, + readFile: async (path: string) => window.main.secureReadFile({ path }), decode: async (buffer: Buffer, encoding = 'utf8') => iconv.decode(buffer, encoding), encode: async (input: string, encoding: BinaryToTextEncoding) => crypto.createHash('md5').update(input).digest(encoding),