pve-manager/www/manager6/form/TFASelector.js
Thomas Lamprecht ed00cf491f ui: auth realm: do not delete tfa if empty on create
that breaks the schema as the POST endpoint obviously doesn't knows
about a delete property.

fixes commit 58e1ccc4f5

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-04-26 13:35:36 +02:00

158 lines
3.2 KiB
JavaScript

Ext.define('PVE.form.TFASelector', {
extend: 'Ext.container.Container',
xtype: 'pveTFASelector',
mixins: ['Proxmox.Mixin.CBind'],
deleteEmpty: true,
viewModel: {
data: {
type: '__default__',
step: null,
digits: null,
id: null,
key: null,
url: null,
},
formulas: {
isOath: (get) => get('type') === 'oath',
isYubico: (get) => get('type') === 'yubico',
tfavalue: {
get: function(get) {
let val = {
type: get('type'),
};
if (get('isOath')) {
let step = get('step');
let digits = get('digits');
if (step) {
val.step = step;
}
if (digits) {
val.digits = digits;
}
} else if (get('isYubico')) {
let id = get('id');
let key = get('key');
let url = get('url');
val.id = id;
val.key = key;
if (url) {
val.url = url;
}
} else if (val.type === '__default__') {
return "";
}
return PVE.Parser.printPropertyString(val);
},
set: function(value) {
let val = PVE.Parser.parseTfaConfig(value);
this.set(val);
this.notify();
// we need to reset the original values, so that
// we can reliably track the state of the form
let form = this.getView().up('form');
if (form.trackResetOnLoad) {
let fields = this.getView().query('field[name!="tfa"]');
fields.forEach((field) => field.resetOriginalValue());
}
},
},
},
},
items: [
{
xtype: 'proxmoxtextfield',
name: 'tfa',
hidden: true,
submitValue: true,
cbind: {
deleteEmpty: '{deleteEmpty}',
},
bind: {
value: "{tfavalue}",
},
},
{
xtype: 'proxmoxKVComboBox',
value: '__default__',
deleteEmpty: false,
submitValue: false,
fieldLabel: gettext('Require TFA'),
comboItems: [
['__default__', Proxmox.Utils.noneText],
['oath', 'OATH/TOTP'],
['yubico', 'Yubico'],
],
bind: {
value: "{type}",
},
},
{
xtype: 'proxmoxintegerfield',
hidden: true,
minValue: 10,
submitValue: false,
emptyText: Proxmox.Utils.defaultText + ' (30)',
fieldLabel: gettext('Time Step'),
bind: {
value: "{step}",
hidden: "{!isOath}",
disabled: "{!isOath}",
},
},
{
xtype: 'proxmoxintegerfield',
hidden: true,
submitValue: false,
fieldLabel: gettext('Secret Length'),
minValue: 6,
maxValue: 8,
emptyText: Proxmox.Utils.defaultText + ' (6)',
bind: {
value: "{digits}",
hidden: "{!isOath}",
disabled: "{!isOath}",
},
},
{
xtype: 'textfield',
hidden: true,
submitValue: false,
allowBlank: false,
fieldLabel: 'Yubico API Id',
bind: {
value: "{id}",
hidden: "{!isYubico}",
disabled: "{!isYubico}",
},
},
{
xtype: 'textfield',
hidden: true,
submitValue: false,
allowBlank: false,
fieldLabel: 'Yubico API Key',
bind: {
value: "{key}",
hidden: "{!isYubico}",
disabled: "{!isYubico}",
},
},
{
xtype: 'textfield',
hidden: true,
submitValue: false,
fieldLabel: 'Yubico URL',
bind: {
value: "{url}",
hidden: "{!isYubico}",
disabled: "{!isYubico}",
},
},
],
});