]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/UserEdit.js
ui: ldap: add 'Check connection' checkbox as advanced option
[pve-manager.git] / www / manager6 / dc / UserEdit.js
CommitLineData
ea4954b4 1Ext.define('PVE.dc.UserEdit', {
9fccc702 2 extend: 'Proxmox.window.Edit',
ea4954b4
DM
3 alias: ['widget.pveDcUserEdit'],
4
5 isAdd: true,
6
8058410f 7 initComponent: function() {
1a5df27f 8 let me = this;
ea4954b4 9
1a5df27f 10 me.isCreate = !me.userid;
ea4954b4 11
1a5df27f
TL
12 let url = '/api2/extjs/access/users';
13 let method = 'POST';
14 if (!me.isCreate) {
15 url += '/' + encodeURIComponent(me.userid);
16 method = 'PUT';
ea4954b4
DM
17 }
18
1a5df27f
TL
19 let verifypw, pwfield;
20 let validate_pw = function() {
ea4954b4 21 if (verifypw.getValue() !== pwfield.getValue()) {
fb81dfdc 22 return gettext("Passwords do not match");
ea4954b4
DM
23 }
24 return true;
25 };
2a4971d8 26 verifypw = Ext.createWidget('textfield', {
ea4954b4 27 inputType: 'password',
2a4971d8 28 fieldLabel: gettext('Confirm password'),
ea4954b4
DM
29 name: 'verifypassword',
30 submitValue: false,
31 disabled: true,
32 hidden: true,
f6710aac 33 validator: validate_pw,
ea4954b4
DM
34 });
35
2a4971d8 36 pwfield = Ext.createWidget('textfield', {
ea4954b4 37 inputType: 'password',
2a4971d8 38 fieldLabel: gettext('Password'),
ea4954b4
DM
39 minLength: 5,
40 name: 'password',
41 disabled: true,
42 hidden: true,
f6710aac 43 validator: validate_pw,
ea4954b4
DM
44 });
45
1a5df27f
TL
46 let column1 = [
47 {
48 xtype: me.isCreate ? 'textfield' : 'displayfield',
49 name: 'userid',
50 fieldLabel: gettext('User name'),
51 value: me.userid,
1011b569 52 renderer: Ext.String.htmlEncode,
1a5df27f
TL
53 allowBlank: false,
54 submitValue: !!me.isCreate,
55 },
56 pwfield,
57 verifypw,
ea4954b4
DM
58 {
59 xtype: 'pveGroupSelector',
60 name: 'groups',
61 multiSelect: true,
62 allowBlank: true,
f6710aac 63 fieldLabel: gettext('Group'),
ea4954b4 64 },
1a5df27f 65 {
3d3199a6
TL
66 xtype: 'pmxExpireDate',
67 name: 'expire',
1a5df27f 68 },
ea4954b4 69 {
896c0d50 70 xtype: 'proxmoxcheckbox',
ea4954b4
DM
71 fieldLabel: gettext('Enabled'),
72 name: 'enable',
73 uncheckedValue: 0,
74 defaultValue: 1,
f6710aac
TL
75 checked: true,
76 },
1a5df27f 77 ];
ea4954b4 78
1a5df27f 79 let column2 = [
ea4954b4
DM
80 {
81 xtype: 'textfield',
82 name: 'firstname',
f6710aac 83 fieldLabel: gettext('First Name'),
ea4954b4
DM
84 },
85 {
86 xtype: 'textfield',
87 name: 'lastname',
f6710aac 88 fieldLabel: gettext('Last Name'),
ea4954b4
DM
89 },
90 {
91 xtype: 'textfield',
92 name: 'email',
93 fieldLabel: gettext('E-Mail'),
f6710aac
TL
94 vtype: 'proxmoxMail',
95 },
ea4954b4
DM
96 ];
97
1a5df27f
TL
98 if (me.isCreate) {
99 column1.splice(1, 0, {
100 xtype: 'pmxRealmComboBox',
101 name: 'realm',
102 fieldLabel: gettext('Realm'),
103 allowBlank: false,
ea4954b4
DM
104 matchFieldWidth: false,
105 listConfig: { width: 300 },
1a5df27f
TL
106 listeners: {
107 change: function(combo, realm) {
108 me.realm = realm;
109 pwfield.setVisible(realm === 'pve');
110 pwfield.setDisabled(realm !== 'pve');
111 verifypw.setVisible(realm === 'pve');
112 verifypw.setDisabled(realm !== 'pve');
113 },
114 },
115 submitValue: false,
116 });
117 }
ea4954b4 118
ef4ef788 119 var ipanel = Ext.create('Proxmox.panel.InputPanel', {
ea4954b4
DM
120 column1: column1,
121 column2: column2,
7fb4767d
TL
122 columnB: [
123 {
124 xtype: 'textfield',
125 name: 'comment',
f6710aac
TL
126 fieldLabel: gettext('Comment'),
127 },
7fb4767d
TL
128 ],
129 advancedItems: [
130 {
131 xtype: 'textfield',
132 name: 'keys',
f6710aac
TL
133 fieldLabel: gettext('Key IDs'),
134 },
7fb4767d 135 ],
ea4954b4 136 onGetValues: function(values) {
1a5df27f
TL
137 if (me.realm) {
138 values.userid = values.userid + '@' + me.realm;
ea4954b4 139 }
ea4954b4
DM
140 if (!values.password) {
141 delete values.password;
142 }
ea4954b4 143 return values;
f6710aac 144 },
ea4954b4
DM
145 });
146
147 Ext.applyIf(me, {
1a5df27f
TL
148 subject: gettext('User'),
149 url: url,
150 method: method,
ea4954b4 151 fieldDefaults: {
1a5df27f 152 labelWidth: 110, // some translation are quite long (e.g., Spanish)
ea4954b4 153 },
8058410f 154 items: [ipanel],
1a5df27f 155 });
ea4954b4 156
1a5df27f 157 me.callParent();
ea4954b4 158
1a5df27f
TL
159 if (!me.isCreate) {
160 me.load({
ea4954b4
DM
161 success: function(response, options) {
162 var data = response.result.data;
ea4954b4 163 me.setValues(data);
5b25580d 164 if (data.keys) {
8058410f 165 if (data.keys === 'x!oath' || data.keys === 'x!u2f') {
5b25580d
WL
166 me.down('[name="keys"]').setDisabled(1);
167 }
168 }
1a5df27f
TL
169 },
170 });
171 }
f6710aac 172 },
ea4954b4 173});