mirror of
https://github.com/balena-io/etcher.git
synced 2025-04-24 07:17:18 +00:00
Refactor initial elevation routine (#341)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
This commit is contained in:
parent
284f2a0ebb
commit
ed70e4e590
@ -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);
|
||||
};
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user