bca9093520
for now forbid all control characters[0] in the comment value, the section config writer cannot cope with newlines in the value, it writes them out literally, allowing "injection" or breaking the whole config. In the webinterface use also a textfield, not a textarea. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
157 lines
2.9 KiB
JavaScript
157 lines
2.9 KiB
JavaScript
Ext.define('pbs-data-store-config', {
|
|
extend: 'Ext.data.Model',
|
|
fields: [ 'name', 'path', 'comment' ],
|
|
proxy: {
|
|
type: 'proxmox',
|
|
url: "/api2/json/config/datastore"
|
|
},
|
|
idProperty: 'name'
|
|
});
|
|
|
|
Ext.define('PBS.DataStoreConfig', {
|
|
extend: 'Ext.grid.GridPanel',
|
|
alias: 'widget.pbsDataStoreConfig',
|
|
|
|
title: gettext('Data Store Configuration'),
|
|
|
|
initComponent : function() {
|
|
var me = this;
|
|
|
|
var store = new Ext.data.Store({
|
|
model: 'pbs-data-store-config',
|
|
sorters: 'name',
|
|
});
|
|
|
|
var reload = function() {
|
|
store.load();
|
|
};
|
|
|
|
var sm = Ext.create('Ext.selection.RowModel', {});
|
|
|
|
var gc_btn = new Proxmox.button.Button({
|
|
text: gettext('Start GC'),
|
|
disabled: true,
|
|
selModel: sm,
|
|
handler: function() {
|
|
var rec = sm.getSelection()[0];
|
|
Proxmox.Utils.API2Request({
|
|
url: '/admin/datastore/' + rec.data.name + '/gc',
|
|
method: 'POST',
|
|
failure: function(response) {
|
|
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
|
|
},
|
|
success: function(response, options) {
|
|
var upid = response.result.data;
|
|
|
|
var win = Ext.create('Proxmox.window.TaskViewer', {
|
|
upid: upid
|
|
});
|
|
win.show();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
var tbar = [
|
|
{
|
|
text: gettext('Create'),
|
|
handler: function() {
|
|
let win = Ext.create('PBS.DataStoreEdit', {});
|
|
win.on('destroy', reload);
|
|
win.show();
|
|
}
|
|
},
|
|
'-',
|
|
gc_btn
|
|
//edit_btn, remove_btn
|
|
];
|
|
|
|
Proxmox.Utils.monStoreErrors(me, store);
|
|
|
|
Ext.apply(me, {
|
|
store: store,
|
|
selModel: sm,
|
|
tbar: tbar,
|
|
columns: [
|
|
{
|
|
header: gettext('Name'),
|
|
sortable: true,
|
|
dataIndex: 'name',
|
|
flex: 1
|
|
},
|
|
{
|
|
header: gettext('Path'),
|
|
sortable: true,
|
|
dataIndex: 'path',
|
|
flex: 1
|
|
},
|
|
{
|
|
header: gettext('Comment'),
|
|
sortable: false,
|
|
dataIndex: 'comment',
|
|
renderer: Ext.String.htmlEncode,
|
|
flex: 2
|
|
}
|
|
],
|
|
listeners: {
|
|
activate: reload
|
|
}
|
|
});
|
|
|
|
me.callParent();
|
|
|
|
store.load();
|
|
}
|
|
});
|
|
|
|
Ext.define('PBS.DataStoreInputPanel', {
|
|
extend: 'Proxmox.panel.InputPanel',
|
|
alias: 'widget.pbsDataStoreInputPanel',
|
|
|
|
onGetValues: function(values) {
|
|
var me = this;
|
|
|
|
return values;
|
|
},
|
|
|
|
column1: [
|
|
{
|
|
xtype: 'textfield',
|
|
name: 'name',
|
|
allowBlank: false,
|
|
fieldLabel: gettext('Name'),
|
|
},
|
|
],
|
|
|
|
column2: [
|
|
{
|
|
xtype: 'textfield',
|
|
name: 'path',
|
|
allowBlank: false,
|
|
fieldLabel: gettext('Backing Path'),
|
|
emptyText: gettext('An absolute path'),
|
|
},
|
|
],
|
|
|
|
columnB: [
|
|
{
|
|
xtype: 'textfield',
|
|
name: 'comment',
|
|
fieldLabel: gettext('Comment'),
|
|
},
|
|
],
|
|
});
|
|
|
|
Ext.define('PBS.DataStoreEdit', {
|
|
extend: 'Proxmox.window.Edit',
|
|
|
|
url: '/api2/extjs/config/datastore',
|
|
method: 'POST',
|
|
|
|
subject: gettext('Datastore'),
|
|
isAdd: true,
|
|
items: [{
|
|
xtype: 'pbsDataStoreInputPanel',
|
|
}],
|
|
});
|