mirror of
https://github.com/bitwarden/browser
synced 2025-12-23 11:43:46 +00:00
menu with messages back to app
This commit is contained in:
@@ -6,6 +6,7 @@ import { Angulartics2GoogleAnalytics } from 'angulartics2/ga';
|
||||
|
||||
import {
|
||||
Component,
|
||||
NgZone,
|
||||
OnInit,
|
||||
} from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
@@ -21,6 +22,7 @@ import { CryptoService } from 'jslib/abstractions/crypto.service';
|
||||
import { FolderService } from 'jslib/abstractions/folder.service';
|
||||
import { I18nService } from 'jslib/abstractions/i18n.service';
|
||||
import { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service';
|
||||
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
|
||||
import { SettingsService } from 'jslib/abstractions/settings.service';
|
||||
import { SyncService } from 'jslib/abstractions/sync.service';
|
||||
import { TokenService } from 'jslib/abstractions/token.service';
|
||||
@@ -47,45 +49,60 @@ export class AppComponent implements OnInit {
|
||||
private settingsService: SettingsService, private syncService: SyncService,
|
||||
private passwordGenerationService: PasswordGenerationService, private cipherService: CipherService,
|
||||
private authService: AuthService, private router: Router, private analytics: Angulartics2,
|
||||
private toasterService: ToasterService, private i18nService: I18nService) { }
|
||||
private toasterService: ToasterService, private i18nService: I18nService,
|
||||
private platformUtilsService: PlatformUtilsService, private ngZone: NgZone) { }
|
||||
|
||||
ngOnInit() {
|
||||
this.broadcasterService.subscribe(async (message: any) => {
|
||||
switch (message.command) {
|
||||
case 'loggedIn':
|
||||
break;
|
||||
case 'logout':
|
||||
const userId = await this.userService.getUserId();
|
||||
|
||||
await Promise.all([
|
||||
this.syncService.setLastSync(new Date(0)),
|
||||
this.tokenService.clearToken(),
|
||||
this.cryptoService.clearKeys(),
|
||||
this.userService.clear(),
|
||||
this.settingsService.clear(userId),
|
||||
this.cipherService.clear(userId),
|
||||
this.folderService.clear(userId),
|
||||
this.passwordGenerationService.clear(),
|
||||
]);
|
||||
|
||||
this.doneLoggingOut(message.expired);
|
||||
break;
|
||||
case 'doneLoggingOut':
|
||||
this.doneLoggingOut(message.expired);
|
||||
break;
|
||||
case 'locked':
|
||||
break;
|
||||
case 'unlocked':
|
||||
break;
|
||||
case 'syncStarted':
|
||||
break;
|
||||
case 'syncCompleted':
|
||||
break;
|
||||
default:
|
||||
}
|
||||
this.broadcasterService.subscribe((message: any) => {
|
||||
this.ngZone.run(async () => {
|
||||
switch (message.command) {
|
||||
case 'loggedIn':
|
||||
break;
|
||||
case 'logout':
|
||||
this.logOut(message.expired);
|
||||
break;
|
||||
case 'doneLoggingOut':
|
||||
this.doneLoggingOut(message.expired);
|
||||
break;
|
||||
case 'locked':
|
||||
break;
|
||||
case 'unlocked':
|
||||
break;
|
||||
case 'syncStarted':
|
||||
break;
|
||||
case 'syncCompleted':
|
||||
break;
|
||||
case 'confirmLogout':
|
||||
const logoutConfirmed = await this.platformUtilsService.showDialog(
|
||||
this.i18nService.t('logOutConfirmation'), this.i18nService.t('logOut'),
|
||||
this.i18nService.t('logOut'), this.i18nService.t('cancel'));
|
||||
if (logoutConfirmed) {
|
||||
this.logOut(false);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private async logOut(expired: boolean) {
|
||||
const userId = await this.userService.getUserId();
|
||||
|
||||
await Promise.all([
|
||||
this.syncService.setLastSync(new Date(0)),
|
||||
this.tokenService.clearToken(),
|
||||
this.cryptoService.clearKeys(),
|
||||
this.userService.clear(),
|
||||
this.settingsService.clear(userId),
|
||||
this.cipherService.clear(userId),
|
||||
this.folderService.clear(userId),
|
||||
this.passwordGenerationService.clear(),
|
||||
]);
|
||||
|
||||
this.doneLoggingOut(expired);
|
||||
}
|
||||
|
||||
private doneLoggingOut(expired: boolean) {
|
||||
this.authService.logOut(() => {
|
||||
this.analytics.eventTrack.next({ action: 'Logged Out' });
|
||||
|
||||
@@ -35,6 +35,7 @@ import { SecureNoteView } from 'jslib/models/view/secureNoteView';
|
||||
export class AddEditComponent implements OnChanges {
|
||||
@Input() folderId: string;
|
||||
@Input() cipherId: string;
|
||||
@Input() type: CipherType;
|
||||
@Output() onSavedCipher = new EventEmitter<CipherView>();
|
||||
@Output() onDeletedCipher = new EventEmitter<CipherView>();
|
||||
@Output() onCancelled = new EventEmitter<CipherView>();
|
||||
@@ -119,7 +120,7 @@ export class AddEditComponent implements OnChanges {
|
||||
this.title = this.i18nService.t('addItem');
|
||||
this.cipher = new CipherView();
|
||||
this.cipher.folderId = this.folderId;
|
||||
this.cipher.type = CipherType.Login;
|
||||
this.cipher.type = this.type == null ? CipherType.Login : this.type;
|
||||
this.cipher.login = new LoginView();
|
||||
this.cipher.card = new CardView();
|
||||
this.cipher.identity = new IdentityView();
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
<app-vault-add-edit id="details"
|
||||
*ngIf="action === 'add' || action === 'edit'"
|
||||
[folderId]="action === 'add' && folderId !== 'none' ? folderId : null"
|
||||
[type]="action === 'add' ? addType : null"
|
||||
[cipherId]="action === 'edit' ? cipherId : null"
|
||||
(onSavedCipher)="savedCipher($event)"
|
||||
(onDeletedCipher)="deletedCipher($event)"
|
||||
|
||||
@@ -2,8 +2,10 @@ import * as template from './vault.component.html';
|
||||
|
||||
import { Location } from '@angular/common';
|
||||
import {
|
||||
ChangeDetectorRef,
|
||||
Component,
|
||||
ComponentFactoryResolver,
|
||||
NgZone,
|
||||
OnInit,
|
||||
ViewChild,
|
||||
ViewContainerRef,
|
||||
@@ -15,6 +17,8 @@ import {
|
||||
|
||||
import { ModalComponent } from '../modal.component';
|
||||
|
||||
import { BroadcasterService } from '../services/broadcaster.service';
|
||||
|
||||
import { AddEditComponent } from './add-edit.component';
|
||||
import { AttachmentsComponent } from './attachments.component';
|
||||
import { CiphersComponent } from './ciphers.component';
|
||||
@@ -48,12 +52,46 @@ export class VaultComponent implements OnInit {
|
||||
type: CipherType = null;
|
||||
folderId: string = null;
|
||||
collectionId: string = null;
|
||||
addType: CipherType = null;
|
||||
|
||||
constructor(private route: ActivatedRoute, private router: Router, private location: Location,
|
||||
private componentFactoryResolver: ComponentFactoryResolver, private i18nService: I18nService) {
|
||||
private componentFactoryResolver: ComponentFactoryResolver, private i18nService: I18nService,
|
||||
private broadcasterService: BroadcasterService, private changeDetectorRef: ChangeDetectorRef,
|
||||
private ngZone: NgZone) {
|
||||
}
|
||||
|
||||
async ngOnInit() {
|
||||
this.broadcasterService.subscribe((message: any) => {
|
||||
this.ngZone.run(async () => {
|
||||
let detectChanges = true;
|
||||
|
||||
switch (message.command) {
|
||||
case 'newLogin':
|
||||
this.addCipher(CipherType.Login);
|
||||
break;
|
||||
case 'newCard':
|
||||
this.addCipher(CipherType.Card);
|
||||
break;
|
||||
case 'newIdentity':
|
||||
this.addCipher(CipherType.Identity);
|
||||
break;
|
||||
case 'newSecureNote':
|
||||
this.addCipher(CipherType.SecureNote);
|
||||
break;
|
||||
case 'newFolder':
|
||||
await this.addFolder();
|
||||
break;
|
||||
default:
|
||||
detectChanges = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (detectChanges) {
|
||||
this.changeDetectorRef.detectChanges();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
this.route.queryParams.subscribe(async (params) => {
|
||||
if (params.cipherId) {
|
||||
const cipherView = new CipherView();
|
||||
@@ -108,11 +146,12 @@ export class VaultComponent implements OnInit {
|
||||
this.go();
|
||||
}
|
||||
|
||||
addCipher() {
|
||||
addCipher(type: CipherType = null) {
|
||||
if (this.action === 'add') {
|
||||
return;
|
||||
}
|
||||
|
||||
this.addType = type;
|
||||
this.action = 'add';
|
||||
this.cipherId = null;
|
||||
this.go();
|
||||
|
||||
Reference in New Issue
Block a user