bitwarden-estensione-browser/src/popup/vault/add-edit.component.ts

165 lines
5.9 KiB
TypeScript
Raw Normal View History

2018-04-06 05:49:04 +02:00
import { Location } from '@angular/common';
import { Component } from '@angular/core';
2018-04-06 05:49:04 +02:00
import {
ActivatedRoute,
Router,
} from '@angular/router';
import { BrowserApi } from '../../browser/browserApi';
2018-04-06 05:49:04 +02:00
import { AuditService } from 'jslib/abstractions/audit.service';
import { CipherService } from 'jslib/abstractions/cipher.service';
import { CollectionService } from 'jslib/abstractions/collection.service';
2019-07-12 16:41:14 +02:00
import { EventService } from 'jslib/abstractions/event.service';
2018-04-06 05:49:04 +02:00
import { FolderService } from 'jslib/abstractions/folder.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { MessagingService } from 'jslib/abstractions/messaging.service';
2018-04-06 05:49:04 +02:00
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { PolicyService } from 'jslib/abstractions/policy.service';
2018-04-09 23:35:16 +02:00
import { StateService } from 'jslib/abstractions/state.service';
import { UserService } from 'jslib/abstractions/user.service';
2018-04-06 05:49:04 +02:00
import { LoginUriView } from 'jslib/models/view/loginUriView';
2018-04-06 05:49:04 +02:00
import { AddEditComponent as BaseAddEditComponent } from 'jslib/angular/components/add-edit.component';
@Component({
selector: 'app-vault-add-edit',
2018-04-06 17:48:45 +02:00
templateUrl: 'add-edit.component.html',
2018-04-06 05:49:04 +02:00
})
export class AddEditComponent extends BaseAddEditComponent {
currentUris: string[];
2018-07-25 05:23:44 +02:00
showAttachments = true;
2018-04-14 20:56:30 +02:00
2018-04-06 05:49:04 +02:00
constructor(cipherService: CipherService, folderService: FolderService,
i18nService: I18nService, platformUtilsService: PlatformUtilsService,
2018-04-09 23:35:16 +02:00
auditService: AuditService, stateService: StateService,
userService: UserService, collectionService: CollectionService,
messagingService: MessagingService, private route: ActivatedRoute,
2019-07-12 16:41:14 +02:00
private router: Router, private location: Location,
eventService: EventService, policyService: PolicyService) {
super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,
userService, collectionService, messagingService, eventService, policyService);
2018-04-06 05:49:04 +02:00
}
async ngOnInit() {
await super.ngOnInit();
2020-09-15 16:50:45 +02:00
2018-12-20 16:20:57 +01:00
const queryParamsSub = this.route.queryParams.subscribe(async (params) => {
2018-04-06 05:49:04 +02:00
if (params.cipherId) {
this.cipherId = params.cipherId;
}
2018-04-10 06:04:49 +02:00
if (params.folderId) {
this.folderId = params.folderId;
}
2018-10-30 13:56:38 +01:00
if (params.collectionId) {
2019-05-10 20:10:40 +02:00
const collection = this.writeableCollections.find((c) => c.id === params.collectionId);
if (collection != null) {
this.collectionIds = [collection.id];
this.organizationId = collection.organizationId;
2018-10-30 13:56:38 +01:00
}
}
2018-04-10 06:04:49 +02:00
if (params.type) {
const type = parseInt(params.type, null);
this.type = type;
}
2018-04-06 05:49:04 +02:00
this.editMode = !params.cipherId;
if (params.cloneMode != null) {
this.cloneMode = params.cloneMode === 'true';
}
2018-04-06 05:49:04 +02:00
await this.load();
2018-04-10 06:04:49 +02:00
if (!this.editMode || this.cloneMode) {
if (params.name && (this.cipher.name == null || this.cipher.name === '')) {
2018-04-10 06:04:49 +02:00
this.cipher.name = params.name;
}
if (params.uri && (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === '')) {
2018-04-10 06:04:49 +02:00
this.cipher.login.uris[0].uri = params.uri;
}
}
2019-01-17 05:30:39 +01:00
if (queryParamsSub != null) {
queryParamsSub.unsubscribe();
}
2018-04-06 05:49:04 +02:00
});
2018-04-10 06:04:49 +02:00
if (!this.editMode) {
const tabs = await BrowserApi.tabsQuery({ windowType: 'normal' });
this.currentUris = tabs == null ? null :
tabs.filter((tab) => tab.url != null && tab.url !== '').map((tab) => tab.url);
}
window.setTimeout(() => {
2018-04-10 06:04:49 +02:00
if (!this.editMode) {
if (this.cipher.name != null && this.cipher.name !== '') {
document.getElementById('loginUsername').focus();
} else {
document.getElementById('name').focus();
}
}
}, 200);
2018-04-06 05:49:04 +02:00
}
2018-04-06 05:51:58 +02:00
async submit(): Promise<boolean> {
2018-04-06 05:49:04 +02:00
if (await super.submit()) {
if (this.cloneMode) {
this.router.navigate(['/tabs/vault']);
} else {
this.location.back();
}
2018-04-06 05:51:58 +02:00
return true;
2018-04-06 05:49:04 +02:00
}
2018-04-06 05:51:58 +02:00
return false;
2018-04-06 05:49:04 +02:00
}
2018-04-11 19:51:09 +02:00
attachments() {
super.attachments();
this.router.navigate(['/attachments'], { queryParams: { cipherId: this.cipher.id } });
}
2018-10-23 18:16:27 +02:00
editCollections() {
2018-10-23 21:41:55 +02:00
super.editCollections();
2018-10-23 18:16:27 +02:00
if (this.cipher.organizationId != null) {
this.router.navigate(['/collections'], { queryParams: { cipherId: this.cipher.id } });
}
}
2018-04-06 05:49:04 +02:00
cancel() {
super.cancel();
this.location.back();
}
2018-04-09 23:35:16 +02:00
2018-04-10 20:20:03 +02:00
async generatePassword(): Promise<boolean> {
const confirmed = await super.generatePassword();
if (confirmed) {
this.stateService.save('addEditCipherInfo', {
cipher: this.cipher,
collectionIds: this.collections == null ? [] :
this.collections.filter((c) => (c as any).checked).map((c) => c.id),
});
2018-04-10 20:20:03 +02:00
this.router.navigate(['generator']);
}
return confirmed;
2018-04-09 23:35:16 +02:00
}
2018-04-11 22:23:05 +02:00
2018-04-12 04:33:32 +02:00
async delete(): Promise<boolean> {
const confirmed = await super.delete();
if (confirmed) {
2018-04-11 22:27:20 +02:00
this.router.navigate(['/tabs/vault']);
}
2018-04-12 04:33:32 +02:00
return confirmed;
2018-04-11 22:23:05 +02:00
}
toggleUriInput(uri: LoginUriView) {
const u = (uri as any);
u.showCurrentUris = !u.showCurrentUris;
}
allowOwnershipOptions(): boolean {
return (!this.editMode || this.cloneMode) && this.ownershipOptions
&& (this.ownershipOptions.length > 1 || !this.allowPersonal);
}
2018-04-06 05:49:04 +02:00
}