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

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

120 lines
3.5 KiB
TypeScript
Raw Normal View History

import { Component, NgZone, OnDestroy, OnInit } from "@angular/core";
2021-03-02 19:31:52 +01:00
import { Router } from "@angular/router";
import { ConstantsService } from "jslib-common/services/constants.service";
2021-03-02 19:31:52 +01:00
2021-12-06 12:21:07 +01:00
import { BroadcasterService } from "jslib-common/abstractions/broadcaster.service";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
import { StorageService } from "jslib-common/abstractions/storage.service";
2021-03-02 19:31:52 +01:00
2021-01-13 09:40:10 +01:00
import { BrowserApi } from "../../browser/browserApi";
2021-03-02 19:31:52 +01:00
import { Utils } from "jslib-common/misc/utils";
interface ExcludedDomain {
uri: string;
showCurrentUris: boolean;
}
const BroadcasterSubscriptionId = "excludedDomains";
@Component({
selector: "app-excluded-domains",
templateUrl: "excluded-domains.component.html",
})
export class ExcludedDomainsComponent implements OnInit, OnDestroy {
excludedDomains: ExcludedDomain[] = [];
currentUris: string[];
loadCurrentUrisTimeout: number;
2021-12-21 15:43:35 +01:00
constructor(
private storageService: StorageService,
private i18nService: I18nService,
private router: Router,
private broadcasterService: BroadcasterService,
private ngZone: NgZone,
private platformUtilsService: PlatformUtilsService
2021-12-21 15:43:35 +01:00
) {}
async ngOnInit() {
const savedDomains = await this.storageService.get<any>(ConstantsService.neverDomainsKey);
if (savedDomains) {
for (const uri of Object.keys(savedDomains)) {
this.excludedDomains.push({ uri: uri, showCurrentUris: false });
2021-12-21 15:43:35 +01:00
}
}
await this.loadCurrentUris();
this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {
this.ngZone.run(async () => {
switch (message.command) {
case "tabChanged":
case "windowChanged":
if (this.loadCurrentUrisTimeout != null) {
window.clearTimeout(this.loadCurrentUrisTimeout);
}
this.loadCurrentUrisTimeout = window.setTimeout(
async () => await this.loadCurrentUris(),
2021-12-21 15:43:35 +01:00
500
);
break;
default:
break;
}
2021-12-21 15:43:35 +01:00
});
});
}
ngOnDestroy() {
this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);
2021-12-21 15:43:35 +01:00
}
async addUri() {
this.excludedDomains.push({ uri: "", showCurrentUris: false });
2021-12-21 15:43:35 +01:00
}
async removeUri(i: number) {
this.excludedDomains.splice(i, 1);
}
2021-12-21 15:43:35 +01:00
async submit() {
const savedDomains: { [name: string]: null } = {};
for (const domain of this.excludedDomains) {
if (domain.uri && domain.uri !== "") {
2021-03-02 19:31:52 +01:00
const validDomain = Utils.getHostname(domain.uri);
if (!validDomain) {
2021-03-02 19:31:52 +01:00
this.platformUtilsService.showToast(
2021-12-21 15:43:35 +01:00
"error",
null,
this.i18nService.t("excludedDomainsInvalidDomain", domain.uri)
);
return;
}
savedDomains[validDomain] = null;
2021-12-21 15:43:35 +01:00
}
}
await this.storageService.save(ConstantsService.neverDomainsKey, savedDomains);
this.router.navigate(["/tabs/settings"]);
2021-12-21 15:43:35 +01:00
}
trackByFunction(index: number, item: any) {
return index;
2021-12-21 15:43:35 +01:00
}
toggleUriInput(domain: ExcludedDomain) {
domain.showCurrentUris = !domain.showCurrentUris;
2021-12-21 15:43:35 +01:00
}
async loadCurrentUris() {
const tabs = await BrowserApi.tabsQuery({ windowType: "normal" });
if (tabs) {
2021-03-02 19:31:52 +01:00
const uriSet = new Set(tabs.map((tab) => Utils.getHostname(tab.url)));
uriSet.delete(null);
this.currentUris = Array.from(uriSet);
}
2021-12-21 15:43:35 +01:00
}
2021-01-13 09:40:10 +01:00
}