mirror of
https://github.com/bitwarden/browser
synced 2026-01-03 09:03:32 +00:00
[PM-24469] Implement Risk Insights for Premium in Cipher view component (#17012)
* [PM-24469] Refactor CipherViewComponent to use Angular signals and computed properties for improved reactivity * [PM-24469] Refactor CipherViewComponent to utilize Angular signals for organization data retrieval * [PM-24469] Refactor CipherViewComponent to utilize Angular signals for folder data retrieval * [PM-24469] Cleanup organization signal * [PM-24469] Refactor CipherViewComponent to replace signal for card expiration with computed property * [PM-24469] Improve collections loading in CipherViewComponent * [PM-24469] Remove redundant loadCipherData method * [PM-24469] Refactor CipherViewComponent to replace signal with computed property for pending change password tasks * [PM-24469] Refactor LoginCredentialsViewComponent to rename hadPendingChangePasswordTask to showChangePasswordLink for clarity * [PM-24469] Introduce showChangePasswordLink computed property for improved readability * [PM-24469] Initial RI for premium logic * [PM-24469] Refactor checkPassword risk checking logic * [PM-24469] Cleanup premium check * [PM-24469] Cleanup UI visuals * [PM-24469] Fix missing typography import * [PM-24469] Cleanup docs * [PM-24469] Add feature flag * [PM-24469] Ensure password risk check is only performed when the feature is enabled, and the cipher is editable by the user, and it has a password * [PM-24469] Refactor password risk evaluation logic and add unit tests for risk assessment * [PM-24469] Fix mismatched CipherId type * [PM-24469] Fix test dependencies * [PM-24469] Fix config service mock in emergency view dialog spec * [PM-24469] Wait for decrypted vault before calculating cipher risk * [PM-24469] startWith(false) for passwordIsAtRisk signal to avoid showing stale values when cipher changes * [PM-24469] Exclude organization owned ciphers from JIT risk analysis * [PM-24469] Add initial cipher-view component test boilerplate * [PM-24469] Add passwordIsAtRisk signal tests * [PM-24469] Ignore soft deleted items for RI for premium feature * [PM-24469] Fix tests
This commit is contained in:
@@ -1,89 +1,85 @@
|
||||
<ng-container *ngIf="!!cipher">
|
||||
<bit-callout *ngIf="cardIsExpired" type="info" [title]="'cardExpiredTitle' | i18n">
|
||||
<ng-container *ngIf="!!cipher()">
|
||||
<bit-callout *ngIf="cardIsExpired()" type="info" [title]="'cardExpiredTitle' | i18n">
|
||||
{{ "cardExpiredMessage" | i18n }}
|
||||
</bit-callout>
|
||||
|
||||
<bit-callout
|
||||
*ngIf="!hasLoginUri && hadPendingChangePasswordTask"
|
||||
*ngIf="!hasLoginUri() && hadPendingChangePasswordTask()"
|
||||
type="warning"
|
||||
[title]="'missingWebsite' | i18n"
|
||||
>
|
||||
{{ "changeAtRiskPasswordAndAddWebsite" | i18n }}
|
||||
</bit-callout>
|
||||
|
||||
<bit-callout *ngIf="hasLoginUri && hadPendingChangePasswordTask" type="warning" [title]="''">
|
||||
<a bitLink href="#" appStopClick (click)="launchChangePassword()">
|
||||
<bit-callout *ngIf="showChangePasswordLink()" type="warning" [title]="''">
|
||||
<a bitLink href="#" appStopClick (click)="launchChangePassword()" linkType="secondary">
|
||||
{{ "changeAtRiskPassword" | i18n }}
|
||||
<i class="bwi bwi-external-link tw-ml-1" aria-hidden="true"></i>
|
||||
</a>
|
||||
</bit-callout>
|
||||
|
||||
<!-- HELPER TEXT -->
|
||||
<p
|
||||
class="tw-text-sm tw-text-muted"
|
||||
bitTypography="helper"
|
||||
*ngIf="cipher?.isDeleted && !cipher?.edit"
|
||||
>
|
||||
<p class="tw-text-muted" bitTypography="helper" *ngIf="cipher()?.isDeleted && !cipher()?.edit">
|
||||
{{ "noEditPermissions" | i18n }}
|
||||
</p>
|
||||
|
||||
<!-- ITEM DETAILS -->
|
||||
<app-item-details-v2
|
||||
[cipher]="cipher"
|
||||
[organization]="organization$ | async"
|
||||
[collections]="collections"
|
||||
[folder]="folder$ | async"
|
||||
[hideOwner]="isAdminConsole"
|
||||
[cipher]="cipher()"
|
||||
[organization]="organization()"
|
||||
[collections]="resolvedCollections()"
|
||||
[folder]="folder()"
|
||||
[hideOwner]="isAdminConsole()"
|
||||
>
|
||||
</app-item-details-v2>
|
||||
|
||||
<!-- LOGIN CREDENTIALS -->
|
||||
<app-login-credentials-view
|
||||
*ngIf="hasLogin"
|
||||
[cipher]="cipher"
|
||||
*ngIf="hasLogin()"
|
||||
[cipher]="cipher()"
|
||||
[activeUserId]="activeUserId$ | async"
|
||||
[hadPendingChangePasswordTask]="hadPendingChangePasswordTask && cipher?.login.uris.length > 0"
|
||||
[showChangePasswordLink]="showChangePasswordLink()"
|
||||
(handleChangePassword)="launchChangePassword()"
|
||||
></app-login-credentials-view>
|
||||
|
||||
<!-- AUTOFILL OPTIONS -->
|
||||
<app-autofill-options-view
|
||||
*ngIf="hasAutofill"
|
||||
[loginUris]="cipher.login.uris"
|
||||
[cipherId]="cipher.id"
|
||||
*ngIf="hasAutofill()"
|
||||
[loginUris]="cipher()!.login.uris"
|
||||
[cipherId]="cipher()!.id"
|
||||
>
|
||||
</app-autofill-options-view>
|
||||
|
||||
<!-- CARD DETAILS -->
|
||||
<app-card-details-view *ngIf="hasCard" [cipher]="cipher"></app-card-details-view>
|
||||
<app-card-details-view *ngIf="hasCard()" [cipher]="cipher()"></app-card-details-view>
|
||||
|
||||
<!-- IDENTITY SECTIONS -->
|
||||
<app-view-identity-sections *ngIf="cipher.identity" [cipher]="cipher">
|
||||
<app-view-identity-sections *ngIf="cipher()?.identity" [cipher]="cipher()">
|
||||
</app-view-identity-sections>
|
||||
|
||||
<!-- SshKEY SECTIONS -->
|
||||
<app-sshkey-view *ngIf="hasSshKey" [sshKey]="cipher.sshKey"></app-sshkey-view>
|
||||
<app-sshkey-view *ngIf="hasSshKey()" [sshKey]="cipher()!.sshKey"></app-sshkey-view>
|
||||
|
||||
<!-- ADDITIONAL OPTIONS -->
|
||||
<ng-container *ngIf="cipher.notes">
|
||||
<app-additional-options [notes]="cipher.notes"> </app-additional-options>
|
||||
<ng-container *ngIf="cipher()?.notes">
|
||||
<app-additional-options [notes]="cipher()!.notes"> </app-additional-options>
|
||||
</ng-container>
|
||||
|
||||
<!-- CUSTOM FIELDS -->
|
||||
<ng-container *ngIf="cipher.hasFields">
|
||||
<app-custom-fields-v2 [cipher]="cipher"> </app-custom-fields-v2>
|
||||
<ng-container *ngIf="cipher()?.hasFields">
|
||||
<app-custom-fields-v2 [cipher]="cipher()"> </app-custom-fields-v2>
|
||||
</ng-container>
|
||||
|
||||
<!-- ATTACHMENTS SECTION -->
|
||||
<ng-container *ngIf="cipher.hasAttachments">
|
||||
<ng-container *ngIf="cipher()?.hasAttachments">
|
||||
<app-attachments-v2-view
|
||||
[emergencyAccessId]="emergencyAccessId"
|
||||
[cipher]="cipher"
|
||||
[admin]="isAdminConsole"
|
||||
[emergencyAccessId]="emergencyAccessId()"
|
||||
[cipher]="cipher()"
|
||||
[admin]="isAdminConsole()"
|
||||
>
|
||||
</app-attachments-v2-view>
|
||||
</ng-container>
|
||||
|
||||
<!-- ITEM HISTORY SECTION -->
|
||||
<app-item-history-v2 [cipher]="cipher"> </app-item-history-v2>
|
||||
<app-item-history-v2 [cipher]="cipher()"> </app-item-history-v2>
|
||||
</ng-container>
|
||||
|
||||
Reference in New Issue
Block a user