From bd7d6b2f2ebce4578660cef7d6b6d807ae8ea6ba Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:29:05 +0200 Subject: [PATCH] [feature] Enable cookie encryption --- .erb/scripts/after-pack.js | 5 +++ .erb/scripts/fuse-electron.js | 36 ++++++++++++++++++ package-lock.json | 69 +++++++++++++++++++++++++++-------- package.json | 2 + 4 files changed, 97 insertions(+), 15 deletions(-) create mode 100644 .erb/scripts/after-pack.js create mode 100644 .erb/scripts/fuse-electron.js diff --git a/.erb/scripts/after-pack.js b/.erb/scripts/after-pack.js new file mode 100644 index 00000000..7b4d9e59 --- /dev/null +++ b/.erb/scripts/after-pack.js @@ -0,0 +1,5 @@ +const { fuseElectron } = require("./fuse-electron") + +exports.afterPack = async function afterPack(context) { + await fuseElectron(context); +} \ No newline at end of file diff --git a/.erb/scripts/fuse-electron.js b/.erb/scripts/fuse-electron.js new file mode 100644 index 00000000..45240aaf --- /dev/null +++ b/.erb/scripts/fuse-electron.js @@ -0,0 +1,36 @@ +/// const { AfterPackContext } = require("electron-builder"); +const { flipFuses, FuseVersion, FuseV1Options } = require('@electron/fuses'); +const path = require("path"); + +exports.fuseElectron = async function fuseElectron({ + appOutDir, + packager, + electronPlatformName, +}){ + + const { productFilename } = packager.appInfo; + + const target = (() => { + switch (electronPlatformName) { + case "darwin": + return `${productFilename}.app`; + case "win32": + return `${productFilename}.exe`; + case "linux": + // Sadly, `LinuxPackager` type is not exported by electron-builder so we have to improvise + return packager.executableName; + default: + throw new Error(`Unsupported platform: ${electronPlatformName}`); + } + })(); + + const electron = path.join(appOutDir, target); + + console.log(`Fusing electron at ${electron}`); + + return flipFuses(electron, { + version: FuseVersion.V1, + [FuseV1Options.EnableCookieEncryption]: true, + }); + +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c38d4c57..087e4a2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { + "@electron/fuses": "^1.6.2", "@node-steam/vdf": "^2.2.0", "@tippyjs/react": "^4.2.6", "archiver": "^6.0.1", @@ -820,6 +821,33 @@ "node": ">= 6" } }, + "node_modules/@electron/fuses": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.6.2.tgz", + "integrity": "sha512-qInBOs+m21oCLwN2ASHsHqNgI45trsgSiDEYQTw3qsTfwveEUb+WRgh0sYfVXsekqr8X2qvHX9OyVc1w+Lo8NQ==", + "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/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@electron/get": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", @@ -3767,7 +3795,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4143,7 +4170,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -4938,7 +4964,6 @@ "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" @@ -9564,7 +9589,6 @@ "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" } @@ -13305,7 +13329,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17171,7 +17194,6 @@ "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" }, @@ -19683,6 +19705,29 @@ } } }, + "@electron/fuses": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.6.2.tgz", + "integrity": "sha512-qInBOs+m21oCLwN2ASHsHqNgI45trsgSiDEYQTw3qsTfwveEUb+WRgh0sYfVXsekqr8X2qvHX9OyVc1w+Lo8NQ==", + "requires": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, "@electron/get": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", @@ -22087,7 +22132,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -22397,8 +22441,7 @@ "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "atomically": { "version": "1.7.0", @@ -23004,7 +23047,6 @@ "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" @@ -26417,8 +26459,7 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.0", @@ -29365,8 +29406,7 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "minipass": { "version": "3.3.4", @@ -32185,7 +32225,6 @@ "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" } diff --git a/package.json b/package.json index 32a9282a..79f20ef5 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "package.json" ], "afterSign": ".erb/scripts/notarize.js", + "afterPack": ".erb/scripts/after-pack.js", "mac": { "target": { "target": "default", @@ -228,6 +229,7 @@ "webpack-merge": "^5.8.0" }, "dependencies": { + "@electron/fuses": "^1.6.2", "@node-steam/vdf": "^2.2.0", "@tippyjs/react": "^4.2.6", "archiver": "^6.0.1",