bitwarden-estensione-browser/src/popup/settings/settings.component.ts

183 lines
7.2 KiB
TypeScript
Raw Normal View History

2018-04-10 22:20:49 +02:00
import { Angulartics2 } from 'angulartics2';
2018-04-12 23:28:33 +02:00
import swal from 'sweetalert';
2018-04-10 22:20:49 +02:00
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';
2018-06-25 14:06:38 +02:00
import { EnvironmentService } from 'jslib/abstractions/environment.service';
2018-04-10 22:20:49 +02:00
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',
};
2018-04-09 23:35:16 +02:00
@Component({
selector: 'app-settings',
templateUrl: 'settings.component.html',
})
2018-04-10 22:20:49 +02:00
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, private environmentService: EnvironmentService) {
2018-04-10 22:20:49 +02:00
}
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<number>(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() {
this.analytics.eventTrack.next({ action: 'Clicked Share Vault' });
const confirmed = await this.platformUtilsService.showDialog(
this.i18nService.t('shareVaultConfirmation'), this.i18nService.t('shareVault'),
this.i18nService.t('yes'), this.i18nService.t('cancel'));
if (confirmed) {
BrowserApi.createNewTab('https://help.bitwarden.com/article/what-is-an-organization/');
}
}
async webVault() {
this.analytics.eventTrack.next({ action: 'Clicked Web Vault' });
2018-06-25 14:06:38 +02:00
let url = this.environmentService.getWebVaultUrl();
if (url == null) {
url = 'https://vault.bitwarden.com';
}
BrowserApi.createNewTab(url);
2018-04-10 22:20:49 +02:00
}
import() {
this.analytics.eventTrack.next({ action: 'Clicked Import Items' });
BrowserApi.createNewTab('https://help.bitwarden.com/article/import-data/');
}
2018-04-14 04:18:21 +02:00
export() {
if (this.platformUtilsService.isEdge()) {
BrowserApi.createNewTab('https://help.bitwarden.com/article/export-your-data/');
return;
}
this.router.navigate(['/export']);
}
2018-04-12 23:28:33 +02:00
help() {
this.analytics.eventTrack.next({ action: 'Clicked Help and Feedback' });
BrowserApi.createNewTab('https://help.bitwarden.com/');
}
about() {
this.analytics.eventTrack.next({ action: 'Clicked About' });
2018-04-19 15:45:51 +02:00
const year = (new Date()).getFullYear();
2018-04-12 23:28:33 +02:00
const versionText = document.createTextNode(
this.i18nService.t('version') + ': ' + BrowserApi.getApplicationVersion());
const div = document.createElement('div');
2018-04-19 15:45:51 +02:00
div.innerHTML = `<p class="text-center"><i class="fa fa-shield fa-3x"></i></p>
<p class="text-center"><b>Bitwarden</b><br>&copy; 8bit Solutions LLC 2015-` + year + `</p>`;
2018-04-12 23:28:33 +02:00
div.appendChild(versionText);
swal({
content: { element: div },
buttons: [this.i18nService.t('close'), false],
});
}
2018-04-10 22:20:49 +02:00
rate() {
this.analytics.eventTrack.next({ action: 'Rate Extension' });
BrowserApi.createNewTab((RateUrls as any)[this.platformUtilsService.getDevice()]);
}
}