2015-10-17 23:49:24 +02:00
|
|
|
'use strict';
|
|
|
|
|
2017-01-31 07:50:28 +01:00
|
|
|
const AppModel = require('./models/app-model');
|
|
|
|
const AppView = require('./views/app-view');
|
|
|
|
const KeyHandler = require('./comp/key-handler');
|
|
|
|
const IdleTracker = require('./comp/idle-tracker');
|
|
|
|
const PopupNotifier = require('./comp/popup-notifier');
|
|
|
|
const SingleInstanceChecker = require('./comp/single-instance-checker');
|
|
|
|
const Alerts = require('./comp/alerts');
|
|
|
|
const Updater = require('./comp/updater');
|
|
|
|
const AuthReceiver = require('./comp/auth-receiver');
|
|
|
|
const ExportApi = require('./comp/export-api');
|
|
|
|
const SettingsManager = require('./comp/settings-manager');
|
2017-02-19 18:51:52 +01:00
|
|
|
const PluginManager = require('./plugins/plugin-manager');
|
2017-01-31 07:50:28 +01:00
|
|
|
const KdbxwebInit = require('./util/kdbxweb-init');
|
|
|
|
const Locale = require('./util/locale');
|
2015-10-17 23:49:24 +02:00
|
|
|
|
2016-07-17 13:30:38 +02:00
|
|
|
$(() => {
|
2016-06-16 19:00:24 +02:00
|
|
|
if (isPopup()) {
|
2016-03-27 18:03:58 +02:00
|
|
|
return AuthReceiver.receive();
|
2015-10-25 17:27:34 +01:00
|
|
|
}
|
2016-06-16 19:00:24 +02:00
|
|
|
loadMixins();
|
2017-02-19 18:51:52 +01:00
|
|
|
let appModel;
|
|
|
|
initModules().then(() => {
|
|
|
|
appModel = new AppModel();
|
|
|
|
SettingsManager.setBySettings(appModel.settings);
|
|
|
|
const configParam = getConfigParam();
|
|
|
|
if (configParam) {
|
|
|
|
appModel.loadConfig(configParam, err => {
|
|
|
|
SettingsManager.setBySettings(appModel.settings);
|
|
|
|
if (err && !appModel.settings.get('cacheConfigSettings')) {
|
|
|
|
showSettingsLoadError();
|
|
|
|
} else {
|
|
|
|
showApp();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
showApp();
|
|
|
|
}
|
|
|
|
});
|
2015-10-17 23:49:24 +02:00
|
|
|
|
2016-06-16 19:00:24 +02:00
|
|
|
function isPopup() {
|
|
|
|
return (window.parent !== window.top) || window.opener;
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadMixins() {
|
|
|
|
require('./mixins/view');
|
|
|
|
require('./helpers');
|
|
|
|
}
|
|
|
|
|
|
|
|
function initModules() {
|
2017-02-19 18:51:52 +01:00
|
|
|
const promises = [];
|
2016-06-16 19:00:24 +02:00
|
|
|
KeyHandler.init();
|
|
|
|
IdleTracker.init();
|
|
|
|
PopupNotifier.init();
|
2017-01-30 21:26:31 +01:00
|
|
|
KdbxwebInit.init();
|
2017-02-19 18:51:52 +01:00
|
|
|
promises.push(PluginManager.init());
|
2016-06-16 19:00:24 +02:00
|
|
|
window.kw = ExportApi;
|
2017-02-19 18:51:52 +01:00
|
|
|
return Promise.all(promises);
|
2016-06-16 19:00:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function showSettingsLoadError() {
|
|
|
|
Alerts.error({
|
|
|
|
header: Locale.appSettingsError,
|
|
|
|
body: Locale.appSettingsErrorBody,
|
|
|
|
buttons: [],
|
|
|
|
esc: false, enter: false, click: false
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-10-17 23:49:24 +02:00
|
|
|
function showApp() {
|
2017-01-31 07:50:28 +01:00
|
|
|
const skipHttpsWarning = localStorage.skipHttpsWarning || appModel.settings.get('skipHttpsWarning');
|
|
|
|
const protocolIsInsecure = ['https:', 'file:', 'app:'].indexOf(location.protocol) < 0;
|
|
|
|
const hostIsInsecure = location.hostname !== 'localhost';
|
2017-01-29 11:24:41 +01:00
|
|
|
if (protocolIsInsecure && hostIsInsecure && !skipHttpsWarning) {
|
2016-06-16 19:00:24 +02:00
|
|
|
Alerts.error({ header: Locale.appSecWarn, icon: 'user-secret', esc: false, enter: false, click: false,
|
|
|
|
body: Locale.appSecWarnBody1 + '<br/><br/>' + Locale.appSecWarnBody2,
|
|
|
|
buttons: [
|
|
|
|
{ result: '', title: Locale.appSecWarnBtn, error: true }
|
|
|
|
],
|
|
|
|
complete: showView
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
showView();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function showView() {
|
2016-09-20 22:30:19 +02:00
|
|
|
appModel.prepare();
|
2015-12-06 21:32:41 +01:00
|
|
|
new AppView({ model: appModel }).render();
|
2015-10-29 22:20:01 +01:00
|
|
|
Updater.init();
|
2016-09-16 19:33:38 +02:00
|
|
|
SingleInstanceChecker.init();
|
2015-10-17 23:49:24 +02:00
|
|
|
}
|
2016-06-16 19:00:24 +02:00
|
|
|
|
|
|
|
function getConfigParam() {
|
2017-01-31 07:50:28 +01:00
|
|
|
const metaConfig = document.head.querySelector('meta[name=kw-config]');
|
2016-07-30 12:38:37 +02:00
|
|
|
if (metaConfig && metaConfig.content && metaConfig.content[0] !== '(') {
|
2016-07-26 22:32:32 +02:00
|
|
|
return metaConfig.content;
|
|
|
|
}
|
2017-01-31 07:50:28 +01:00
|
|
|
const match = location.search.match(/[?&]config=([^&]+)/i);
|
2016-06-16 19:00:24 +02:00
|
|
|
if (match && match[1]) {
|
|
|
|
return match[1];
|
|
|
|
}
|
|
|
|
}
|
2015-10-17 23:49:24 +02:00
|
|
|
});
|