117 lines
3.0 KiB
JavaScript
117 lines
3.0 KiB
JavaScript
const Constants = require('../../constants');
|
|
const fs = require('fs');
|
|
const helpers = require('../../helpers');
|
|
const os = require('os');
|
|
|
|
const addListeners = (ipcMain, {setIsInstalling, unmountAllDrives, standardIPCReply}) => {
|
|
ipcMain.on(Constants.IPC_Install_Upgrade, (event, data) => {
|
|
let allowSkipVerification = true;
|
|
|
|
unmountAllDrives();
|
|
|
|
let tempSig;
|
|
let tempPub;
|
|
const cleanupFiles = () => {
|
|
try {
|
|
if (tempSig) {
|
|
fs.unlinkSync(tempSig);
|
|
}
|
|
if (tempPub) {
|
|
fs.unlinkSync(tempPub);
|
|
}
|
|
} catch (e) {
|
|
}
|
|
};
|
|
|
|
const errorHandler = err => {
|
|
cleanupFiles();
|
|
setIsInstalling(false);
|
|
standardIPCReply(event, Constants.IPC_Install_Upgrade_Reply, {
|
|
AllowSkipVerification: allowSkipVerification,
|
|
Source: data.Source,
|
|
}, err);
|
|
};
|
|
|
|
// TODO Enable verification in 1.0.4
|
|
const hasSignature = false;//!data.SkipVerification && data.Signature && (data.Signature.length > 0);
|
|
const hasHash = false;//!data.SkipVerification && data.Sha256 && (data.Sha256.length > 0);
|
|
if (hasSignature) {
|
|
try {
|
|
const files = helpers.createSignatureFiles(data.Signature, Constants.DEV_PUBLIC_KEY);
|
|
tempPub = files.PublicKeyFile;
|
|
tempSig = files.SignatureFile;
|
|
} catch (e) {
|
|
errorHandler(e);
|
|
return;
|
|
}
|
|
}
|
|
|
|
let command;
|
|
let args;
|
|
const platform = os.platform();
|
|
if (platform === 'win32') {
|
|
command = data.Source;
|
|
} else if (platform === 'darwin') {
|
|
command = 'open';
|
|
args = ['-a', 'Finder', data.Source];
|
|
} else if (platform === 'linux') {
|
|
try {
|
|
command = data.Source;
|
|
fs.chmodSync(command, '750');
|
|
} catch (e) {
|
|
errorHandler(e);
|
|
}
|
|
} else {
|
|
errorHandler(Error('Platform not supported: ' + os.platform()));
|
|
}
|
|
|
|
if (command) {
|
|
const executeInstall = () => {
|
|
setIsInstalling(true);
|
|
helpers
|
|
.executeAsync(command, args)
|
|
.then(() => {
|
|
cleanupFiles();
|
|
standardIPCReply(event, Constants.IPC_Install_Upgrade_Reply)
|
|
})
|
|
.catch(error => {
|
|
setIsInstalling(false);
|
|
errorHandler(error);
|
|
});
|
|
};
|
|
|
|
if (hasSignature) {
|
|
helpers
|
|
.verifySignature(data.Source, tempSig, tempPub)
|
|
.then(() => {
|
|
executeInstall();
|
|
})
|
|
.catch(() => {
|
|
errorHandler(Error('Failed to verify installation package signature'));
|
|
});
|
|
} else if (hasHash) {
|
|
helpers
|
|
.verifyHash(data.Source, data.Sha256)
|
|
.then(()=> {
|
|
executeInstall();
|
|
})
|
|
.catch(() => {
|
|
errorHandler(Error('Failed to verify installation package hash'));
|
|
});
|
|
} else {
|
|
if (platform === 'darwin') {
|
|
setTimeout(executeInstall, 3000);
|
|
} else {
|
|
executeInstall();
|
|
}
|
|
}
|
|
} else {
|
|
errorHandler(Error('Unsupported upgrade: ' + data.Source));
|
|
}
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
addListeners
|
|
};
|