diff --git a/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts index ccd7a27a3fb..51b4a1520bd 100644 --- a/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts +++ b/apps/web/src/app/auth/settings/security/password-settings/password-settings.component.ts @@ -1,6 +1,9 @@ -import { Component } from "@angular/core"; +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { firstValueFrom } from "rxjs"; import { ChangeExistingPasswordComponent } from "@bitwarden/auth/angular"; +import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { CalloutModule } from "@bitwarden/components"; import { I18nPipe } from "@bitwarden/ui-common"; @@ -12,4 +15,20 @@ import { WebauthnLoginSettingsModule } from "../../webauthn-login-settings"; templateUrl: "password-settings.component.html", imports: [CalloutModule, ChangeExistingPasswordComponent, I18nPipe, WebauthnLoginSettingsModule], }) -export class PasswordSettingsComponent {} +export class PasswordSettingsComponent implements OnInit { + constructor( + private router: Router, + private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, + ) {} + + async ngOnInit() { + const userHasMasterPassword = await firstValueFrom( + this.userDecryptionOptionsService.hasMasterPassword$, + ); + + if (!userHasMasterPassword) { + await this.router.navigate(["/settings/security/two-factor"]); + return; + } + } +} diff --git a/libs/auth/src/angular/change-existing-password/change-existing-password.component.html b/libs/auth/src/angular/change-existing-password/change-existing-password.component.html index 389ffbd6b3e..17320e0ff95 100644 --- a/libs/auth/src/angular/change-existing-password/change-existing-password.component.html +++ b/libs/auth/src/angular/change-existing-password/change-existing-password.component.html @@ -6,5 +6,6 @@ [masterPasswordPolicyOptions]="masterPasswordPolicyOptions" [inlineButtons]="true" [primaryButtonText]="{ key: 'changeMasterPassword' }" + (onPasswordFormSubmit)="handlePasswordFormSubmit($event)" > diff --git a/libs/auth/src/angular/change-existing-password/change-existing-password.component.ts b/libs/auth/src/angular/change-existing-password/change-existing-password.component.ts index 1b37f25d407..a11592553fa 100644 --- a/libs/auth/src/angular/change-existing-password/change-existing-password.component.ts +++ b/libs/auth/src/angular/change-existing-password/change-existing-password.component.ts @@ -9,6 +9,7 @@ import { InputPasswordComponent, InputPasswordFlow, } from "../input-password/input-password.component"; +import { PasswordInputResult } from "../input-password/password-input-result"; @Component({ standalone: true, @@ -36,4 +37,8 @@ export class ChangeExistingPasswordComponent implements OnInit { this.policyService.masterPasswordPolicyOptions$(), ); } + + handlePasswordFormSubmit(passwordInputResult: PasswordInputResult) { + // TODO-rr-bw: Full Sync if Rotate User Key is true (see setupSubmitActions) + } }