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'; 'use strict';
const electron = require('electron'); const Bluebird = require('bluebird');
const isElevated = require('is-elevated'); const isElevated = Bluebird.promisify(require('is-elevated'));
const sudoPrompt = require('sudo-prompt'); const sudoPrompt = Bluebird.promisifyAll(require('sudo-prompt'));
const os = require('os'); const platform = require('os').platform();
const platform = os.platform();
const packageJSON = require('../package.json');
exports.require = function(app, callback) { exports.require = function(app, applicationName, callback) {
isElevated(function(error, elevated) { return isElevated().then(function(elevated) {
if (error) {
return callback(error);
}
if (elevated) { if (elevated) {
return callback(); return;
} }
if (!elevated) { return Bluebird.try(function() {
if (platform === 'darwin') { if (platform === 'darwin') {
// Keep parent process hidden // Keep parent process hidden
app.dock.hide(); app.dock.hide();
sudoPrompt.exec(process.argv.join(' '), { return sudoPrompt.execAsync(process.argv.join(' '), {
name: packageJSON.displayName name: applicationName
}, function(error) {
if (error) {
return callback(error);
}
// Don't keep the original parent process alive
process.exit(0);
}); });
} 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 electron = require('electron');
const path = require('path'); const path = require('path');
const elevate = require('./elevate'); const elevate = require('./elevate');
const packageJSON = require('../package.json');
let mainWindow = null; let mainWindow = null;
electron.app.on('window-all-closed', electron.app.quit); electron.app.on('window-all-closed', electron.app.quit);
@ -28,7 +29,7 @@ electron.app.on('ready', function() {
// No menu bar // No menu bar
electron.Menu.setApplicationMenu(null); electron.Menu.setApplicationMenu(null);
elevate.require(electron.app, function(error) { elevate.require(electron.app, packageJSON.displayName, function(error) {
if (error) { if (error) {
electron.dialog.showErrorBox('Elevation Error', error.message); electron.dialog.showErrorBox('Elevation Error', error.message);