mirror of
https://github.com/balena-io/etcher.git
synced 2025-07-21 10:16:32 +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';
|
'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);
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user