Refactor initial elevation routine (#341)

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
This commit is contained in:
Juan Cruz Viotti 2016-04-19 09:40:25 -04:00
parent 284f2a0ebb
commit ed70e4e590
2 changed files with 27 additions and 44 deletions

View File

@ -16,59 +16,41 @@
'use strict';
const electron = require('electron');
const isElevated = require('is-elevated');
const sudoPrompt = require('sudo-prompt');
const os = require('os');
const platform = os.platform();
const packageJSON = require('../package.json');
const Bluebird = require('bluebird');
const isElevated = Bluebird.promisify(require('is-elevated'));
const sudoPrompt = Bluebird.promisifyAll(require('sudo-prompt'));
const platform = require('os').platform();
exports.require = function(app, callback) {
isElevated(function(error, elevated) {
if (error) {
return callback(error);
}
exports.require = function(app, applicationName, callback) {
return isElevated().then(function(elevated) {
if (elevated) {
return callback();
return;
}
if (!elevated) {
return Bluebird.try(function() {
if (platform === 'darwin') {
// Keep parent process hidden
app.dock.hide();
sudoPrompt.exec(process.argv.join(' '), {
name: packageJSON.displayName
}, function(error) {
if (error) {
return callback(error);
}
// Don't keep the original parent process alive
process.exit(0);
return sudoPrompt.execAsync(process.argv.join(' '), {
name: applicationName
});
} else if (platform === 'win32') {
const elevator = require('elevator');
elevator.execute(process.argv, {}, function(error) {
if (error) {
return callback(error);
}
// Don't keep the original parent process alive
process.exit(0);
});
} else {
electron.dialog.showErrorBox(
'You don\'t have enough permissions',
'Please run this application as root or administrator'
);
process.exit(1);
}
}
});
if (platform === 'win32') {
const elevator = Bluebird.promisifyAll(require('elevator'));
return elevator.executeAsync(process.argv, {});
}
throw new Error('Please run this application as root or administrator');
}).then(function() {
// Don't keep the original parent process alive
process.exit(0);
});
}).nodeify(callback);
};

View File

@ -19,6 +19,7 @@
const electron = require('electron');
const path = require('path');
const elevate = require('./elevate');
const packageJSON = require('../package.json');
let mainWindow = null;
electron.app.on('window-all-closed', electron.app.quit);
@ -28,7 +29,7 @@ electron.app.on('ready', function() {
// No menu bar
electron.Menu.setApplicationMenu(null);
elevate.require(electron.app, function(error) {
elevate.require(electron.app, packageJSON.displayName, function(error) {
if (error) {
electron.dialog.showErrorBox('Elevation Error', error.message);