and verification textfield.

this fixes the issue that on the 'user menu' we accidentally showed
the qr code and verification field, even if the user already had a
totp code

now it shows 'Unchanged' like when opened via dc/UserView

Signed-off-by: Dominik Csapak <d.csa...@proxmox.com>
---
 www/manager6/dc/TFAEdit.js | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/www/manager6/dc/TFAEdit.js b/www/manager6/dc/TFAEdit.js
index 8f3017f6..11e52aad 100644
--- a/www/manager6/dc/TFAEdit.js
+++ b/www/manager6/dc/TFAEdit.js
@@ -102,9 +102,13 @@ Ext.define('PVE.window.TFAEdit', {
            tfa_required: false,
            tfa_type: null, // dependencies of formulas should not be undefined
            valid: false,
-           u2f_available: true
+           u2f_available: true,
+           secret: "",
        },
        formulas: {
+           showTOTPVerifiction: function(get) {
+               return get('secret').length > 0 && get('canSetupTOTP');
+           },
            canDeleteTFA: function(get) {
                return (get('tfa_type') !== null && !get('tfa_required'));
            },
@@ -115,7 +119,10 @@ Ext.define('PVE.window.TFAEdit', {
            canSetupU2F: function(get) {
                var tfa = get('tfa_type');
                return (get('u2f_available') && (tfa === null || tfa === 'u2f' 
|| tfa === 1));
-           }
+           },
+           secretEmpty: function(get) {
+               return get('secret').length === 0;
+           },
        }
     },
 
@@ -124,6 +131,7 @@ Ext.define('PVE.window.TFAEdit', {
        var viewmodel = me.getViewModel();
        if (user_tfa_type === 'oath') {
            user_tfa_type = 'totp';
+           viewmodel.set('secret', '');
        }
        viewmodel.set('tfa_type', user_tfa_type || null);
        if (!realm_tfa_type) {
@@ -205,8 +213,6 @@ Ext.define('PVE.window.TFAEdit', {
                    if (!me.tfa_type) {
                        this.randomizeSecret();
                    } else {
-                       me.down('#qrbox').setVisible(false);
-                       me.lookup('challenge').setVisible(false);
                        if (me.tfa_type === 'u2f') {
                            var u2f_panel = me.lookup('u2f_panel');
                            me.lookup('tfatabs').setActiveTab(u2f_panel);
@@ -303,7 +309,7 @@ Ext.define('PVE.window.TFAEdit', {
                    data += String.fromCharCode(b-26 + 0x32);
                }
            });
-           me.lookup('tfa_secret').setValue(data);
+           me.getViewModel().set('secret', data);
        },
 
        startU2FRegistration: function() {
@@ -386,6 +392,9 @@ Ext.define('PVE.window.TFAEdit', {
                                        regexText: 'Must be base32 [A-Z2-7=]',
                                        maskRe: /[A-Z2-7=]/,
                                        qrupdate: true,
+                                       bind: {
+                                           value: "{secret}",
+                                       },
                                        flex: 4
                                    },
                                    {
@@ -430,6 +439,9 @@ Ext.define('PVE.window.TFAEdit', {
                            xtype: 'box',
                            itemId: 'qrbox',
                            visible: false, // will be enabled when generating 
a qr code
+                           bind: {
+                               visible: '{!secretEmpty}',
+                           },
                            style: {
                                'background-color': 'white',
                                padding: '5px',
@@ -442,6 +454,10 @@ Ext.define('PVE.window.TFAEdit', {
                            fieldLabel: gettext('Verification Code'),
                            allowBlank: false,
                            reference: 'challenge',
+                           bind: {
+                               disabled: '{!showTOTPVerifiction}',
+                               visible: '{showTOTPVerifiction}',
+                           },
                            padding: '0 5',
                            emptyText: gettext('Scan QR code and enter TOTP 
auth. code to verify')
                        }
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to