mirror of
https://github.com/bitwarden/browser
synced 2026-02-18 18:33:50 +00:00
committed by
jaasen-livefront
parent
cc30a9b912
commit
30a09ee104
@@ -93,8 +93,8 @@
|
||||
"assignMembersTasksToMonitorProgress": {
|
||||
"message": "Assign members tasks to monitor progress"
|
||||
},
|
||||
"onceYouReviewApps": {
|
||||
"message": "Once you review applications and mark them as critical, you can assign tasks to members to resolve at-risk items and monitor progress here"
|
||||
"onceYouReviewApplications": {
|
||||
"message": "Once you review applications and mark them as critical, assign tasks to your members to change their passwords."
|
||||
},
|
||||
"sendReminders": {
|
||||
"message": "Send reminders"
|
||||
@@ -178,41 +178,35 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"noApplicationsInOrgTitle": {
|
||||
"message": "No applications found for $ORG NAME$",
|
||||
"placeholders": {
|
||||
"org name": {
|
||||
"content": "$1",
|
||||
"example": "Company Name"
|
||||
}
|
||||
}
|
||||
"noDataInOrgTitle": {
|
||||
"message": "No data found"
|
||||
},
|
||||
"noApplicationsInOrgDescription": {
|
||||
"message": "Import your organization's login data to start monitoring credential security risks. Once imported you get to:"
|
||||
"noDataInOrgDescription": {
|
||||
"message": "Import your organization's login data to get started with Access Intelligence. Once you do that, you'll be able to:"
|
||||
},
|
||||
"benefit1Title": {
|
||||
"message": "Prioritize risks"
|
||||
"feature1Title": {
|
||||
"message": "Mark applications as critical"
|
||||
},
|
||||
"benefit1Description": {
|
||||
"message": "Focus on applications that matter the most"
|
||||
"feature1Description": {
|
||||
"message": "This will help you remove risks to your most important applications first."
|
||||
},
|
||||
"benefit2Title": {
|
||||
"message": "Guide remediation"
|
||||
"feature2Title": {
|
||||
"message": "Help members improve their security"
|
||||
},
|
||||
"benefit2Description": {
|
||||
"message": "Assign at-risk members guided tasks to rotate at-risk credentials"
|
||||
"feature2Description": {
|
||||
"message": "Assign at-risk members guided security tasks to update credentials."
|
||||
},
|
||||
"benefit3Title": {
|
||||
"feature3Title": {
|
||||
"message": "Monitor progress"
|
||||
},
|
||||
"benefit3Description": {
|
||||
"message": "Track changes over time to show security improvements"
|
||||
"feature3Description": {
|
||||
"message": "Track changes over time to show security improvements."
|
||||
},
|
||||
"noReportRunTitle": {
|
||||
"message": "Run your first report to see applications"
|
||||
"noReportsRunTitle": {
|
||||
"message": "Generate report"
|
||||
},
|
||||
"noReportRunDescription": {
|
||||
"message": "Generate a risk insights report to analyze your organization's applications and identify at-risk passwords that need attention. Running your first report will:"
|
||||
"noReportsRunDescription": {
|
||||
"message": "You’re ready to start generating reports. Once you generate, you’ll be able to:"
|
||||
},
|
||||
"noCriticalApplicationsTitle": {
|
||||
"message": "You haven’t marked any applications as critical"
|
||||
@@ -271,14 +265,14 @@
|
||||
"atRiskMembers": {
|
||||
"message": "At-risk members"
|
||||
},
|
||||
"membersWithAccessToAtRiskItemsForCriticalApps": {
|
||||
"message": "Members with access to at-risk items for critical applications"
|
||||
"membersWithAccessToAtRiskItemsForCriticalApplications": {
|
||||
"message": "These members have access to vulnerable items for critical applications."
|
||||
},
|
||||
"membersWithAtRiskPasswords": {
|
||||
"message": "Members with at-risk passwords"
|
||||
},
|
||||
"membersWillReceiveNotification": {
|
||||
"message": "Members will receive a notification to resolve at-risk logins through the browser extension."
|
||||
"membersWillReceiveSecurityTask": {
|
||||
"message": "Members of your organization will be assigned a task to change vulnerable passwords. They’ll receive a notification within their Bitwarden browser extension."
|
||||
},
|
||||
"membersAtRiskCount": {
|
||||
"message": "$COUNT$ members at-risk",
|
||||
@@ -307,8 +301,8 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"atRiskMembersDescription": {
|
||||
"message": "These members are logging into applications with weak, exposed, or reused passwords."
|
||||
"atRiskMemberDescription": {
|
||||
"message": "These members are logging into critical applications with weak, exposed, or reused passwords."
|
||||
},
|
||||
"atRiskMembersDescriptionNone": {
|
||||
"message": "These are no members logging into applications with weak, exposed, or reused passwords."
|
||||
@@ -391,14 +385,14 @@
|
||||
"prioritizeCriticalApplications": {
|
||||
"message": "Prioritize critical applications"
|
||||
},
|
||||
"selectCriticalApplicationsDescription": {
|
||||
"message": "Select which applications are most critical to your organization, then assign security tasks to members to resolve risks."
|
||||
"selectCriticalAppsDescription": {
|
||||
"message": "Select which applications are most critical to your organization. Then, you’ll be able to assign security tasks to members to remove risks."
|
||||
},
|
||||
"reviewNewApplications": {
|
||||
"message": "Review new applications"
|
||||
},
|
||||
"reviewNewApplicationsDescription": {
|
||||
"message": "We've highlighted at-risk items for new applications stored in Admin console that have weak, exposed, or reused passwords."
|
||||
"reviewNewAppsDescription": {
|
||||
"message": "Review new applications with vulnerable items and mark those you’d like to monitor closely as critical. Then, you’ll be able to assign security tasks to members to remove risks."
|
||||
},
|
||||
"clickIconToMarkAppAsCritical": {
|
||||
"message": "Click the star icon to mark an app as critical"
|
||||
@@ -9860,8 +9854,8 @@
|
||||
"assignTasks": {
|
||||
"message": "Assign tasks"
|
||||
},
|
||||
"assignTasksToMembers": {
|
||||
"message": "Assign tasks to members for guided resolution"
|
||||
"assignSecurityTasksToMembers": {
|
||||
"message": "Send notifications to change passwords"
|
||||
},
|
||||
"assignToCollections": {
|
||||
"message": "Assign to collections"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
</div>
|
||||
|
||||
<div class="tw-items-baseline tw-gap-2">
|
||||
<span bitTypography="body2">{{ "onceYouReviewApps" | i18n }}</span>
|
||||
<span bitTypography="body2">{{ "onceYouReviewApplications" | i18n }}</span>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<dirt-activity-card
|
||||
[title]="'atRiskMembers' | i18n"
|
||||
[cardMetrics]="'membersAtRiskCount' | i18n: totalCriticalAppsAtRiskMemberCount"
|
||||
[metricDescription]="'membersWithAccessToAtRiskItemsForCriticalApps' | i18n"
|
||||
[metricDescription]="'membersWithAccessToAtRiskItemsForCriticalApplications' | i18n"
|
||||
actionText="{{ 'viewAtRiskMembers' | i18n }}"
|
||||
[showActionLink]="totalCriticalAppsAtRiskMemberCount > 0"
|
||||
(actionClick)="onViewAtRiskMembers()"
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
|
||||
<!-- Description Text -->
|
||||
<div bitTypography="helper" class="tw-text-muted">
|
||||
{{ "membersWillReceiveNotification" | i18n }}
|
||||
{{ "membersWillReceiveSecurityTask" | i18n }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
? hasNoCriticalApplications()
|
||||
? ("prioritizeCriticalApplications" | i18n)
|
||||
: ("reviewNewApplications" | i18n)
|
||||
: ("assignTasksToMembers" | i18n)
|
||||
: ("assignSecurityTasksToMembers" | i18n)
|
||||
}}
|
||||
</span>
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
<p bitTypography="body1" class="tw-mb-5">
|
||||
{{
|
||||
hasNoCriticalApplications()
|
||||
? ("selectCriticalApplicationsDescription" | i18n)
|
||||
: ("reviewNewApplicationsDescription" | i18n)
|
||||
? ("selectCriticalAppsDescription" | i18n)
|
||||
: ("reviewNewAppsDescription" | i18n)
|
||||
}}
|
||||
</p>
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
<!-- Show Empty state when there are no applications (no ciphers to make reports on) -->
|
||||
<empty-state-card
|
||||
[videoSrc]="emptyStateVideoSrc"
|
||||
[title]="this.i18nService.t('noApplicationsInOrgTitle', organizationName)"
|
||||
[description]="this.i18nService.t('noApplicationsInOrgDescription')"
|
||||
[title]="this.i18nService.t('noDataInOrgTitle')"
|
||||
[description]="this.i18nService.t('noDataInOrgDescription')"
|
||||
[benefits]="emptyStateBenefits"
|
||||
[buttonText]="this.i18nService.t('importData')"
|
||||
[buttonIcon]="IMPORT_ICON"
|
||||
@@ -27,8 +27,8 @@
|
||||
<!-- Show empty state for no reports run -->
|
||||
<empty-state-card
|
||||
[videoSrc]="emptyStateVideoSrc"
|
||||
[title]="this.i18nService.t('noReportRunTitle')"
|
||||
[description]="this.i18nService.t('noReportRunDescription')"
|
||||
[title]="this.i18nService.t('noReportsRunTitle')"
|
||||
[description]="this.i18nService.t('noReportsRunDescription')"
|
||||
[benefits]="emptyStateBenefits"
|
||||
[buttonText]="this.i18nService.t('riskInsightsRunReport')"
|
||||
[buttonIcon]=""
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
} from "@angular/core";
|
||||
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
||||
import { ActivatedRoute, Router } from "@angular/router";
|
||||
import { combineLatest, EMPTY, firstValueFrom } from "rxjs";
|
||||
import { EMPTY, firstValueFrom } from "rxjs";
|
||||
import { distinctUntilChanged, map, tap } from "rxjs/operators";
|
||||
|
||||
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
||||
@@ -84,14 +84,11 @@ export class RiskInsightsComponent implements OnInit, OnDestroy {
|
||||
|
||||
dataLastUpdated: Date | null = null;
|
||||
|
||||
// Empty state properties
|
||||
protected organizationName = "";
|
||||
|
||||
// Empty state computed properties
|
||||
protected emptyStateBenefits: [string, string][] = [
|
||||
[this.i18nService.t("benefit1Title"), this.i18nService.t("benefit1Description")],
|
||||
[this.i18nService.t("benefit2Title"), this.i18nService.t("benefit2Description")],
|
||||
[this.i18nService.t("benefit3Title"), this.i18nService.t("benefit3Description")],
|
||||
[this.i18nService.t("feature1Title"), this.i18nService.t("feature1Description")],
|
||||
[this.i18nService.t("feature2Title"), this.i18nService.t("feature2Description")],
|
||||
[this.i18nService.t("feature3Title"), this.i18nService.t("feature3Description")],
|
||||
];
|
||||
protected emptyStateVideoSrc: string | null = "/videos/risk-insights-mark-as-critical.mp4";
|
||||
|
||||
@@ -140,17 +137,14 @@ export class RiskInsightsComponent implements OnInit, OnDestroy {
|
||||
)
|
||||
.subscribe();
|
||||
|
||||
// Combine report data, vault items check, organization details, and generation state
|
||||
// Subscribe to report data updates
|
||||
// This declarative pattern ensures proper cleanup and prevents memory leaks
|
||||
combineLatest([this.dataService.enrichedReportData$, this.dataService.organizationDetails$])
|
||||
this.dataService.enrichedReportData$
|
||||
.pipe(takeUntilDestroyed(this.destroyRef))
|
||||
.subscribe(([report, orgDetails]) => {
|
||||
.subscribe((report) => {
|
||||
// Update report state
|
||||
this.appsCount = report?.reportData.length ?? 0;
|
||||
this.dataLastUpdated = report?.creationDate ?? null;
|
||||
|
||||
// Update organization name
|
||||
this.organizationName = orgDetails?.organizationName ?? "";
|
||||
});
|
||||
|
||||
// Subscribe to drawer state changes
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<ng-container bitDialogContent>
|
||||
<span bitTypography="body1" class="tw-text-muted tw-text-sm">{{
|
||||
(drawerDetails.atRiskMemberDetails?.length > 0
|
||||
? "atRiskMembersDescription"
|
||||
? "atRiskMemberDescription"
|
||||
: "atRiskMembersDescriptionNone"
|
||||
) | i18n
|
||||
}}</span>
|
||||
|
||||
Reference in New Issue
Block a user