]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/FirewallAliases.js
api: add proxmox-firewall to versions pkg list
[pve-manager.git] / www / manager6 / grid / FirewallAliases.js
1 Ext.define('PVE.FirewallAliasEdit', {
2 extend: 'Proxmox.window.Edit',
3
4 base_url: undefined,
5
6 alias_name: undefined,
7
8 width: 400,
9
10 initComponent: function() {
11 let me = this;
12
13 me.isCreate = me.alias_name === undefined;
14
15 if (me.isCreate) {
16 me.url = '/api2/extjs' + me.base_url;
17 me.method = 'POST';
18 } else {
19 me.url = '/api2/extjs' + me.base_url + '/' + me.alias_name;
20 me.method = 'PUT';
21 }
22
23 let ipanel = Ext.create('Proxmox.panel.InputPanel', {
24 isCreate: me.isCreate,
25 items: [
26 {
27 xtype: 'textfield',
28 name: me.isCreate ? 'name' : 'rename',
29 fieldLabel: gettext('Name'),
30 allowBlank: false,
31 },
32 {
33 xtype: 'textfield',
34 name: 'cidr',
35 fieldLabel: gettext('IP/CIDR'),
36 allowBlank: false,
37 },
38 {
39 xtype: 'textfield',
40 name: 'comment',
41 fieldLabel: gettext('Comment'),
42 },
43 ],
44 });
45
46 Ext.apply(me, {
47 subject: gettext('Alias'),
48 isAdd: true,
49 items: [ipanel],
50 });
51
52 me.callParent();
53
54 if (!me.isCreate) {
55 me.load({
56 success: function(response, options) {
57 let values = response.result.data;
58 values.rename = values.name;
59 ipanel.setValues(values);
60 },
61 });
62 }
63 },
64 });
65
66 Ext.define('pve-fw-aliases', {
67 extend: 'Ext.data.Model',
68
69 fields: ['name', 'cidr', 'comment', 'digest'],
70 idProperty: 'name',
71 });
72
73 Ext.define('PVE.FirewallAliases', {
74 extend: 'Ext.grid.Panel',
75 alias: ['widget.pveFirewallAliases'],
76
77 onlineHelp: 'pve_firewall_ip_aliases',
78
79 stateful: true,
80 stateId: 'grid-firewall-aliases',
81
82 base_url: undefined,
83
84 title: gettext('Alias'),
85
86 initComponent: function() {
87 let me = this;
88
89 if (!me.base_url) {
90 throw "missing base_url configuration";
91 }
92
93 let store = new Ext.data.Store({
94 model: 'pve-fw-aliases',
95 proxy: {
96 type: 'proxmox',
97 url: "/api2/json" + me.base_url,
98 },
99 sorters: {
100 property: 'name',
101 direction: 'ASC',
102 },
103 });
104
105 let sm = Ext.create('Ext.selection.RowModel', {});
106
107 let reload = function() {
108 let oldrec = sm.getSelection()[0];
109 store.load(function(records, operation, success) {
110 if (oldrec) {
111 var rec = store.findRecord('name', oldrec.data.name, 0, false, true, true);
112 if (rec) {
113 sm.select(rec);
114 }
115 }
116 });
117 };
118
119 let run_editor = function() {
120 let rec = me.getSelectionModel().getSelection()[0];
121 if (!rec) {
122 return;
123 }
124 let win = Ext.create('PVE.FirewallAliasEdit', {
125 base_url: me.base_url,
126 alias_name: rec.data.name,
127 });
128 win.show();
129 win.on('destroy', reload);
130 };
131
132 me.editBtn = new Proxmox.button.Button({
133 text: gettext('Edit'),
134 disabled: true,
135 selModel: sm,
136 handler: run_editor,
137 });
138
139 me.addBtn = Ext.create('Ext.Button', {
140 text: gettext('Add'),
141 handler: function() {
142 var win = Ext.create('PVE.FirewallAliasEdit', {
143 base_url: me.base_url,
144 });
145 win.on('destroy', reload);
146 win.show();
147 },
148 });
149
150 me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', {
151 selModel: sm,
152 baseurl: me.base_url + '/',
153 callback: reload,
154 });
155
156
157 Ext.apply(me, {
158 store: store,
159 tbar: [me.addBtn, me.removeBtn, me.editBtn],
160 selModel: sm,
161 columns: [
162 {
163 header: gettext('Name'),
164 dataIndex: 'name',
165 flex: 1,
166 },
167 {
168 header: gettext('IP/CIDR'),
169 dataIndex: 'cidr',
170 flex: 1,
171 },
172 {
173 header: gettext('Comment'),
174 dataIndex: 'comment',
175 renderer: Ext.String.htmlEncode,
176 flex: 3,
177 },
178 ],
179 listeners: {
180 itemdblclick: run_editor,
181 },
182 });
183
184 me.callParent();
185 me.on('activate', reload);
186 },
187 });