]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/OptionView.js
ui: dc/options: allow to set U2F
[pve-manager.git] / www / manager6 / dc / OptionView.js
CommitLineData
8f17b496 1 /*jslint confusion: true*/
755b9083
TL
2Ext.define('PVE.dc.OptionView', {
3 extend: 'Proxmox.grid.ObjectGrid',
4 alias: ['widget.pveDcOptionView'],
bb2948de 5
755b9083 6 onlineHelp: 'datacenter_configuration_file',
bb2948de 7
755b9083 8 monStoreErrors: true,
bb2948de 9
8f17b496
TL
10 add_inputpanel_row: function(name, text, opts) {
11 var me = this;
12
13 opts = opts || {};
14 me.rows = me.rows || {};
15
16 var canEdit = (opts.caps === undefined || opts.caps);
17 me.rows[name] = {
18 required: true,
19 defaultValue: opts.defaultValue,
20 header: text,
21 renderer: opts.renderer,
22 editor: canEdit ? {
23 xtype: 'proxmoxWindowEdit',
61c2b434 24 width: opts.width || 350,
8f17b496
TL
25 subject: text,
26 fieldDefaults: {
27 labelWidth: opts.labelWidth || 100
28 },
29 setValues: function(values) {
bb469a11 30 // FIXME: run through parsePropertyString if not an object?
8f17b496
TL
31 var edit_value = values[name];
32 Ext.Array.each(this.query('inputpanel'), function(panel) {
33 panel.setValues(edit_value);
34 });
35 },
36 url: opts.url,
37 items: [{
38 xtype: 'inputpanel',
39 onGetValues: function(values) {
40 if (values === undefined || Object.keys(values).length === 0) {
41 return { 'delete': name };
42 }
43 var ret_val = {};
44 ret_val[name] = PVE.Parser.printPropertyString(values);
45 return ret_val;
46 },
47 items: opts.items
48 }]
49 } : undefined
50 };
51 },
52
bb2948de
DM
53 initComponent : function() {
54 var me = this;
55
8f17b496
TL
56 var caps = Ext.state.Manager.get('GuiCap');
57
755b9083
TL
58 me.add_combobox_row('keyboard', gettext('Keyboard Layout'), {
59 renderer: PVE.Utils.render_kvm_language,
60 comboItems: PVE.Utils.kvm_keymap_array(),
61 defaultValue: '__default__',
62 deleteEmpty: true
bb2948de 63 });
755b9083
TL
64 me.add_text_row('http_proxy', gettext('HTTP proxy'), {
65 defaultValue: Proxmox.Utils.noneText,
66 vtype: 'HttpProxy',
67 deleteEmpty: true
bb2948de 68 });
755b9083
TL
69 me.add_combobox_row('console', gettext('Console Viewer'), {
70 renderer: PVE.Utils.render_console_viewer,
71 comboItems: PVE.Utils.console_viewer_array(),
72 defaultValue: '__default__',
73 deleteEmpty: true
bb2948de 74 });
755b9083
TL
75 me.add_text_row('email_from', gettext('Email from address'), {
76 deleteEmpty: true,
21026cce 77 vtype: 'proxmoxMail',
755b9083 78 defaultValue: 'root@$hostname'
bb2948de 79 });
755b9083 80 me.add_text_row('mac_prefix', gettext('MAC address prefix'), {
3f2cccbc 81 deleteEmpty: true,
755b9083
TL
82 vtype: 'MacPrefix',
83 defaultValue: Proxmox.Utils.noneText
4050aade 84 });
bb469a11
TL
85 me.add_inputpanel_row('migration', gettext('Migration Settings'), {
86 renderer: PVE.Utils.render_dc_ha_opts,
87 caps: caps.vms['Sys.Modify'],
88 labelWidth: 120,
89 url: "/api2/extjs/cluster/options",
90 defaultKey: 'type',
91 items: [{
92 xtype: 'displayfield',
93 name: 'type',
94 fieldLabel: gettext('Type'),
95 value: 'secure',
96 submitValue: true,
bb469a11 97 }, {
6619af8d 98 xtype: 'proxmoxNetworkSelector',
bb469a11
TL
99 name: 'network',
100 fieldLabel: gettext('Network'),
8144a0dd 101 value: null,
bb469a11 102 emptyText: Proxmox.Utils.defaultText,
6619af8d
TL
103 autoSelect: false,
104 skipEmptyText: true
bb469a11
TL
105 }]
106 });
8f17b496
TL
107 me.add_inputpanel_row('ha', gettext('HA Settings'), {
108 renderer: PVE.Utils.render_dc_ha_opts,
109 caps: caps.vms['Sys.Modify'],
110 labelWidth: 120,
111 url: "/api2/extjs/cluster/options",
112 items: [{
113 xtype: 'proxmoxKVComboBox',
114 name: 'shutdown_policy',
115 fieldLabel: gettext('Shutdown Policy'),
116 deleteEmpty: false,
117 value: '__default__',
118 comboItems: [
bb469a11 119 ['__default__', Proxmox.Utils.defaultText + ' (conditional)' ],
8f17b496
TL
120 ['freeze', 'freeze'],
121 ['failover', 'failover'],
e86024b7 122 ['migrate', 'migrate'],
8f17b496
TL
123 ['conditional', 'conditional']
124 ],
125 defaultValue: '__default__'
126 }]
127 });
61c2b434
TL
128 me.add_inputpanel_row('u2f', gettext('U2F Settings'), {
129 renderer: PVE.Utils.render_dc_ha_opts,
130 caps: caps.vms['Sys.Modify'],
131 width: 450,
132 url: "/api2/extjs/cluster/options",
133 items: [{
134 xtype: 'textfield',
135 name: 'appid',
136 fieldLabel: gettext('U2F AppID URL'),
137 emptyText: gettext('Defaults to origin'),
138 value: '',
139 skipEmptyText: true,
140 deleteEmpty: true,
141 submitEmptyText: false,
142 skipEmptyText: true,
143 }, {
144 xtype: 'textfield',
145 name: 'origin',
146 fieldLabel: gettext('U2F Origin'),
147 emptyText: gettext('Defaults to requesting host URI'),
148 value: '',
149 deleteEmpty: true,
150 skipEmptyText: true,
151 submitEmptyText: false,
152 },
153 {
154 xtype: 'displayfield',
155 userCls: 'pmx-hint',
156 value: gettext('NOTE: Changing an AppID breaks existing U2F registrations!'),
157 }]
158 });
8f17b496 159
8144a0dd 160 // TODO: bwlimits, u2f?
4050aade 161
755b9083 162 me.selModel = Ext.create('Ext.selection.RowModel', {});
bb2948de 163
bc5d0cf8 164 Ext.apply(me, {
755b9083
TL
165 tbar: [{
166 text: gettext('Edit'),
167 xtype: 'proxmoxButton',
168 disabled: true,
169 handler: function() { me.run_editor(); },
170 selModel: me.selModel
171 }],
bb2948de 172 url: "/api2/json/cluster/options",
755b9083
TL
173 editorConfig: {
174 url: "/api2/extjs/cluster/options"
175 },
176 interval: 5000,
177 cwidth1: 200,
bb2948de 178 listeners: {
755b9083 179 itemdblclick: me.run_editor
bb2948de
DM
180 }
181 });
182
183 me.callParent();
755b9083 184
5dc48aa8
DC
185 // set the new value for the default console
186 me.mon(me.rstore, 'load', function(store, records, success) {
187 if (!success) {
188 return;
189 }
190
191 var rec = store.getById('console');
192 PVE.VersionInfo.console = rec.data.value;
193 if (rec.data.value === '__default__') {
194 delete PVE.VersionInfo.console;
195 }
196 });
197
755b9083
TL
198 me.on('activate', me.rstore.startUpdate);
199 me.on('destroy', me.rstore.stopUpdate);
200 me.on('deactivate', me.rstore.stopUpdate);
bb2948de
DM
201 }
202});