|
|
@ -51,6 +51,7 @@ const config = require('./app/config');
|
|
|
|
// Very important to put before the single instance check, since it is based on the
|
|
|
|
// Very important to put before the single instance check, since it is based on the
|
|
|
|
// userData directory.
|
|
|
|
// userData directory.
|
|
|
|
const userConfig = require('./app/user_config');
|
|
|
|
const userConfig = require('./app/user_config');
|
|
|
|
|
|
|
|
const passwordUtil = require('./app/password_util');
|
|
|
|
|
|
|
|
|
|
|
|
const importMode =
|
|
|
|
const importMode =
|
|
|
|
process.argv.some(arg => arg === '--import') || config.get('import');
|
|
|
|
process.argv.some(arg => arg === '--import') || config.get('import');
|
|
|
@ -306,12 +307,6 @@ function createWindow() {
|
|
|
|
mainWindow.flashFrame(false);
|
|
|
|
mainWindow.flashFrame(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Ingested in preload.js via a sendSync call
|
|
|
|
|
|
|
|
ipc.on('locale-data', event => {
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
|
|
|
|
|
|
event.returnValue = locale.messages;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (config.environment === 'test') {
|
|
|
|
if (config.environment === 'test') {
|
|
|
|
mainWindow.loadURL(prepareURL([__dirname, 'test', 'index.html']));
|
|
|
|
mainWindow.loadURL(prepareURL([__dirname, 'test', 'index.html']));
|
|
|
|
} else if (config.environment === 'test-lib') {
|
|
|
|
} else if (config.environment === 'test-lib') {
|
|
|
@ -460,12 +455,6 @@ function showLauncher() {
|
|
|
|
|
|
|
|
|
|
|
|
captureClicks(launcherWindow);
|
|
|
|
captureClicks(launcherWindow);
|
|
|
|
|
|
|
|
|
|
|
|
// Ingested in preload.js via a sendSync call
|
|
|
|
|
|
|
|
ipc.on('locale-data', event => {
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
|
|
|
|
|
|
event.returnValue = locale.messages;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
launcherWindow.on('close', e => {
|
|
|
|
launcherWindow.on('close', e => {
|
|
|
|
// If the application is terminating, just do the default
|
|
|
|
// If the application is terminating, just do the default
|
|
|
|
if (
|
|
|
|
if (
|
|
|
@ -732,6 +721,19 @@ app.on('ready', async () => {
|
|
|
|
locale = loadLocale({ appLocale, logger });
|
|
|
|
locale = loadLocale({ appLocale, logger });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const key = getDefaultSQLKey();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If we have a password set then show the launcher
|
|
|
|
|
|
|
|
// Otherwise show the main window
|
|
|
|
|
|
|
|
const passHash = userConfig.get('passHash');
|
|
|
|
|
|
|
|
if (passHash) {
|
|
|
|
|
|
|
|
showLauncher();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
await showMainWindow(key);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getDefaultSQLKey() {
|
|
|
|
let key = userConfig.get('key');
|
|
|
|
let key = userConfig.get('key');
|
|
|
|
if (!key) {
|
|
|
|
if (!key) {
|
|
|
|
console.log(
|
|
|
|
console.log(
|
|
|
@ -742,15 +744,8 @@ app.on('ready', async () => {
|
|
|
|
userConfig.set('key', key);
|
|
|
|
userConfig.set('key', key);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// If we have a password set then show the launcher
|
|
|
|
return key;
|
|
|
|
// Otherwise show the main window
|
|
|
|
}
|
|
|
|
const passHash = userConfig.get('passHash');
|
|
|
|
|
|
|
|
if (!passHash) {
|
|
|
|
|
|
|
|
showLauncher();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
await showMainWindow(key);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function showMainWindow(sqlKey) {
|
|
|
|
async function showMainWindow(sqlKey) {
|
|
|
|
const userDataPath = await getRealPath(app.getPath('userData'));
|
|
|
|
const userDataPath = await getRealPath(app.getPath('userData'));
|
|
|
@ -908,6 +903,12 @@ app.on('web-contents-created', (createEvent, contents) => {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Ingested in preload.js via a sendSync call
|
|
|
|
|
|
|
|
ipc.on('locale-data', event => {
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
|
|
|
|
|
|
event.returnValue = locale.messages;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
ipc.on('set-badge-count', (event, count) => {
|
|
|
|
ipc.on('set-badge-count', (event, count) => {
|
|
|
|
app.setBadgeCount(count);
|
|
|
|
app.setBadgeCount(count);
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -961,6 +962,31 @@ ipc.on('update-tray-icon', (event, unreadCount) => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Launch screen related IPC calls
|
|
|
|
|
|
|
|
ipc.on('launcher-login', async (event, passPhrase) => {
|
|
|
|
|
|
|
|
const sendError = (e) => event.sender.send('launcher-login-response', e);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Check if the phrase matches with the hash we have stored
|
|
|
|
|
|
|
|
const hash = userConfig.get('passHash');
|
|
|
|
|
|
|
|
const hashMatches = passPhrase && passwordUtil.matchesHash(passPhrase, hash);
|
|
|
|
|
|
|
|
if (hash && !hashMatches) {
|
|
|
|
|
|
|
|
sendError('Invalid password');
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If we don't have a hash then use the default sql key to unlock the db
|
|
|
|
|
|
|
|
const key = hash ? passPhrase : getDefaultSQLKey();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
await showMainWindow(key);
|
|
|
|
|
|
|
|
if (launcherWindow) {
|
|
|
|
|
|
|
|
launcherWindow.close();
|
|
|
|
|
|
|
|
launcherWindow = null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
sendError('Failed to decrypt SQL database');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Debug Log-related IPC calls
|
|
|
|
// Debug Log-related IPC calls
|
|
|
|
|
|
|
|
|
|
|
|
ipc.on('show-debug-log', showDebugLogWindow);
|
|
|
|
ipc.on('show-debug-log', showDebugLogWindow);
|
|
|
|