From 54d82493bff095db9c27cc0613e4929ade6f934c Mon Sep 17 00:00:00 2001 From: Devin Binnie <52460000+devinbinnie@users.noreply.github.com> Date: Thu, 9 Sep 2021 15:32:34 -0400 Subject: [PATCH] [MM-35483] Flip fuses on ELECTRON_RUN_AS_NODE (#1717) * upgrade electron to 12, add fuses * Fix error on linux afterpack * Merge'd * Update package-lock.json * Edit afterpack.js * Remove console statement Co-authored-by: Guillermo Vaya Co-authored-by: Mattermod --- package-lock.json | 90 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- scripts/afterpack.js | 46 +++++++++++++++++----- 3 files changed, 128 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 53bb1c21..cd97cb4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "@babel/preset-env": "^7.2.0", "@babel/preset-react": "^7.10.4", "@babel/register": "^7.0.0", + "@electron/fuses": "^1.4.0", "@storybook/addon-actions": "^6.2.9", "@storybook/react": "^6.2.9", "@types/auto-launch": "^5.0.1", @@ -2036,6 +2037,57 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@electron/fuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.4.0.tgz", + "integrity": "sha512-3h7tkzBxziz2zYI+b1c3/NPVUetrZtRcjqroQ4MZ4ZNfIJ98znyHhUl3oMDDg5ErogtpWOs3+REt3c8oKgXwHw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@electron/fuses/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@electron/fuses/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@electron/get": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", @@ -29758,6 +29810,44 @@ "ajv-keywords": "^3.4.1" } }, + "@electron/fuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.4.0.tgz", + "integrity": "sha512-3h7tkzBxziz2zYI+b1c3/NPVUetrZtRcjqroQ4MZ4ZNfIJ98znyHhUl3oMDDg5ErogtpWOs3+REt3c8oKgXwHw==", + "dev": true, + "requires": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@electron/get": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", diff --git a/package.json b/package.json index f25715bd..3c2cddb6 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "url": "git://github.com/mattermost/desktop.git" }, "config": { - "target": "12.0.1", + "target": "13.2.0", "arch": "x64", "target_arch": "x64", "disturl": "https://electronjs.org/headers", @@ -64,6 +64,7 @@ "@babel/preset-env": "^7.2.0", "@babel/preset-react": "^7.10.4", "@babel/register": "^7.0.0", + "@electron/fuses": "^1.4.0", "@storybook/addon-actions": "^6.2.9", "@storybook/react": "^6.2.9", "@types/auto-launch": "^5.0.1", diff --git a/scripts/afterpack.js b/scripts/afterpack.js index 0f89dfc6..23919a11 100644 --- a/scripts/afterpack.js +++ b/scripts/afterpack.js @@ -7,17 +7,43 @@ const {spawn} = require('electron-notarize/lib/spawn.js'); const SETUID_PERMISSIONS = '4755'; -exports.default = async function afterPack(context) { - if (context.electronPlatformName === 'linux') { - context.targets.forEach(async (target) => { - if (!['appimage', 'snap'].includes(target.name.toLowerCase())) { - const result = await spawn('chmod', [SETUID_PERMISSIONS, path.join(context.appOutDir, 'chrome-sandbox')]); - if (result.code !== 0) { - throw new Error( - `Failed to set proper permissions for linux arch on ${target.name}`, - ); - } +const {flipFuses, FuseVersion, FuseV1Options} = require('@electron/fuses'); + +function fixSetuid(context) { + return async (target) => { + if (!['appimage', 'snap'].includes(target.name.toLowerCase())) { + const result = await spawn('chmod', [SETUID_PERMISSIONS, path.join(context.appOutDir, 'chrome-sandbox')]); + if (result.code !== 0) { + throw new Error( + `Failed to set proper permissions for linux arch on ${target.name}`, + ); } + } + }; +} + +function getAppFileName(context) { + switch (context.electronPlatformName) { + case 'win32': + return 'Mattermost.exe'; + case 'darwin': + return 'Mattermost.app'; + case 'linux': + return context.packager.executableName; + default: + return ''; + } +} + +exports.default = async function afterPack(context) { + await flipFuses( + `${context.appOutDir}/${getAppFileName(context)}`, // Returns the path to the electron binary + { + version: FuseVersion.V1, + [FuseV1Options.RunAsNode]: false, // Disables ELECTRON_RUN_AS_NODE }); + + if (context.electronPlatformName === 'linux') { + context.targets.forEach(fixSetuid(context)); } };