]> git.proxmox.com Git - pmg-gui.git/blame - js/LDAPConfig.js
use new proxmoxStdRemoveButton widget
[pmg-gui.git] / js / LDAPConfig.js
CommitLineData
f6b1b3bf
DM
1Ext.define('pmg-ldap-config', {
2 extend: 'Ext.data.Model',
3 fields: [ 'section', 'server1', 'server2', 'comment',
4 'mode', 'binddn', 'bindpw', 'basedn', 'groupbasedn',
5 'filter', 'accountattr', 'mailattr',
6 { name: 'port', type: 'integer' },
7 { name: 'disable', type: 'boolean' }
8 ],
9 proxy: {
10 type: 'proxmox',
11 url: "/api2/json/config/ldap"
12 },
13 idProperty: 'section'
14});
15
16Ext.define('PMG.LDAPInputPanel', {
17 extend: 'Proxmox.panel.InputPanel',
18 alias: 'widget.pmgLDAPInputPanel',
19
20 sectionId: undefined,
21
22 onGetValues: function(values) {
23 var me = this;
24
25 values.disable = values.enable ? 0 : 1;
26 delete values.enable;
27
28 return values;
29 },
30
31 initComponent : function() {
32 var me = this;
33
34 me.column1 = [
35 {
36 xtype: me.sectionId ? 'displayfield' : 'textfield',
37 fieldLabel: gettext('Profile Name'),
38 value: me.sectionId || '',
39 name: 'section',
40 vtype: 'StorageId',
41 allowBlank: false
42 },
43 {
44 xtype: 'proxmoxKVComboBox',
45 name: 'mode',
46 comboItems: [
47 ['ldap', PMG.Utils.format_ldap_protocol('ldap')],
48 ['ldaps', PMG.Utils.format_ldap_protocol('ldaps')]
49 ],
50 value: 'ldap',
51 fieldLabel: gettext('Protocol')
52 },
53 {
54 xtype: 'textfield',
55 fieldLabel: gettext('Server'),
56 allowBlank: false,
57 vtype: 'IP64Address',
58 name: 'server1'
59 },
60 {
61 xtype: 'proxmoxtextfield',
62 fieldLabel: gettext('Server'),
63 allowBlank: true,
64 deleteEmpty: me.create ? false : true,
65 vtype: 'IP64Address',
66 name: 'server2'
67 },
68 {
69 xtype: 'proxmoxintegerfield',
70 name: 'port',
71 emptyText: gettext('Default'),
72 deleteEmpty: me.create ? false : true,
73 minValue: 1,
74 maxValue: 65535,
75 fieldLabel: gettext('Port'),
76 },
77 {
78 xtype: 'textfield',
79 name: 'binddn',
80 allowBlank: true,
81 fieldLabel: gettext('User name')
82 },
83 {
84 xtype: 'textfield',
85 inputType: 'password',
86 allowBlank: true,
87 name: 'bindpw',
88 fieldLabel: gettext('Password')
89 }
90 ];
91
92 me.column2 = [
93 {
94 xtype: 'proxmoxcheckbox',
95 name: 'enable',
96 checked: true,
97 uncheckedValue: 0,
98 fieldLabel: gettext('Enable')
99 },
100 {
101 xtype: 'proxmoxtextfield',
102 allowBlank: true,
103 deleteEmpty: me.create ? false : true,
104 name: 'basedn',
105 fieldLabel: gettext('Base DN')
106 },
107 {
108 xtype: 'proxmoxtextfield',
109 allowBlank: true,
110 deleteEmpty: me.create ? false : true,
111 name: 'groupbasedn',
112 fieldLabel: gettext('Base DN for Groups')
113 },
114 {
115 xtype: 'proxmoxtextfield',
116 allowBlank: true,
117 deleteEmpty: me.create ? false : true,
118 name: 'mailattr',
119 fieldLabel: gettext('EMail attribute name(s)')
120 },
121 {
122 xtype: 'proxmoxtextfield',
123 allowBlank: true,
124 deleteEmpty: me.create ? false : true,
125 name: 'accountattr',
126 fieldLabel: gettext('Account attribute name')
127 },
128 {
129 xtype: 'proxmoxtextfield',
130 allowBlank: true,
131 deleteEmpty: me.create ? false : true,
132 name: 'filter',
133 fieldLabel: gettext('LDAP filter')
134 }
135 ];
136
137 me.columnB = [
138 {
139 xtype: 'textfield',
140 fieldLabel: gettext('Comment'),
141 allowBlank: true,
142 name: 'comment'
143 }
144 ];
145
146 me.callParent();
147 }
148});
149
150Ext.define('PMG.LDAPEdit', {
151 extend: 'Proxmox.window.Edit',
152 alias: 'widget.pmgLDAPEdit',
153
154 subject: 'LDAP Profile',
155 isAdd: true,
156
157 initComponent : function() {
158 var me = this;
159
160 me.create = me.sectionId ? false : true;
161
162 if (me.create) {
163 me.url = '/api2/extjs/config/ldap';
164 me.method = 'POST';
165 } else {
166 me.url = '/api2/extjs/config/ldap/' + me.sectionId;
167 me.method = 'PUT';
168 }
169
170 var ipanel = Ext.create('PMG.LDAPInputPanel', {
171 create: me.create,
172 sectionId: me.sectionId
173 });
174
175 me.items = [ ipanel ];
176
177 me.fieldDefaults = {
178 labelWidth: 150
179 };
180
181 me.callParent();
182
183 if (!me.create) {
184 me.load({
185 success: function(response, options) {
186 var values = response.result.data;
187
188 values.enable = values.disable ? 0 : 1;
189 ipanel.setValues(values);
190 }
191 });
192 }
193 }
194});
195
196Ext.define('PMG.LDAPConfig', {
197 extend: 'Ext.grid.GridPanel',
198 alias: ['widget.pmgLDAPConfig'],
199
200 initComponent : function() {
201 var me = this;
202
203 me.store = new Ext.data.Store({
204 model: 'pmg-ldap-config',
205 sorters: {
206 property: 'section',
207 order: 'DESC'
208 }
209 });
210
211 var reload = function() {
212 me.store.load();
213 };
214
215 me.selModel = Ext.create('Ext.selection.RowModel', {});
216
b357057e 217 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
b6850939 218 selModel: me.selModel,
b357057e
DM
219 baseurl: '/config/ldap',
220 callback: reload,
221 waitMsgTarget: me
b6850939
DM
222 });
223
f6b1b3bf
DM
224 var run_editor = function() {
225 var rec = me.selModel.getSelection()[0];
226 if (!rec) {
227 return;
228 }
229
230 var win = Ext.createWidget('pmgLDAPEdit', {
231 sectionId: rec.data.section
232 });
233 win.load();
234 win.on('destroy', reload);
235 win.show();
236 };
237
238 me.tbar = [
239 {
240 xtype: 'proxmoxButton',
241 text: gettext('Edit'),
242 disabled: true,
243 selModel: me.selModel,
244 handler: run_editor
245 },
246 {
247 text: gettext('Create'),
248 handler: function() {
249 var win = Ext.createWidget('pmgLDAPEdit', {});
250 win.on('destroy', reload);
251 win.show();
252 }
b6850939
DM
253 },
254 remove_btn
f6b1b3bf
DM
255 ];
256
b6850939
DM
257 Proxmox.Utils.monStoreErrors(me, me.store);
258
f6b1b3bf
DM
259 Ext.apply(me, {
260
261 columns: [
262 {
b6850939 263 header: gettext('Profile Name'),
f6b1b3bf 264 sortable: true,
b6850939 265 width: 120,
f6b1b3bf
DM
266 dataIndex: 'section'
267 },
268 {
269 header: gettext('Protocol'),
270 sortable: true,
271 dataIndex: 'mode',
272 renderer: PMG.Utils.format_ldap_protocol
273 },
274 {
275 header: gettext('Server'),
276 sortable: true,
277 dataIndex: 'server1',
278 renderer: function(value, metaData, rec) {
279 if (rec.data.server2) {
280 return value + '<br>' + rec.data.server2;
281 }
282 return value;
283 }
284 },
285 {
286 header: gettext('Enabled'),
287 width: 80,
288 sortable: true,
289 dataIndex: 'disable',
290 renderer: Proxmox.Utils.format_neg_boolean
291 },
292 {
293 header: gettext('Comment'),
294 sortable: false,
295 renderer: Ext.String.htmlEncode,
296 dataIndex: 'comment',
297 flex: 1
298 }
299 ],
300 listeners: {
301 itemdblclick: run_editor,
302 activate: reload
303 }
304 });
305
306 me.callParent();
307 }
308});