1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-02-14 01:01:31 +01:00

PM-8113 - TwoFactorAuth - Save off 2FA providers map so we can only show the select another 2FA method if the user actually has more than 1 configured 2FA method.

This commit is contained in:
Jared Snider 2025-02-04 13:56:02 -05:00
parent adf448ce76
commit fa8f9df07e
No known key found for this signature in database
GPG Key ID: A149DDD612516286
2 changed files with 11 additions and 11 deletions

View File

@ -22,7 +22,7 @@
<app-two-factor-auth-duo <app-two-factor-auth-duo
(tokenEmitter)="submit($event)" (tokenEmitter)="submit($event)"
[providerData]="providerData" [providerData]="selectedProviderData"
*ngIf=" *ngIf="
selectedProviderType === providerType.OrganizationDuo || selectedProviderType === providerType.OrganizationDuo ||
selectedProviderType === providerType.Duo selectedProviderType === providerType.Duo
@ -76,6 +76,7 @@
buttonType="secondary" buttonType="secondary"
bitButton bitButton
bitFormButton bitFormButton
*ngIf="twoFactorProviders?.size > 1"
(click)="selectOtherTwofactorMethod()" (click)="selectOtherTwofactorMethod()"
> >
<span> {{ "selectAnotherMethod" | i18n }} </span> <span> {{ "selectAnotherMethod" | i18n }} </span>

View File

@ -24,7 +24,6 @@ import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-p
import { AuthResult } from "@bitwarden/common/auth/models/domain/auth-result"; import { AuthResult } from "@bitwarden/common/auth/models/domain/auth-result";
import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason"; import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason";
import { TokenTwoFactorRequest } from "@bitwarden/common/auth/models/request/identity-token/token-two-factor.request"; import { TokenTwoFactorRequest } from "@bitwarden/common/auth/models/request/identity-token/token-two-factor.request";
import { TwoFactorProviders } from "@bitwarden/common/auth/services/two-factor.service";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
@ -90,11 +89,12 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy {
orgSsoIdentifier: string | undefined = undefined; orgSsoIdentifier: string | undefined = undefined;
inSsoFlow = false; inSsoFlow = false;
providers = TwoFactorProviders;
providerType = TwoFactorProviderType; providerType = TwoFactorProviderType;
selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator; selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;
// TODO: PM-17176 - build more specific type for 2FA metadata // TODO: PM-17176 - build more specific type for 2FA metadata
providerData: { [key: string]: string } | undefined; twoFactorProviders: Map<TwoFactorProviderType, { [key: string]: string }> | null = null;
selectedProviderData: { [key: string]: string } | undefined;
@ViewChild("duoComponent") duoComponent!: TwoFactorAuthDuoComponent; @ViewChild("duoComponent") duoComponent!: TwoFactorAuthDuoComponent;
@ -154,7 +154,7 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy {
this.listenForAuthnSessionTimeout(); this.listenForAuthnSessionTimeout();
await this.setSelected2faProviderType(); await this.setSelected2faProviderType();
await this.set2faProviderData(); await this.set2faProvidersAndData();
await this.setAnonLayoutDataByTwoFactorProviderType(); await this.setAnonLayoutDataByTwoFactorProviderType();
await this.twoFactorAuthComponentService.extendPopupWidthIfRequired?.( await this.twoFactorAuthComponentService.extendPopupWidthIfRequired?.(
@ -182,11 +182,10 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy {
this.selectedProviderType = await this.twoFactorService.getDefaultProvider(webAuthnSupported); this.selectedProviderType = await this.twoFactorService.getDefaultProvider(webAuthnSupported);
} }
private async set2faProviderData() { private async set2faProvidersAndData() {
const providerData = await this.twoFactorService.getProviders().then((providers) => { this.twoFactorProviders = await this.twoFactorService.getProviders();
return providers?.get(this.selectedProviderType); const providerData = this.twoFactorProviders?.get(this.selectedProviderType);
}); this.selectedProviderData = providerData;
this.providerData = providerData;
} }
private listenForAuthnSessionTimeout() { private listenForAuthnSessionTimeout() {
@ -278,7 +277,7 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy {
const providerData = await this.twoFactorService.getProviders().then((providers) => { const providerData = await this.twoFactorService.getProviders().then((providers) => {
return providers?.get(response.type); return providers?.get(response.type);
}); });
this.providerData = providerData; this.selectedProviderData = providerData;
this.selectedProviderType = response.type; this.selectedProviderType = response.type;
await this.setAnonLayoutDataByTwoFactorProviderType(); await this.setAnonLayoutDataByTwoFactorProviderType();