-
-
-
-
-
{{ "yourVaultIsLocked" | i18n }}
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/apps/web/src/app/auth/lock.component.ts b/apps/web/src/app/auth/lock.component.ts
index 021bf0f9df..6b52d0160b 100644
--- a/apps/web/src/app/auth/lock.component.ts
+++ b/apps/web/src/app/auth/lock.component.ts
@@ -1,18 +1,49 @@
-import { Component } from "@angular/core";
+import { Component, inject } from "@angular/core";
+import { FormBuilder, Validators } from "@angular/forms";
import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component";
+import { SharedModule } from "../shared";
+
@Component({
selector: "app-lock",
templateUrl: "lock.component.html",
+ standalone: true,
+ imports: [SharedModule],
})
export class LockComponent extends BaseLockComponent {
+ formBuilder = inject(FormBuilder);
+
+ formGroup = this.formBuilder.group({
+ masterPassword: ["", { validators: Validators.required, updateOn: "submit" }],
+ });
+
+ get masterPasswordFormControl() {
+ return this.formGroup.controls.masterPassword;
+ }
+
async ngOnInit() {
await super.ngOnInit();
+
+ this.masterPasswordFormControl.setValue(this.masterPassword);
+
this.onSuccessfulSubmit = async () => {
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.router.navigateByUrl(this.successRoute);
+ await this.router.navigateByUrl(this.successRoute);
};
}
+
+ async superSubmit() {
+ await super.submit();
+ }
+
+ submit = async () => {
+ this.formGroup.markAllAsTouched();
+
+ if (this.formGroup.invalid) {
+ return;
+ }
+
+ this.masterPassword = this.masterPasswordFormControl.value;
+ await this.superSubmit();
+ };
}
diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts
index 246f4bdc40..8f3638ac2e 100644
--- a/apps/web/src/app/oss-routing.module.ts
+++ b/apps/web/src/app/oss-routing.module.ts
@@ -17,6 +17,7 @@ import {
RegistrationStartComponent,
RegistrationStartSecondaryComponent,
RegistrationStartSecondaryComponentData,
+ LockIcon,
} from "@bitwarden/auth/angular";
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
@@ -113,11 +114,6 @@ const routes: Routes = [
component: SetPasswordComponent,
data: { titleId: "setMasterPassword" } satisfies DataProperties,
},
- {
- path: "lock",
- component: LockComponent,
- canActivate: [deepLinkGuard(), lockGuard()],
- },
{ path: "verify-email", component: VerifyEmailTokenComponent },
{
path: "accept-organization",
@@ -246,6 +242,21 @@ const routes: Routes = [
pageTitle: "logIn",
},
},
+ {
+ path: "lock",
+ canActivate: [deepLinkGuard(), lockGuard()],
+ children: [
+ {
+ path: "",
+ component: LockComponent,
+ },
+ ],
+ data: {
+ pageTitle: "yourVaultIsLockedV2",
+ pageIcon: LockIcon,
+ showReadonlyHostname: true,
+ } satisfies AnonLayoutWrapperData,
+ },
{
path: "2fa",
canActivate: [unauthGuardFn()],
diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts
index 107cdd040e..9f67c859f2 100644
--- a/apps/web/src/app/shared/loose-components.module.ts
+++ b/apps/web/src/app/shared/loose-components.module.ts
@@ -22,7 +22,6 @@ import { VerifyRecoverDeleteProviderComponent } from "../admin-console/providers
import { SponsoredFamiliesComponent } from "../admin-console/settings/sponsored-families.component";
import { SponsoringOrgRowComponent } from "../admin-console/settings/sponsoring-org-row.component";
import { HintComponent } from "../auth/hint.component";
-import { LockComponent } from "../auth/lock.component";
import { RecoverDeleteComponent } from "../auth/recover-delete.component";
import { RecoverTwoFactorComponent } from "../auth/recover-two-factor.component";
import { RegisterFormModule } from "../auth/register-form/register-form.module";
@@ -141,7 +140,6 @@ import { SharedModule } from "./shared.module";
FolderAddEditComponent,
FrontendLayoutComponent,
HintComponent,
- LockComponent,
OrgAddEditComponent,
OrgAttachmentsComponent,
OrgCollectionsComponent,
@@ -213,7 +211,6 @@ import { SharedModule } from "./shared.module";
FolderAddEditComponent,
FrontendLayoutComponent,
HintComponent,
- LockComponent,
OrgAddEditComponent,
OrganizationLayoutComponent,
OrgAttachmentsComponent,
diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json
index 9f0dbf4e05..16df442024 100644
--- a/apps/web/src/locales/en/messages.json
+++ b/apps/web/src/locales/en/messages.json
@@ -854,8 +854,8 @@
"emailAddress": {
"message": "Email address"
},
- "yourVaultIsLocked": {
- "message": "Your vault is locked. Verify your master password to continue."
+ "yourVaultIsLockedV2": {
+ "message": "Your vault is locked."
},
"uuid":{
"message" : "UUID"