const FeatureDetector = require('../util/feature-detector'); const Alerts = require('../comp/alerts'); const AppSettingsModel = require('../models/app-settings-model'); const Launcher = require('./launcher'); const Locale = require('../util/locale'); const AppRightsChecker = { AppPath: '/Applications/KeeWeb.app', init() { if (!FeatureDetector.isDesktop || !FeatureDetector.isMac) { return; } if (AppSettingsModel.instance.get('skipFolderRightsWarning')) { return; } if (!Launcher.getAppPath().startsWith(this.AppPath)) { return; } this.needRunInstaller(needRun => { if (needRun) { this.showAlert(); this.runInstaller(); } }); }, needRunInstaller(callback) { Launcher.statFile(this.AppPath, stat => { const folderIsRoot = stat && stat.uid === 0; callback(!folderIsRoot); }); }, showAlert() { const command = 'sudo chown -R root ' + this.AppPath; this.alert = Alerts.alert({ icon: 'lock', header: Locale.appRightsAlert, body: Locale.appRightsAlertBody1.replace('{}', `${this.AppPath}`) + '
' + Locale.appRightsAlertBody2 + `:
${command}
`, buttons: [{ result: 'skip', title: Locale.alertDoNotAsk, error: true }, Alerts.buttons.ok], success: result => { if (result === 'skip') { this.dontAskAnymore(); } this.alert = null; } }); }, runInstaller() { Launcher.spawn({ cmd: this.AppPath + '/Contents/Installer/KeeWeb Installer.app/Contents/MacOS/applet', complete: () => { this.needRunInstaller(needRun => { if (this.alert && !needRun) { this.alert.closeWithResult('cancel'); } }); } }); }, dontAskAnymore() { this.needRunInstaller(needRun => { if (needRun) { AppSettingsModel.instance.set('skipFolderRightsWarning', true); } }); } }; module.exports = AppRightsChecker;