proxmox-backup/www/window/Settings.js
Dominik Csapak b452e2df74 Revert "ui: window/Settings / WebAuthn: add browser setting for userVerificationo"
even if the options *could* be set in the frontend, the backend
actually has to do validation of those settings, thus we should not
make that a browser setting

additionally, having the value 'preferred' does not actually make sense,
since it does not add any security (the backend skips the
userverification check then)

This reverts commit aca4c2b5a9.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2021-03-03 14:05:05 +01:00

268 lines
5.7 KiB
JavaScript

Ext.define('PBS.window.Settings', {
extend: 'Ext.window.Window',
width: '800px',
title: gettext('My Settings'),
iconCls: 'fa fa-gear',
modal: true,
bodyPadding: 10,
resizable: false,
buttons: [
'->',
{
text: gettext('Close'),
handler: function() {
this.up('window').close();
},
},
],
layout: 'hbox',
controller: {
xclass: 'Ext.app.ViewController',
init: function(view) {
let me = this;
let sp = Ext.state.Manager.getProvider();
let username = sp.get('login-username') || Proxmox.Utils.noneText;
me.lookupReference('savedUserName').setValue(Ext.String.htmlEncode(username));
let settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
settings.forEach(function(setting) {
let val = localStorage.getItem('pve-xterm-' + setting);
if (val !== undefined && val !== null) {
let field = me.lookup(setting);
field.setValue(val);
field.resetOriginalValue();
}
});
},
set_button_status: function() {
let me = this;
let form = me.lookup('xtermform');
let valid = form.isValid();
let dirty = form.isDirty();
let hasvalues = false;
let values = form.getValues();
Ext.Object.eachValue(values, function(value) {
if (value) {
hasvalues = true;
return false;
}
return true;
});
me.lookup('xtermsave').setDisabled(!dirty || !valid);
me.lookup('xtermreset').setDisabled(!hasvalues);
},
control: {
'#xtermjs form': {
dirtychange: 'set_button_status',
validitychange: 'set_button_status',
},
'#xtermjs button': {
click: function(button) {
let me = this;
let settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
settings.forEach(function(setting) {
let field = me.lookup(setting);
if (button.reference === 'xtermsave') {
let value = field.getValue();
if (value) {
localStorage.setItem('pve-xterm-' + setting, value);
} else {
localStorage.removeItem('pve-xterm-' + setting);
}
} else if (button.reference === 'xtermreset') {
field.setValue(undefined);
localStorage.removeItem('pve-xterm-' + setting);
}
field.resetOriginalValue();
});
me.set_button_status();
},
},
'button[name=reset]': {
click: function() {
let blacklist = ['login-username'];
let sp = Ext.state.Manager.getProvider();
for (const state of Object.values(sp.state)) {
if (blacklist.indexOf(state) !== -1) {
continue;
}
sp.clear(state);
}
window.location.reload();
},
},
'button[name=clear-username]': {
click: function() {
let me = this;
let usernamefield = me.lookupReference('savedUserName');
let sp = Ext.state.Manager.getProvider();
usernamefield.setValue(Proxmox.Utils.noneText);
sp.clear('login-username');
},
},
},
},
items: [{
xtype: 'fieldset',
flex: 1,
title: gettext('Webinterface Settings'),
margin: '5',
layout: {
type: 'vbox',
align: 'left',
},
defaults: {
width: '100%',
margin: '0 0 10 0',
},
items: [
{
xtype: 'container',
layout: 'hbox',
items: [
{
xtype: 'displayfield',
fieldLabel: gettext('Saved User Name') + ':',
labelWidth: 150,
stateId: 'login-username',
reference: 'savedUserName',
flex: 1,
value: '',
},
{
xtype: 'button',
cls: 'x-btn-default-toolbar-small proxmox-inline-button',
text: gettext('Reset'),
name: 'clear-username',
},
],
},
{
xtype: 'box',
autoEl: { tag: 'hr' },
},
{
xtype: 'container',
layout: 'hbox',
items: [
{
xtype: 'displayfield',
fieldLabel: gettext('Layout') + ':',
flex: 1,
},
{
xtype: 'button',
cls: 'x-btn-default-toolbar-small proxmox-inline-button',
text: gettext('Reset'),
tooltip: gettext('Reset all layout changes (for example, column widths)'),
name: 'reset',
},
],
},
],
},
{
xtype: 'container',
layout: 'vbox',
flex: 1,
margin: '5',
defaults: {
width: '100%',
// right margin ensures that the right border of the fieldsets
// is shown
margin: '0 2 10 0',
},
items: [
{
xtype: 'fieldset',
itemId: 'xtermjs',
title: gettext('xterm.js Settings'),
items: [{
xtype: 'form',
reference: 'xtermform',
border: false,
layout: {
type: 'vbox',
algin: 'left',
},
defaults: {
width: '100%',
margin: '0 0 10 0',
},
items: [
{
xtype: 'textfield',
name: 'fontFamily',
reference: 'fontFamily',
emptyText: Proxmox.Utils.defaultText,
fieldLabel: gettext('Font-Family'),
},
{
xtype: 'proxmoxintegerfield',
emptyText: Proxmox.Utils.defaultText,
name: 'fontSize',
reference: 'fontSize',
minValue: 1,
fieldLabel: gettext('Font-Size'),
},
{
xtype: 'numberfield',
name: 'letterSpacing',
reference: 'letterSpacing',
emptyText: Proxmox.Utils.defaultText,
fieldLabel: gettext('Letter Spacing'),
},
{
xtype: 'numberfield',
name: 'lineHeight',
minValue: 0.1,
reference: 'lineHeight',
emptyText: Proxmox.Utils.defaultText,
fieldLabel: gettext('Line Height'),
},
{
xtype: 'container',
layout: {
type: 'hbox',
pack: 'end',
},
defaults: {
margin: '0 0 0 5',
},
items: [
{
xtype: 'button',
reference: 'xtermreset',
disabled: true,
text: gettext('Reset'),
},
{
xtype: 'button',
reference: 'xtermsave',
disabled: true,
text: gettext('Save'),
},
],
},
],
}],
},
],
}],
});