@electron/fuses
Version:
Flip Electron Fuses and customize your packaged build of Electron
146 lines • 6.03 kB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk = require("chalk");
const minimist = require("minimist");
const path = require("path");
const _1 = require(".");
const config_1 = require("./config");
const constants_1 = require("./constants");
const mode = process.argv[2];
const readHelpText = `electron-fuses read --app [path-to-app]`;
const writeHelpText = `electron-fuses write --app [path-to-app] <...key=on/off>`;
if (mode !== 'read' && mode !== 'write') {
console.error('Invalid mode, check the usage below:');
console.info(readHelpText);
console.info(writeHelpText);
process.exit(0);
}
function stringForState(state) {
switch (state) {
case constants_1.FuseState.ENABLE:
return chalk.green('Enabled');
case constants_1.FuseState.DISABLE:
return chalk.red('Disabled');
case constants_1.FuseState.INHERIT:
return chalk.yellow('Inherited');
case constants_1.FuseState.REMOVED:
return chalk.strikethrough(chalk.red('Removed'));
}
}
if (mode === 'read') {
const argv = minimist(process.argv.slice(3), {
string: ['app'],
boolean: ['help'],
});
if (argv.help) {
console.log(readHelpText);
process.exit(0);
}
if (!argv.app) {
console.error('--app argument is required');
process.exit(1);
}
console.log('Analyzing app:', chalk.cyan(path.basename(argv.app)));
(0, _1.getCurrentFuseWire)(argv.app)
.then((config) => {
const { version, resetAdHocDarwinSignature, strictlyRequireAllFuses } = config, rest = __rest(config, ["version", "resetAdHocDarwinSignature", "strictlyRequireAllFuses"]);
console.log(`Fuse Version: ${chalk.cyan(`v${version}`)}`);
switch (config.version) {
case config_1.FuseVersion.V1:
for (const key of Object.keys(rest)) {
console.log(` ${chalk.yellow(config_1.FuseV1Options[key])} is ${stringForState(rest[key])}`);
}
break;
}
})
.catch((err) => {
console.error(err);
process.exit(1);
});
}
else {
const argv = minimist(process.argv.slice(3), {
string: ['app'],
boolean: ['help'],
});
if (argv.help) {
console.log(writeHelpText);
process.exit(0);
}
if (!argv.app) {
console.error('--app argument is required');
process.exit(1);
}
console.log('Analyzing app:', chalk.cyan(path.basename(argv.app)));
(0, _1.getCurrentFuseWire)(argv.app)
.then((config) => {
const { version, resetAdHocDarwinSignature } = config, rest = __rest(config, ["version", "resetAdHocDarwinSignature"]);
console.log(`Fuse Version: ${chalk.cyan(`v${version}`)}`);
const keyPairs = argv._ || [];
for (const keyPair of keyPairs) {
const [key, state] = keyPair.split('=');
if (!key || !state) {
console.error('Invalid fuse:', keyPair);
console.error('Must be in the format FuseName=on/off');
process.exit(1);
}
if (state !== 'on' && state !== 'off') {
console.error('Invalid fuse state:', chalk.yellow(keyPair));
console.error(`Fuses can only be set to the "${chalk.green('on')}" or "${chalk.red('off')}" state`);
process.exit(1);
}
switch (config.version) {
case config_1.FuseVersion.V1:
const validFuseNames = Object.keys(config_1.FuseV1Options).filter((k) => !/^[0-9]+$/.test(k));
if (!validFuseNames.includes(key)) {
console.error('Invalid fuse name', chalk.yellow(key));
console.error('Expected name to be one of', chalk.yellow(JSON.stringify(validFuseNames)));
process.exit(1);
}
const currentState = config[config_1.FuseV1Options[key]];
const newState = state === 'on' ? constants_1.FuseState.ENABLE : constants_1.FuseState.DISABLE;
if (currentState === newState) {
console.log(` ${chalk.yellow(key)} is already ${stringForState(currentState)} and will not be changed`);
}
else {
console.log(` ${chalk.yellow(key)} is ${stringForState(currentState)} and will become ${stringForState(newState)}`);
}
config[config_1.FuseV1Options[key]] = newState;
break;
}
}
console.log('Writing to app:', chalk.cyan(path.basename(argv.app)));
function adaptConfig(config) {
const { version, resetAdHocDarwinSignature } = config, rest = __rest(config, ["version", "resetAdHocDarwinSignature"]);
const fuseConfig = {
version,
resetAdHocDarwinSignature,
};
for (const key of Object.keys(rest)) {
fuseConfig[key] = rest[key] === constants_1.FuseState.ENABLE;
}
return fuseConfig;
}
return (0, _1.flipFuses)(argv.app, adaptConfig(config));
})
.then(() => {
console.log(chalk.green('Fuses written to disk'));
})
.catch((err) => {
console.error(err);
process.exit(1);
});
}
//# sourceMappingURL=bin.js.map
;