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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

230 lines
7.0 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 { first } from "rxjs/operators";
import { BrowserApi } from "../../browser/browserApi";
import { AuditService } from "jslib-common/abstractions/audit.service";
import { CipherService } from "jslib-common/abstractions/cipher.service";
import { CollectionService } from "jslib-common/abstractions/collection.service";
import { EventService } from "jslib-common/abstractions/event.service";
import { FolderService } from "jslib-common/abstractions/folder.service";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service";
import { MessagingService } from "jslib-common/abstractions/messaging.service";
import { PasswordRepromptService } from "jslib-common/abstractions/passwordReprompt.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { PolicyService } from "jslib-common/abstractions/policy.service";
import { StateService } from "jslib-common/abstractions/state.service";
import { StorageService } from "jslib-common/abstractions/storage.service";
import { UserService } from "jslib-common/abstractions/user.service";
import { ConstantsService } from "jslib-common/services/constants.service";
2021-02-04 21:23:12 +01:00
import { PopupUtilsService } from "../services/popup-utils.service";
import { LoginUriView } from "jslib-common/models/view/loginUriView";
import { AddEditComponent as BaseAddEditComponent } from "jslib-angular/components/add-edit.component";
2021-05-17 06:32:48 +02:00
import { CipherType } from "jslib-common/enums/cipherType";
2018-04-06 05:49:04 +02:00
@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;
openAttachmentsInPopup: boolean;
2021-05-17 05:46:39 +02:00
showAutoFillOnPageLoadOptions: boolean;
2021-12-21 15:43:35 +01: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,
private popupUtilsService: PopupUtilsService,
private storageService: StorageService,
logService: LogService,
passwordRepromptService: PasswordRepromptService
2018-04-06 05:49:04 +02:00
) {
super(
cipherService,
2018-04-10 06:04:49 +02:00
folderService,
2021-03-02 19:31:52 +01:00
i18nService,
platformUtilsService,
auditService,
stateService,
userService,
2021-03-02 19:31:52 +01:00
collectionService,
messagingService,
eventService,
policyService,
passwordRepromptService,
logService
2021-12-21 15:43:35 +01:00
);
}
async ngOnInit() {
await super.ngOnInit();
2021-12-21 15:43:35 +01:00
this.route.queryParams.pipe(first()).subscribe(async (params) => {
if (params.cipherId) {
this.cipherId = params.cipherId;
2018-04-10 06:04:49 +02:00
}
if (params.folderId) {
this.folderId = params.folderId;
}
if (params.collectionId) {
const collection = this.writeableCollections.find((c) => c.id === params.collectionId);
if (collection != null) {
this.collectionIds = [collection.id];
2021-03-02 19:31:52 +01:00
this.organizationId = collection.organizationId;
}
2021-12-21 15:43:35 +01:00
}
if (params.type) {
const type = parseInt(params.type, null);
2018-04-10 06:04:49 +02:00
this.type = type;
2021-12-21 15:43:35 +01:00
}
2018-04-06 05:49:04 +02:00
this.editMode = !params.cipherId;
2021-12-21 15:43:35 +01:00
if (params.cloneMode != null) {
this.cloneMode = params.cloneMode === "true";
2021-12-21 15:43:35 +01:00
}
await this.load();
2021-12-21 15:43:35 +01:00
2018-04-10 06:04:49 +02:00
if (!this.editMode || this.cloneMode) {
if (
!this.popupUtilsService.inPopout(window) &&
params.name &&
(this.cipher.name == null || this.cipher.name === "")
2021-05-17 06:32:48 +02:00
) {
2021-05-17 05:46:39 +02:00
this.cipher.name = params.name;
2021-12-21 15:43:35 +01:00
}
if (
2021-05-17 05:46:39 +02:00
!this.popupUtilsService.inPopout(window) &&
2021-12-21 15:43:35 +01:00
params.uri &&
2021-05-17 05:46:39 +02:00
(this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === "")
2021-12-21 15:43:35 +01:00
) {
2021-05-17 05:46:39 +02:00
this.cipher.login.uris[0].uri = params.uri;
2018-04-06 05:49:04 +02:00
}
2021-12-21 15:43:35 +01:00
}
2018-04-06 05:51:58 +02:00
this.openAttachmentsInPopup = this.popupUtilsService.inPopup(window);
2018-04-06 05:49:04 +02:00
});
2018-04-11 19:51:09 +02:00
if (!this.editMode) {
const tabs = await BrowserApi.tabsQuery({ windowType: "normal" });
this.currentUris =
2021-03-02 19:31:52 +01:00
tabs == null
2021-12-21 15:43:35 +01:00
? null
2021-03-02 19:31:52 +01:00
: tabs.filter((tab) => tab.url != null && tab.url !== "").map((tab) => tab.url);
2021-12-21 15:43:35 +01:00
}
window.setTimeout(() => {
if (!this.editMode) {
if (this.cipher.name != null && this.cipher.name !== "") {
document.getElementById("loginUsername").focus();
} else {
document.getElementById("name").focus();
}
2021-12-21 15:43:35 +01:00
}
}, 200);
}
2021-05-17 06:32:48 +02:00
async load() {
await super.load();
2021-05-17 05:46:39 +02:00
this.showAutoFillOnPageLoadOptions =
2018-04-10 06:04:49 +02:00
this.cipher.type === CipherType.Login &&
2021-05-17 05:46:39 +02:00
(await this.storageService.get<boolean>(ConstantsService.enableAutoFillOnPageLoadKey));
2021-12-21 15:43:35 +01: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) {
2018-04-11 22:27:20 +02:00
this.router.navigate(["/tabs/vault"]);
2021-12-21 15:43:35 +01:00
} else {
2018-04-06 05:49:04 +02:00
this.location.back();
2021-12-21 15:43:35 +01:00
}
2018-04-06 05:51:58 +02:00
return true;
2018-04-11 19:51:09 +02:00
}
2018-04-06 05:51:58 +02:00
return false;
2021-12-21 15:43:35 +01:00
}
2018-10-23 18:16:27 +02:00
attachments() {
2018-10-23 21:41:55 +02:00
super.attachments();
2018-10-23 18:16:27 +02:00
if (this.openAttachmentsInPopup) {
const destinationUrl = this.router
2018-04-06 05:49:04 +02:00
.createUrlTree(["/attachments"], { queryParams: { cipherId: this.cipher.id } })
.toString();
const currentBaseUrl = window.location.href.replace(this.router.url, "");
this.popupUtilsService.popOut(window, currentBaseUrl + destinationUrl);
2021-12-21 15:43:35 +01:00
} else {
this.router.navigate(["/attachments"], { queryParams: { cipherId: this.cipher.id } });
2018-04-06 05:49:04 +02:00
}
2021-12-21 15:43:35 +01:00
}
2018-04-09 23:35:16 +02:00
2018-04-10 20:20:03 +02:00
editCollections() {
super.editCollections();
if (this.cipher.organizationId != null) {
2018-04-10 20:20:03 +02:00
this.router.navigate(["/collections"], { queryParams: { cipherId: this.cipher.id } });
2018-04-09 23:35:16 +02:00
}
2021-12-21 15:43:35 +01:00
}
2018-04-12 04:33:32 +02:00
cancel() {
2018-04-06 05:49:04 +02:00
super.cancel();
this.location.back();
2021-12-21 15:43:35 +01:00
}
2018-04-12 04:33:32 +02:00
async generatePassword(): Promise<boolean> {
const confirmed = await super.generatePassword();
if (confirmed) {
2018-04-11 22:27:20 +02:00
this.stateService.save("addEditCipherInfo", {
cipher: this.cipher,
collectionIds:
2018-04-11 22:27:20 +02:00
this.collections == null
2021-12-21 15:43:35 +01:00
? []
2018-04-11 22:27:20 +02:00
: this.collections.filter((c) => (c as any).checked).map((c) => c.id),
2021-12-21 15:43:35 +01:00
});
2018-04-11 22:27:20 +02:00
this.router.navigate(["generator"]);
}
2018-04-12 04:33:32 +02:00
return confirmed;
2021-12-21 15:43:35 +01:00
}
async delete(): Promise<boolean> {
const confirmed = await super.delete();
if (confirmed) {
this.router.navigate(["/tabs/vault"]);
}
2018-04-12 04:33:32 +02:00
return confirmed;
2021-12-21 15:43:35 +01:00
}
toggleUriInput(uri: LoginUriView) {
const u = uri as any;
u.showCurrentUris = !u.showCurrentUris;
2021-12-21 15:43:35 +01:00
}
allowOwnershipOptions(): boolean {
2021-12-21 15:43:35 +01:00
return (
(!this.editMode || this.cloneMode) &&
this.ownershipOptions &&
(this.ownershipOptions.length > 1 || !this.allowPersonal)
2021-12-21 15:43:35 +01:00
);
}
2018-04-06 05:49:04 +02:00
}