import * as angular from 'angular'; import { BrowserType } from '../../../enums/browserType.enum'; import { BrowserUtilsService } from '../../../services/abstractions/browserUtils.service'; import { CryptoService } from '../../../services/abstractions/crypto.service'; import { StorageService } from '../../../services/abstractions/storage.service'; import ConstantsService from '../../../services/constants.service'; import * as template from './settings.component.html'; const RateUrls = { [BrowserType.Chrome]: 'https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb/reviews', [BrowserType.Firefox]: 'https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager/#reviews', [BrowserType.Opera]: 'https://addons.opera.com/en/extensions/details/bitwarden-free-password-manager/#feedback-container', [BrowserType.Edge]: 'https://www.microsoft.com/store/p/bitwarden-free-password-manager/9p6kxl0svnnl', [BrowserType.Vivaldi]: 'https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb/reviews', [BrowserType.Safari]: 'https://itunes.com', // TODO }; export class SettingsController { lockOption = ''; i18n: any; showOnLocked: boolean; constructor(private $state: any, private SweetAlert: any, private browserUtilsService: BrowserUtilsService, private $analytics: any, private i18nService: any, private constantsService: ConstantsService, private cryptoService: CryptoService, private lockService: any, private storageService: StorageService, private $timeout: ng.ITimeoutService) { this.i18n = i18nService; $timeout(() => { browserUtilsService.initListSectionItemListeners(document, angular); }, 500); this.showOnLocked = !browserUtilsService.isFirefox() && !browserUtilsService.isEdge(); this.storageService.get(constantsService.lockOptionKey).then((lockOption: number) => { if (lockOption != null) { let option = lockOption.toString(); if (option === '-2' && !this.showOnLocked) { option = '-1'; } this.lockOption = option; } else { this.lockOption = ''; } }); } changeLockOption() { const option = this.lockOption && this.lockOption !== '' ? parseInt(this.lockOption, 10) : null; this.storageService.save(this.constantsService.lockOptionKey, option).then(() => { return this.cryptoService.getKeyHash(); }).then((keyHash) => { if (keyHash) { this.cryptoService.toggleKey(); } else { this.SweetAlert.swal({ title: this.i18nService.loggingOut, text: this.i18nService.loggingOutConfirmation, showCancelButton: true, confirmButtonText: this.i18nService.yes, cancelButtonText: this.i18nService.cancel, }, (confirmed: boolean) => { if (confirmed) { this.cryptoService.toggleKey(); chrome.runtime.sendMessage({ command: 'logout' }); } }); } }); } lock() { this.$analytics.eventTrack('Lock Now'); this.lockService.lock().then(() => { return this.$state.go('lock', { animation: 'in-slide-down', }); }); } logOut() { this.SweetAlert.swal({ title: this.i18nService.logOut, text: this.i18nService.logOutConfirmation, showCancelButton: true, confirmButtonText: this.i18nService.yes, cancelButtonText: this.i18nService.cancel, }, (confirmed: boolean) => { if (confirmed) { chrome.runtime.sendMessage({ command: 'logout' }); } }); } changePassword() { this.SweetAlert.swal({ title: this.i18nService.changeMasterPassword, text: this.i18nService.changeMasterPasswordConfirmation, showCancelButton: true, confirmButtonText: this.i18nService.yes, cancelButtonText: this.i18nService.cancel, }, (confirmed: boolean) => { this.$analytics.eventTrack('Clicked Change Password'); if (confirmed) { chrome.tabs.create({ url: 'https://help.bitwarden.com/article/change-your-master-password/' }); } }); } changeEmail() { this.SweetAlert.swal({ title: this.i18nService.changeEmail, text: this.i18nService.changeEmailConfirmation, showCancelButton: true, confirmButtonText: this.i18nService.yes, cancelButtonText: this.i18nService.cancel, }, (confirmed: boolean) => { this.$analytics.eventTrack('Clicked Change Email'); if (confirmed) { chrome.tabs.create({ url: 'https://help.bitwarden.com/article/change-your-email/' }); } }); } twoStep() { this.SweetAlert.swal({ title: this.i18nService.twoStepLogin, text: this.i18nService.twoStepLoginConfirmation, showCancelButton: true, confirmButtonText: this.i18nService.yes, cancelButtonText: this.i18nService.cancel, }, (confirmed: boolean) => { this.$analytics.eventTrack('Clicked Two-step Login'); if (confirmed) { chrome.tabs.create({ url: 'https://help.bitwarden.com/article/setup-two-step-login/' }); } }); } rate() { this.$analytics.eventTrack('Rate Extension'); chrome.tabs.create({ url: RateUrls[this.browserUtilsService.getBrowser()], }); } } export const SettingsComponent = { bindings: {}, controller: SettingsController, template: template, };