This repository has been archived on 2025-09-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
repertory-ui/src/renderer/ipc/UpgradeIPC.js
2021-08-04 17:17:16 -05:00

122 lines
3.1 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};