mirror of
https://github.com/bitwarden/browser
synced 2025-12-21 02:33:46 +00:00
* [PM-15506] Wire up vNextOrganizationService for libs/common and libs/angular (#12683) * Wire up vNextOrganizationService in PolicyService * Wire vNextOrganizationService in SyncService * wire vNextOrganizationService for EventCollectionService * wire vNextOrganizationService for KeyConnectorService * wire up vNextOrganizationService for CipherAuthorizationService * Wire up vNextOrganizationService in PolicyService * Wire vNextOrganizationService in SyncService * wire vNextOrganizationService for EventCollectionService * wire vNextOrganizationService for KeyConnectorService * wire up vNextOrganizationService for CipherAuthorizationService * wire vNextOrganizationService for share.component * wire vNextOrganizationService for collections.component * wire vNextOrganizationServcie for add-account-credit-dialog * wire vNextOrganizationService for vault-filter.service * fix browser errors for vNextOrganizationService implementation in libs * fix desktop errors for vNextOrganizationService implementation for libs * fix linter errors * fix CLI errors on vNextOrganizationServcie implementations for libs * [PM-15506] Wire up vNextOrganizationService for web client (#12810) PR to a feature branch, no need to review until this goes to main. * implement vNextOrganization service for browser client (#12844) PR to feature branch, no need for review yet. * wire vNextOrganizationService for licence and some web router guards * wire vNextOrganizationService in tests * remove vNext notation for OrganizationService and related * Merge branch 'main' into ac/pm-15506-vNextOrganizationService * fix tsstrict error * fix test, fix ts strict error
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { DialogRef } from "@angular/cdk/dialog";
|
|
import { Component } from "@angular/core";
|
|
import { FormBuilder, ReactiveFormsModule, Validators } from "@angular/forms";
|
|
import { firstValueFrom } from "rxjs";
|
|
|
|
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
|
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
import { getUserId } from "@bitwarden/common/auth/services/account.service";
|
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
|
import {
|
|
AsyncActionsModule,
|
|
ButtonModule,
|
|
DialogModule,
|
|
FormFieldModule,
|
|
IconButtonModule,
|
|
ToastService,
|
|
} from "@bitwarden/components";
|
|
import { KeyService } from "@bitwarden/key-management";
|
|
|
|
/**
|
|
* Used to verify the user's Master Password for the "Master Password Re-prompt" feature only.
|
|
* See UserVerificationComponent for any other situation where you need to verify the user's identity.
|
|
*/
|
|
@Component({
|
|
standalone: true,
|
|
selector: "vault-password-reprompt",
|
|
imports: [
|
|
JslibModule,
|
|
AsyncActionsModule,
|
|
ButtonModule,
|
|
DialogModule,
|
|
FormFieldModule,
|
|
IconButtonModule,
|
|
ReactiveFormsModule,
|
|
],
|
|
templateUrl: "password-reprompt.component.html",
|
|
})
|
|
export class PasswordRepromptComponent {
|
|
formGroup = this.formBuilder.group({
|
|
masterPassword: ["", { validators: [Validators.required], updateOn: "submit" }],
|
|
});
|
|
|
|
constructor(
|
|
protected keyService: KeyService,
|
|
protected platformUtilsService: PlatformUtilsService,
|
|
protected i18nService: I18nService,
|
|
protected formBuilder: FormBuilder,
|
|
protected dialogRef: DialogRef,
|
|
private toastService: ToastService,
|
|
protected accountService: AccountService,
|
|
) {}
|
|
|
|
submit = async () => {
|
|
// Exit early when a master password is not provided.
|
|
// The form field required error will be shown to users in these cases.
|
|
if (!this.formGroup.value.masterPassword) {
|
|
return;
|
|
}
|
|
|
|
const userId = await firstValueFrom(getUserId(this.accountService.activeAccount$));
|
|
|
|
if (userId == null) {
|
|
throw new Error("An active user is expected while doing password reprompt.");
|
|
}
|
|
|
|
const storedMasterKey = await this.keyService.getOrDeriveMasterKey(
|
|
this.formGroup.value.masterPassword,
|
|
userId,
|
|
);
|
|
if (
|
|
!(await this.keyService.compareKeyHash(
|
|
this.formGroup.value.masterPassword,
|
|
storedMasterKey,
|
|
userId,
|
|
))
|
|
) {
|
|
this.toastService.showToast({
|
|
variant: "error",
|
|
title: this.i18nService.t("errorOccurred"),
|
|
message: this.i18nService.t("invalidMasterPassword"),
|
|
});
|
|
return;
|
|
}
|
|
|
|
this.dialogRef.close(true);
|
|
};
|
|
}
|