1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-08 20:50:28 +00:00

[PM-18721] add handlePasswordFormSubmit() to takeover component and update verifyFlow() method on InputPasswordComponent

This commit is contained in:
rr-bw
2025-05-04 21:22:13 -07:00
parent 1e22cb51a3
commit c428a4078a
3 changed files with 99 additions and 9 deletions

View File

@@ -108,8 +108,8 @@ export class InputPasswordComponent implements OnInit {
@Output() onSecondaryButtonClick = new EventEmitter<void>();
@Input({ required: true }) flow!: InputPasswordFlow;
@Input({ required: true, transform: (val: string) => val.trim().toLowerCase() }) email!: string;
@Input({ transform: (val: string) => val?.trim().toLowerCase() }) email?: string;
@Input() userId?: UserId;
@Input() loading = false;
@Input() masterPasswordPolicyOptions: MasterPasswordPolicyOptions | null = null;
@@ -247,7 +247,7 @@ export class InputPasswordComponent implements OnInit {
}
protected submit = async () => {
this.verifyFlowAndUserId();
this.verifyFlow();
this.formGroup.markAllAsTouched();
@@ -375,13 +375,16 @@ export class InputPasswordComponent implements OnInit {
* We cannot mark the `userId` `@Input` as required because in an account registration
* flow we will not have an active account `userId` to pass down.
*/
private verifyFlowAndUserId() {
private verifyFlow() {
/**
* There can be no active account (and thus no userId) in an account registration
* flow. If there is a userId, it means the dev passed down the wrong InputPasswordFlow
* from the parent component.
*/
if (this.flow === InputPasswordFlow.AccountRegistration) {
if (
this.flow === InputPasswordFlow.AccountRegistration ||
this.flow === InputPasswordFlow.ChangePasswordDelegation
) {
if (this.userId) {
throw new Error(
"There can be no userId in an account registration flow. Please pass down the appropriate InputPasswordFlow from the parent component.",
@@ -395,11 +398,30 @@ export class InputPasswordComponent implements OnInit {
* (a) passed down the wrong InputPasswordFlow, or
* (b) passed down the correct InputPasswordFlow but failed to pass down a userId
*/
if (this.flow !== InputPasswordFlow.AccountRegistration) {
if (
this.flow !== InputPasswordFlow.AccountRegistration &&
this.flow !== InputPasswordFlow.ChangePasswordDelegation
) {
if (!this.userId) {
throw new Error("The selected InputPasswordFlow requires that a userId be passed down");
}
}
if (this.flow === InputPasswordFlow.ChangePasswordDelegation) {
if (this.email) {
throw new Error(
"There should be no email in a ChangePasswordDelegation flow. Please pass down the appropriate InputPasswordFlow from the parent component.",
);
}
}
if (this.flow !== InputPasswordFlow.ChangePasswordDelegation) {
if (!this.email) {
throw new Error(
"The selected InputPasswordFlow requires that an email be passed down to create a master key.",
);
}
}
}
/**