From 6ee85d57be92916f0cf4eb384b7ac47d2decdb2a Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Wed, 27 Jan 2021 18:44:59 +0100 Subject: [PATCH] ui: tfa: save last used TFA method and prefer it next time simple heuristic for those people who always prefer a specific TFA method and have the others only as backup. Signed-off-by: Thomas Lamprecht --- www/LoginView.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/www/LoginView.js b/www/LoginView.js index 948c83ad..3b8eee7b 100644 --- a/www/LoginView.js +++ b/www/LoginView.js @@ -280,17 +280,22 @@ Ext.define('PBS.login.TfaWindow', { throw "no challenge given"; } - let firstAvailableTab = -1, i = 0; + let lastTabId = me.getLastTabUsed(); + let initialTab = -1, i = 0; for (const k of ['webauthn', 'totp', 'recovery']) { const available = !!challenge[k]; vm.set(`availabelChallenge.${k}`, available); - if (firstAvailableTab < 0 && available) { - firstAvailableTab = i; + if (available) { + if (i === lastTabId) { + initialTab = i; + } else if (initialTab < 0) { + initialTab = i; + } } i++; } - view.down('tabpanel').setActiveTab(firstAvailableTab); + view.down('tabpanel').setActiveTab(initialTab); if (challenge.recovery) { me.lookup('availableRecovery').update(Ext.String.htmlEncode( @@ -320,6 +325,7 @@ Ext.define('PBS.login.TfaWindow', { newField.focus(); newField.validate(); } + this.saveLastTabUsed(tabPanel, newCard); }, }, 'field': { @@ -331,6 +337,20 @@ Ext.define('PBS.login.TfaWindow', { }, }, + saveLastTabUsed: function(tabPanel, card) { + let id = tabPanel.items.indexOf(card); + window.localStorage.setItem('PBS.TFALogin.lastTab', JSON.stringify({ id })); + }, + + getLastTabUsed: function() { + let data = window.localStorage.getItem('PBS.TFALogin.lastTab'); + if (typeof data === 'string') { + let last = JSON.parse(data); + return last.id; + } + return null; + }, + onClose: function() { let me = this; let view = me.getView();