mirror of
https://github.com/bitwarden/browser
synced 2026-02-19 19:04:01 +00:00
PM-14927 Refactor critical app service and render counts
This commit is contained in:
@@ -5,19 +5,13 @@ import { ActivatedRoute } from "@angular/router";
|
||||
import { debounceTime, firstValueFrom, map, switchMap } from "rxjs";
|
||||
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import {
|
||||
CriticalAppsService,
|
||||
PasswordHealthReportApplicationsRequest,
|
||||
PasswordHealthReportApplicationsResponse,
|
||||
} from "@bitwarden/bit-common/tools/reports/risk-insights";
|
||||
import { CriticalAppsApiService } from "@bitwarden/bit-common/tools/reports/risk-insights";
|
||||
import { AuditService } from "@bitwarden/common/abstractions/audit.service";
|
||||
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||
import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service";
|
||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
|
||||
import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength";
|
||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
||||
@@ -28,7 +22,6 @@ import {
|
||||
TableDataSource,
|
||||
ToastService,
|
||||
} from "@bitwarden/components";
|
||||
import { KeyService } from "@bitwarden/key-management";
|
||||
import { CardComponent } from "@bitwarden/tools-card";
|
||||
|
||||
import { HeaderModule } from "../../layouts/header/header.module";
|
||||
@@ -53,7 +46,6 @@ export class AllApplicationsComponent implements OnInit {
|
||||
noItemsIcon = Icons.Security;
|
||||
protected markingAsCritical = false;
|
||||
isCritialAppsFeatureEnabled = false;
|
||||
private flaggedCriticalApps: PasswordHealthReportApplicationsResponse[] = [];
|
||||
|
||||
// MOCK DATA
|
||||
protected mockData = applicationTableMockData;
|
||||
@@ -74,17 +66,7 @@ export class AllApplicationsComponent implements OnInit {
|
||||
}),
|
||||
switchMap(async (params) => {
|
||||
const organizationId = (await params).get("organizationId");
|
||||
const result = await this.criticalAppsService.getCriticalApps(organizationId);
|
||||
const key = await this.keyService.getOrgKey(this.organization.id);
|
||||
const flaggedCriticalAppsPromise = result.map(async (r) => {
|
||||
const decryptedUrl = await this.encryptService.decryptToUtf8(new EncString(r.uri), key);
|
||||
return {
|
||||
id: r.id,
|
||||
organizationId: r.organizationId,
|
||||
uri: decryptedUrl,
|
||||
} as PasswordHealthReportApplicationsResponse;
|
||||
});
|
||||
this.flaggedCriticalApps = await Promise.all(flaggedCriticalAppsPromise);
|
||||
await this.criticalAppsService.getCriticalApps(organizationId);
|
||||
}),
|
||||
)
|
||||
.subscribe();
|
||||
@@ -103,9 +85,7 @@ export class AllApplicationsComponent implements OnInit {
|
||||
protected toastService: ToastService,
|
||||
protected organizationService: OrganizationService,
|
||||
protected configService: ConfigService,
|
||||
protected criticalAppsService: CriticalAppsService,
|
||||
private keyService: KeyService,
|
||||
private encryptService: EncryptService,
|
||||
protected criticalAppsService: CriticalAppsApiService,
|
||||
) {
|
||||
this.dataSource.data = applicationTableMockData;
|
||||
this.searchControl.valueChanges
|
||||
@@ -124,38 +104,10 @@ export class AllApplicationsComponent implements OnInit {
|
||||
|
||||
markAppsAsCritical = async () => {
|
||||
this.markingAsCritical = true;
|
||||
const key = await this.keyService.getOrgKey(this.organization.id);
|
||||
|
||||
// only save records that are not already in the database
|
||||
const newEntries = Array.from(this.selectedUrls).filter((url) => {
|
||||
return !this.flaggedCriticalApps.some((r) => r.uri === url);
|
||||
});
|
||||
|
||||
const criticalAppsPromises = newEntries.map(async (url) => {
|
||||
const encryptedUrlName = await this.encryptService.encrypt(url, key);
|
||||
return {
|
||||
organizationId: this.organization.id,
|
||||
url: encryptedUrlName.encryptedString.toString(),
|
||||
} as PasswordHealthReportApplicationsRequest;
|
||||
});
|
||||
|
||||
const criticalApps = await Promise.all(criticalAppsPromises);
|
||||
|
||||
await this.criticalAppsService
|
||||
.setCriticalApps(criticalApps)
|
||||
.then((result) => {
|
||||
// append to flaggedCriticalApps
|
||||
result
|
||||
.filter((r) => !this.flaggedCriticalApps.some((f) => f.uri === r.uri))
|
||||
.forEach(async (r) => {
|
||||
const decryptedUrl = await this.encryptService.decryptToUtf8(new EncString(r.uri), key);
|
||||
this.flaggedCriticalApps.push({
|
||||
id: r.id,
|
||||
organizationId: r.organizationId,
|
||||
uri: decryptedUrl,
|
||||
} as PasswordHealthReportApplicationsResponse);
|
||||
});
|
||||
|
||||
.setCriticalApps(this.organization.id, Array.from(this.selectedUrls))
|
||||
.then(() => {
|
||||
this.toastService.showToast({
|
||||
variant: "success",
|
||||
title: null,
|
||||
|
||||
@@ -4,6 +4,8 @@ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
||||
import { ActivatedRoute, Router } from "@angular/router";
|
||||
|
||||
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import { CriticalAppsApiService } from "@bitwarden/bit-common/tools/reports/risk-insights";
|
||||
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||
import { AsyncActionsModule, ButtonModule, TabsModule } from "@bitwarden/components";
|
||||
@@ -11,6 +13,7 @@ import { AsyncActionsModule, ButtonModule, TabsModule } from "@bitwarden/compone
|
||||
import { HeaderModule } from "../../layouts/header/header.module";
|
||||
|
||||
import { AllApplicationsComponent } from "./all-applications.component";
|
||||
import { applicationTableMockData } from "./application-table.mock";
|
||||
import { CriticalApplicationsComponent } from "./critical-applications.component";
|
||||
import { NotifiedMembersTableComponent } from "./notified-members-table.component";
|
||||
import { PasswordHealthMembersURIComponent } from "./password-health-members-uri.component";
|
||||
@@ -46,7 +49,7 @@ export class RiskInsightsComponent implements OnInit {
|
||||
dataLastUpdated = new Date();
|
||||
isCritialAppsFeatureEnabled = false;
|
||||
|
||||
apps: any[] = [];
|
||||
apps: any[] = applicationTableMockData;
|
||||
criticalApps: any[] = [];
|
||||
notifiedMembers: any[] = [];
|
||||
|
||||
@@ -78,9 +81,14 @@ export class RiskInsightsComponent implements OnInit {
|
||||
protected route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private configService: ConfigService,
|
||||
private criticalAppsApiService: CriticalAppsApiService,
|
||||
) {
|
||||
route.queryParams.pipe(takeUntilDestroyed()).subscribe(({ tabIndex }) => {
|
||||
this.tabIndex = !isNaN(tabIndex) ? tabIndex : RiskInsightsTabType.AllApps;
|
||||
});
|
||||
|
||||
this.criticalAppsApiService.criticalApps$.pipe(takeUntilDestroyed()).subscribe((apps) => {
|
||||
this.criticalApps = apps;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user