From 4a663efeafc804e47af8db033afa54c16429f701 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 10 Apr 2018 16:20:49 -0400 Subject: [PATCH] settings page initial implementation --- src/_locales/en/messages.json | 6 - src/popup2/app-routing.animations.ts | 3 + src/popup2/settings/settings.component.html | 93 +++++++++++++- src/popup2/settings/settings.component.ts | 131 +++++++++++++++++++- 4 files changed, 223 insertions(+), 10 deletions(-) diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 5e49c8bfd2b..e33d654006a 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -431,12 +431,6 @@ "twoStepLoginConfirmation": { "message": "Two-step login makes your account more secure by requiring you to verify your login with another device such as a security key, authenticator app, SMS, phone call, or email. Two-step login can be enabled on the bitwarden.com web vault. Do you want to visit the website now?" }, - "loggingOut": { - "message": "Logging out" - }, - "loggingOutConfirmation": { - "message": "You've recently updated from an older version. You must re-log in to change your lock options. Do you want to log out now?" - }, "editedFolder": { "message": "Edited Folder" }, diff --git a/src/popup2/app-routing.animations.ts b/src/popup2/app-routing.animations.ts index 84f24021dc7..c91b8411e55 100644 --- a/src/popup2/app-routing.animations.ts +++ b/src/popup2/app-routing.animations.ts @@ -112,4 +112,7 @@ export const routerTransition = trigger('routerTransition', [ transition('tabs => export', inSlideUp), transition('export => tabs', outSlideDown), + + transition('tabs => lock', inSlideDown), + transition('lock => tabs', outSlideUp), ]); diff --git a/src/popup2/settings/settings.component.html b/src/popup2/settings/settings.component.html index a4a685a9306..c3bc610e3c8 100644 --- a/src/popup2/settings/settings.component.html +++ b/src/popup2/settings/settings.component.html @@ -8,9 +8,98 @@
-
+ +
+
{{'security' | i18n}}
+
+
+ + +
+ +
{{'lockNow' | i18n}}
+ +
+ +
{{'twoStepLogin' | i18n}}
+ +
+
+
+ + + diff --git a/src/popup2/settings/settings.component.ts b/src/popup2/settings/settings.component.ts index 3d0a61cf933..b06bdc0d022 100644 --- a/src/popup2/settings/settings.component.ts +++ b/src/popup2/settings/settings.component.ts @@ -1,7 +1,134 @@ -import { Component } from '@angular/core'; +import { Angulartics2 } from 'angulartics2'; + +import { + Component, + OnInit, +} from '@angular/core'; +import { Router } from '@angular/router'; + +import { BrowserApi } from '../../browser/browserApi'; + +import { DeviceType } from 'jslib/enums/deviceType'; + +import { ConstantsService } from 'jslib/services/constants.service'; + +import { I18nService } from 'jslib/abstractions/i18n.service'; +import { LockService } from 'jslib/abstractions/lock.service'; +import { MessagingService } from 'jslib/abstractions/messaging.service'; +import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; +import { StorageService } from 'jslib/abstractions/storage.service'; + +const RateUrls = { + [DeviceType.Chrome]: + 'https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb/reviews', + [DeviceType.Firefox]: + 'https://addons.mozilla.org/en-US/firefox/addon/bitwarden-password-manager/#reviews', + [DeviceType.Opera]: + 'https://addons.opera.com/en/extensions/details/bitwarden-free-password-manager/#feedback-container', + [DeviceType.Edge]: + 'https://www.microsoft.com/store/p/bitwarden-free-password-manager/9p6kxl0svnnl', + [DeviceType.Vivaldi]: + 'https://chrome.google.com/webstore/detail/bitwarden-free-password-m/nngceckbapebfimnlniiiahkandclblb/reviews', + [DeviceType.Safari]: + 'https://itunes.apple.com/app/bitwarden-password-manager/id1137397744', +}; @Component({ selector: 'app-settings', templateUrl: 'settings.component.html', }) -export class SettingsComponent { } +export class SettingsComponent implements OnInit { + lockOptions: any[]; + lockOption: number = null; + + constructor(private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, + private analytics: Angulartics2, private lockService: LockService, + private storageService: StorageService, public messagingService: MessagingService, + private router: Router) { + } + + async ngOnInit() { + const showOnLocked = !this.platformUtilsService.isFirefox() && !this.platformUtilsService.isEdge() + && !this.platformUtilsService.isSafari(); + + this.lockOptions = [ + { name: this.i18nService.t('immediately'), value: 0 }, + { name: this.i18nService.t('oneMinute'), value: 1 }, + { name: this.i18nService.t('fiveMinutes'), value: 5 }, + { name: this.i18nService.t('fifteenMinutes'), value: 15 }, + { name: this.i18nService.t('thirtyMinutes'), value: 30 }, + { name: this.i18nService.t('oneHour'), value: 60 }, + { name: this.i18nService.t('fourHours'), value: 240 }, + // { name: i18nService.t('onIdle'), value: -4 }, + // { name: i18nService.t('onSleep'), value: -3 }, + ]; + + if (showOnLocked) { + this.lockOptions.push({ name: this.i18nService.t('onLocked'), value: -2 }); + } + + this.lockOptions.push({ name: this.i18nService.t('onRestart'), value: -1 }); + this.lockOptions.push({ name: this.i18nService.t('never'), value: null }); + + let option = await this.storageService.get(ConstantsService.lockOptionKey); + if (option != null) { + if (option === -2 && !showOnLocked) { + option = -1; + } + this.lockOption = option; + } + } + + async saveLockOption() { + await this.lockService.setLockOption(this.lockOption != null ? this.lockOption : null); + } + + async lock() { + this.analytics.eventTrack.next({ action: 'Lock Now' }); + await this.lockService.lock(); + this.router.navigate(['lock']); + } + + async logOut() { + const confirmed = await this.platformUtilsService.showDialog( + this.i18nService.t('logOutConfirmation'), this.i18nService.t('logOut'), + this.i18nService.t('yes'), this.i18nService.t('cancel')); + if (confirmed) { + this.messagingService.send('logout'); + } + } + + async changePassword() { + this.analytics.eventTrack.next({ action: 'Clicked Change Password' }); + const confirmed = await this.platformUtilsService.showDialog( + this.i18nService.t('changeMasterPasswordConfirmation'), this.i18nService.t('changeMasterPassword'), + this.i18nService.t('yes'), this.i18nService.t('cancel')); + if (confirmed) { + BrowserApi.createNewTab('https://help.bitwarden.com/article/change-your-master-password/'); + } + } + + async twoStep() { + this.analytics.eventTrack.next({ action: 'Clicked Two-step Login' }); + const confirmed = await this.platformUtilsService.showDialog( + this.i18nService.t('twoStepLoginConfirmation'), this.i18nService.t('twoStepLogin'), + this.i18nService.t('yes'), this.i18nService.t('cancel')); + if (confirmed) { + BrowserApi.createNewTab('https://help.bitwarden.com/article/setup-two-step-login/'); + } + } + + async share() { + // TODO + } + + import() { + this.analytics.eventTrack.next({ action: 'Clicked Import Items' }); + BrowserApi.createNewTab('https://help.bitwarden.com/article/import-data/'); + } + + rate() { + this.analytics.eventTrack.next({ action: 'Rate Extension' }); + BrowserApi.createNewTab((RateUrls as any)[this.platformUtilsService.getDevice()]); + } +}