]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/LoginWindow.js
ui: always show otp field
[pve-manager.git] / www / manager6 / window / LoginWindow.js
CommitLineData
88d5be7d
DM
1Ext.define('PVE.window.LoginWindow', {
2 extend: 'Ext.window.Window',
3
04237985
DM
4 controller: {
5
6 xclass: 'Ext.app.ViewController',
da096950
DM
7
8 onLogon: function() {
9 var me = this;
10
11 var form = this.lookupReference('loginForm');
65532495
DC
12 var unField = this.lookupReference('usernameField');
13 var saveunField = this.lookupReference('saveunField');
da096950
DM
14 var view = this.getView();
15
16 if(form.isValid()){
17 view.el.mask(gettext('Please wait...'), 'x-mask-loading');
18
65532495
DC
19 // set or clear username
20 var sp = Ext.state.Manager.getProvider();
21 if (saveunField.getValue() === true) {
22 sp.set(unField.getStateId(), unField.getValue());
23 } else {
24 sp.clear(unField.getStateId());
25 }
26 sp.set(saveunField.getStateId(), saveunField.getValue());
27
da096950
DM
28 form.submit({
29 failure: function(f, resp){
30 view.el.unmask();
31 var handler = function() {
32 var uf = me.lookupReference('usernameField');
33 uf.focus(true, true);
34 };
35
36 Ext.MessageBox.alert(gettext('Error'),
37 gettext("Login failed. Please try again"),
38 handler);
39 },
40 success: function(f, resp){
41 view.el.unmask();
42
43 var handler = view.handler || Ext.emptyFn;
44 handler.call(me, resp.result.data);
45 view.close();
46 }
47 });
48 }
49 },
50
51 control: {
52 'field[name=username]': {
53 specialkey: function(f, e) {
54 if (e.getKey() === e.ENTER) {
55 var pf = this.lookupReference('passwordField');
26031ab1 56 if (!pf.getValue()) {
da096950
DM
57 pf.focus(false);
58 }
59 }
60 }
61 },
da096950
DM
62 'field[name=realm]': {
63 change: function(f, value) {
64 var otp_field = this.lookupReference('otpField');
65 if (f.needOTP(value)) {
1702b529
WB
66 otp_field.setConfig('allowBlank', false);
67 otp_field.setEmptyText(gettext('2nd factor'));
da096950 68 } else {
1702b529
WB
69 otp_field.setConfig('allowBlank', true);
70 otp_field.setEmptyText(gettext('2nd factor, if required'));
da096950 71 }
1702b529 72 otp_field.validate();
da096950
DM
73 }
74 },
75 'field[name=lang]': {
76 change: function(f, value) {
77 var dt = Ext.Date.add(new Date(), Ext.Date.YEAR, 10);
78 Ext.util.Cookies.set('PVELangCookie', value, dt);
79 this.getView().mask(gettext('Please wait...'), 'x-mask-loading');
80 window.location.reload();
81 }
82 },
83 'button[reference=loginButton]': {
84 click: 'onLogon'
65532495
DC
85 },
86 '#': {
87 show: function() {
88 var sp = Ext.state.Manager.getProvider();
89 var checkboxField = this.lookupReference('saveunField');
90 var unField = this.lookupReference('usernameField');
91
92 var checked = sp.get(checkboxField.getStateId());
93 checkboxField.setValue(checked);
94
95 if(checked === true) {
96 var username = sp.get(unField.getStateId());
65532495
DC
97 unField.setValue(username);
98 var pwField = this.lookupReference('passwordField');
99 pwField.focus();
100 }
101 }
102 }
da096950 103 }
04237985 104 },
da096950 105
3262415b
DM
106 width: 400,
107
108 modal: true,
109
110 border: false,
111
112 draggable: true,
113
114 closable: false,
115
116 resizable: false,
117
118 layout: 'auto',
119
120 title: gettext('Proxmox VE Login'),
121
a765aeca
DC
122 defaultFocus: 'usernameField',
123
551456ff
DC
124 defaultButton: 'loginButton',
125
da096950
DM
126 items: [{
127 xtype: 'form',
128 layout: 'form',
129 url: '/api2/extjs/access/ticket',
130 reference: 'loginForm',
131
132 fieldDefaults: {
133 labelAlign: 'right',
134 allowBlank: false
135 },
136
137 items: [
138 {
139 xtype: 'textfield',
140 fieldLabel: gettext('User name'),
141 name: 'username',
a765aeca 142 itemId: 'usernameField',
da096950 143 reference: 'usernameField',
7e3e04e6 144 stateId: 'login-username'
da096950
DM
145 },
146 {
147 xtype: 'textfield',
148 inputType: 'password',
149 fieldLabel: gettext('Password'),
150 name: 'password',
7e3e04e6 151 reference: 'passwordField'
da096950
DM
152 },
153 {
154 xtype: 'textfield',
155 fieldLabel: gettext('OTP'),
156 name: 'otp',
157 reference: 'otpField',
1702b529
WB
158 allowBlank: true,
159 emptyText: gettext('2nd factor, if required')
da096950
DM
160 },
161 {
162 xtype: 'pveRealmComboBox',
163 name: 'realm'
164 },
165 {
14580653 166 xtype: 'proxmoxLanguageSelector',
da096950 167 fieldLabel: gettext('Language'),
f4aa76c5 168 value: Ext.util.Cookies.get('PVELangCookie') || Proxmox.defaultLang || 'en',
da096950
DM
169 name: 'lang',
170 reference: 'langField',
171 submitValue: false
172 }
173 ],
174 buttons: [
65532495
DC
175 {
176 xtype: 'checkbox',
177 fieldLabel: gettext('Save User name'),
178 name: 'saveusername',
179 reference: 'saveunField',
180 stateId: 'login-saveusername',
181 labelWidth: 'auto',
182 labelAlign: 'right',
183 submitValue: false
184 },
da096950
DM
185 {
186 text: gettext('Login'),
187 reference: 'loginButton'
188 }
189 ]
190 }]
191 });