import { Component, OnInit } from "@angular/core"; import { firstValueFrom, Observable } from "rxjs"; import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { HeaderModule } from "../../../layouts/header/header.module"; import { SharedModule } from "../../../shared"; // FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection @Component({ templateUrl: "security.component.html", imports: [SharedModule, HeaderModule], }) export class SecurityComponent implements OnInit { showChangePassword = true; changePasswordRoute = "password"; consolidatedSessionTimeoutComponent$: Observable; constructor( private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, private accountService: AccountService, private configService: ConfigService, ) { this.consolidatedSessionTimeoutComponent$ = this.configService.getFeatureFlag$( FeatureFlag.ConsolidatedSessionTimeoutComponent, ); } async ngOnInit() { const userId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)); this.showChangePassword = userId ? await firstValueFrom(this.userDecryptionOptionsService.hasMasterPasswordById$(userId)) : false; } }