web/flows/authenticator_validate: auto-select TOTP device when password manager prefills it
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -11,6 +11,7 @@ import AKGlobal from "../../../authentik.css"; | |||||||
| import { BaseStage, StageHost } from "../base"; | import { BaseStage, StageHost } from "../base"; | ||||||
| import "./AuthenticatorValidateStageWebAuthn"; | import "./AuthenticatorValidateStageWebAuthn"; | ||||||
| import "./AuthenticatorValidateStageCode"; | import "./AuthenticatorValidateStageCode"; | ||||||
|  | import { PasswordManagerPrefill } from "../identification/IdentificationStage"; | ||||||
|  |  | ||||||
| export enum DeviceClasses { | export enum DeviceClasses { | ||||||
|     STATIC = "static", |     STATIC = "static", | ||||||
| @ -83,6 +84,17 @@ export class AuthenticatorValidateStage extends BaseStage implements StageHost { | |||||||
|                         <small>${gettext("Use a security key to prove your identity.")}</small> |                         <small>${gettext("Use a security key to prove your identity.")}</small> | ||||||
|                     </div>`; |                     </div>`; | ||||||
|             case DeviceClasses.TOTP: |             case DeviceClasses.TOTP: | ||||||
|  |                 // TOTP is a bit special, assuming that TOTP is allowed from the backend, | ||||||
|  |                 // and we have a pre-filled value from the password manager, | ||||||
|  |                 // directly set the the TOTP device Challenge as active. | ||||||
|  |                 if (PasswordManagerPrefill.totp) { | ||||||
|  |                     console.debug("authentik/stages/authenticator_validate: found prefill totp code, selecting totp challenge"); | ||||||
|  |                     this.selectedDeviceChallenge = deviceChallenge; | ||||||
|  |                     // Delay the update as a re-render isn't triggered from here | ||||||
|  |                     setTimeout(() => { | ||||||
|  |                         this.requestUpdate(); | ||||||
|  |                     }, 100); | ||||||
|  |                 } | ||||||
|                 return html`<i class="fas fa-clock"></i> |                 return html`<i class="fas fa-clock"></i> | ||||||
|                     <div class="right"> |                     <div class="right"> | ||||||
|                         <p>${gettext("Traditional authenticator")}</p> |                         <p>${gettext("Traditional authenticator")}</p> | ||||||
| @ -141,9 +153,9 @@ export class AuthenticatorValidateStage extends BaseStage implements StageHost { | |||||||
|     render(): TemplateResult { |     render(): TemplateResult { | ||||||
|         if (!this.challenge) { |         if (!this.challenge) { | ||||||
|             return html`<ak-empty-state |             return html`<ak-empty-state | ||||||
|     ?loading="${true}" |                 ?loading="${true}" | ||||||
|     header=${gettext("Loading")}> |                 header=${gettext("Loading")}> | ||||||
| </ak-empty-state>`; |             </ak-empty-state>`; | ||||||
|         } |         } | ||||||
|         // User only has a single device class, so we don't show a picker |         // User only has a single device class, so we don't show a picker | ||||||
|         if (this.challenge?.device_challenges.length === 1) { |         if (this.challenge?.device_challenges.length === 1) { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer