diff --git a/apps/web/src/app/tools/access-intelligence/critical-applications.component.html b/apps/web/src/app/tools/access-intelligence/critical-applications.component.html
index 1c503f3d786..6784695ee21 100644
--- a/apps/web/src/app/tools/access-intelligence/critical-applications.component.html
+++ b/apps/web/src/app/tools/access-intelligence/critical-applications.component.html
@@ -65,6 +65,7 @@
{{ "totalPasswords" | i18n }} |
{{ "atRiskMembers" | i18n }} |
{{ "totalMembers" | i18n }} |
+ |
@@ -93,6 +94,21 @@
{{ r.totalMembers }}
|
+
+
+
+
+
+
+ |
diff --git a/apps/web/src/app/tools/access-intelligence/critical-applications.component.ts b/apps/web/src/app/tools/access-intelligence/critical-applications.component.ts
index 0779b2977e5..55e38ad6f14 100644
--- a/apps/web/src/app/tools/access-intelligence/critical-applications.component.ts
+++ b/apps/web/src/app/tools/access-intelligence/critical-applications.component.ts
@@ -4,8 +4,16 @@ import { FormControl } from "@angular/forms";
import { ActivatedRoute, Router } from "@angular/router";
import { debounceTime, map } from "rxjs";
+// eslint-disable-next-line no-restricted-imports
+import { UnmarkCriticalApplicationApiService } from "@bitwarden/bit-common/tools/reports/risk-insights";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
-import { SearchModule, TableDataSource, NoItemsModule, Icons } from "@bitwarden/components";
+import {
+ SearchModule,
+ TableDataSource,
+ NoItemsModule,
+ Icons,
+ ToastService,
+} from "@bitwarden/components";
import { CardComponent } from "@bitwarden/tools-card";
import { HeaderModule } from "../../layouts/header/header.module";
@@ -20,6 +28,7 @@ import { RiskInsightsTabType } from "./risk-insights.component";
selector: "tools-critical-applications",
templateUrl: "./critical-applications.component.html",
imports: [CardComponent, HeaderModule, SearchModule, NoItemsModule, PipesModule, SharedModule],
+ providers: [UnmarkCriticalApplicationApiService],
})
export class CriticalApplicationsComponent implements OnInit {
protected dataSource = new TableDataSource();
@@ -55,12 +64,30 @@ export class CriticalApplicationsComponent implements OnInit {
});
};
+ unmarkAsCriticalApp = async (hostname: string) => {
+ await this.unmarkCriticalApplicationApiService.unmarkCriticalApplication(
+ this.organizationId,
+ hostname,
+ );
+ this.toastService.showToast({
+ // TODO uncomment when UnmarkCriticalApplicationApiService is properly implemented
+ // message: this.i18nService.t("criticalApplicationSuccessfullyUnmarked"),
+ // variant: "success",
+ // title: this.i18nService.t("Success"),
+ title: "API not yet implemented",
+ variant: "warning",
+ message: "API not yet implemented",
+ });
+ };
+
constructor(
protected i18nService: I18nService,
protected activatedRoute: ActivatedRoute,
protected router: Router,
+ private unmarkCriticalApplicationApiService: UnmarkCriticalApplicationApiService,
+ protected toastService: ToastService,
) {
- this.dataSource.data = []; //applicationTableMockData;
+ this.dataSource.data = applicationTableMockData;
this.searchControl.valueChanges
.pipe(debounceTime(200), takeUntilDestroyed())
.subscribe((v) => (this.dataSource.filter = v));
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index a0b4793916d..8b9778675af 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -113,6 +113,12 @@
"totalApplications": {
"message": "Total applications"
},
+ "unmarkAsCriticalApp": {
+ "message": "Unmark as critical app"
+ },
+ "criticalApplicationSuccessfullyUnmarked": {
+ "message": "Critical application successfully unmarked"
+ },
"whatTypeOfItem": {
"message": "What type of item is this?"
},
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/index.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/index.ts
index c7bace84e5b..9193a7d2e3f 100644
--- a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/index.ts
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/index.ts
@@ -1,2 +1,3 @@
export * from "./member-cipher-details-api.service";
export * from "./password-health.service";
+export * from "./unmark-critical-application-api.service";
diff --git a/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/unmark-critical-application-api.service.ts b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/unmark-critical-application-api.service.ts
new file mode 100644
index 00000000000..de04c7bd004
--- /dev/null
+++ b/bitwarden_license/bit-common/src/tools/reports/risk-insights/services/unmark-critical-application-api.service.ts
@@ -0,0 +1,25 @@
+import { Injectable } from "@angular/core";
+
+import { ApiService } from "@bitwarden/common/abstractions/api.service";
+
+@Injectable()
+export class UnmarkCriticalApplicationApiService {
+ constructor(private apiService: ApiService) {}
+
+ /**
+ * Unmark a critical application for organization
+ * @param orgId OrganizationId to get member cipher details for
+ * @returns void
+ */
+ async unmarkCriticalApplication(orgId: string, hostname: string): Promise {
+ // TODO - Properly implement this method once the API is ready
+ // const response = await this.apiService.send(
+ // "GET",
+ // "/organizations/" + orgId + "/unmark-as-critical-application",
+ // null,
+ // true,
+ // true,
+ // );
+ // return response;
+ }
+}