[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 <guivaya@gmail.com>
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
This commit is contained in:
Devin Binnie 2021-09-09 15:32:34 -04:00 committed by GitHub
parent ed57722086
commit 54d82493bf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 128 additions and 11 deletions

90
package-lock.json generated
View file

@ -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",

View file

@ -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",

View file

@ -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));
}
};