]> git.proxmox.com Git - pmg-gui.git/blame - js/LoginView.js
LoginView: add save username checkbox
[pmg-gui.git] / js / LoginView.js
CommitLineData
cd6bb503
DC
1Ext.define('PMG.LoginView', {
2 extend: 'Ext.container.Container',
3 xtype: 'loginview',
4
5 controller: {
6 xclass: 'Ext.app.ViewController',
4bc1cbd8
DM
7
8 init: function(view) {
28eb60c0 9 let me = this;
c1e4fa2a 10
28eb60c0 11 let realmfield = me.lookup('realmfield');
c1e4fa2a 12
83c036b4
DC
13 me.lookup('quarantineButton').setVisible(!!Proxmox.QuarantineLink);
14
c17f9fe4
DC
15 if (view.targetview !== 'quarantineview') {
16 return;
17 }
c1e4fa2a 18
31f5e458
DC
19 // hide save username field for quarantine view
20 me.lookup('saveunField').setVisible(false);
21
ab01cd95 22 realmfield.setValue('quarantine');
4bc1cbd8
DM
23
24 // try autologin with quarantine ticket from URL
25
28eb60c0
TL
26 let qs = Ext.Object.fromQueryString(location.search);
27 if (qs.ticket === undefined) {
28 return;
29 }
30 let ticket = decodeURIComponent(qs.ticket);
31 let match = ticket.match(/^PMGQUAR:([^\s:]+):/);
32 if (!match) {
33 return;
34 }
35 let username = match[1];
36 let loginwin = me.lookup('loginwindow');
216bbcd5
DC
37 loginwin.autoShow = false;
38 loginwin.setVisible(false);
c1e4fa2a 39 realmfield.setDisabled(true);
4bc1cbd8 40
99bba12c
DC
41 me.lookup('usernameField').setValue(username);
42 me.lookup('passwordField').setValue(ticket);
43
44 me.submitForm();
4bc1cbd8
DM
45 },
46
cd6bb503 47 submitForm: function() {
28eb60c0
TL
48 let me = this;
49 let view = me.getView();
50 let loginForm = me.lookupReference('loginForm');
31f5e458
DC
51 var unField = me.lookupReference('usernameField');
52 var saveunField = me.lookupReference('saveunField');
cd6bb503
DC
53
54 if (loginForm.isValid()) {
99bba12c
DC
55 if (loginForm.isVisible()) {
56 loginForm.mask(gettext('Please wait...'), 'x-mask-loading');
57 }
31f5e458
DC
58
59 // set or clear username for admin view
60 if (view.targetview !== 'quarantineview') {
61 var sp = Ext.state.Manager.getProvider();
62 if (saveunField.getValue() === true) {
63 sp.set(unField.getStateId(), unField.getValue());
64 } else {
65 sp.clear(unField.getStateId());
66 }
67 sp.set(saveunField.getStateId(), saveunField.getValue());
68 }
69
cd6bb503
DC
70 loginForm.submit({
71 success: function(form, action) {
72 // save login data and create cookie
73 PMG.Utils.updateLoginData(action.result.data);
99bba12c 74 PMG.app.changeView(view.targetview);
cd6bb503
DC
75 },
76 failure: function(form, action) {
77 loginForm.unmask();
78 Ext.MessageBox.alert(
79 gettext('Error'),
c87d46fb 80 gettext('Login failed. Please try again'),
cd6bb503 81 );
c87d46fb 82 },
cd6bb503
DC
83 });
84 }
85 },
86
83c036b4
DC
87 openQuarantineLinkWindow: function() {
88 let me = this;
89 me.lookup('loginwindow').setVisible(false);
90 Ext.create('Proxmox.window.Edit', {
91 title: gettext('Request Quarantine Link'),
92 url: '/quarantine/sendlink',
93 isCreate: true,
94 submitText: gettext('OK'),
95 method: 'POST',
96 items: [
97 {
98 xtype: 'proxmoxtextfield',
99 name: 'mail',
100 fieldLabel: gettext('Your E-Mail'),
101 },
102 ],
103 listeners: {
104 destroy: function() {
105 me.lookup('loginwindow').show(true);
106 },
107 },
108 }).show();
109 },
110
cd6bb503 111 control: {
775b9a7d
DM
112 'field[name=lang]': {
113 change: function(f, value) {
28eb60c0 114 let dt = Ext.Date.add(new Date(), Ext.Date.YEAR, 10);
282d45fb 115 Ext.util.Cookies.set('PMGLangCookie', value, dt);
65921b40 116
28eb60c0 117 let loginwin = this.lookupReference('loginwindow');
65921b40 118 loginwin.mask(gettext('Please wait...'), 'x-mask-loading');
775b9a7d 119 window.location.reload();
c87d46fb 120 },
775b9a7d 121 },
83c036b4
DC
122 'button[reference=quarantineButton]': {
123 click: 'openQuarantineLinkWindow',
124 },
cd6bb503 125 'button[reference=loginButton]': {
c87d46fb
TL
126 click: 'submitForm',
127 },
31f5e458
DC
128 'window[reference=loginwindow]': {
129 show: function() {
130 let me = this;
131 let view = me.getView();
132 if (view.targetview !== 'quarantineview') {
133 var sp = Ext.state.Manager.getProvider();
134 var checkboxField = this.lookupReference('saveunField');
135 var unField = this.lookupReference('usernameField');
136
137 var checked = sp.get(checkboxField.getStateId());
138 checkboxField.setValue(checked);
139
140 if (checked === true) {
141 var username = sp.get(unField.getStateId());
142 unField.setValue(username);
143 var pwField = this.lookupReference('passwordField');
144 pwField.focus();
145 }
146 }
147 },
148 },
c87d46fb 149 },
cd6bb503
DC
150 },
151
152 plugins: 'viewport',
153
ea07c9aa 154 layout: {
c87d46fb 155 type: 'border',
ea07c9aa 156 },
cd6bb503
DC
157
158 items: [
159 {
160 region: 'north',
161 xtype: 'container',
162 layout: {
163 type: 'hbox',
c87d46fb 164 align: 'middle',
cd6bb503 165 },
c45e23e4
DC
166 margin: '2 5 2 5',
167 height: 38,
cd6bb503
DC
168 items: [
169 {
c87d46fb 170 xtype: 'proxmoxlogo',
cd6bb503
DC
171 },
172 {
173 xtype: 'versioninfo',
c87d46fb
TL
174 makeApiCall: false,
175 },
176 ],
cd6bb503
DC
177 },
178 {
c87d46fb 179 region: 'center',
cd6bb503
DC
180 },
181 {
182 xtype: 'window',
183 closable: false,
184 resizable: false,
216bbcd5 185 reference: 'loginwindow',
cd6bb503
DC
186 autoShow: true,
187 modal: true,
31f5e458 188 width: 450,
cd6bb503 189
7d48b138
DC
190 defaultFocus: 'usernameField',
191
ea07c9aa 192 layout: {
c87d46fb 193 type: 'auto',
ea07c9aa 194 },
cd6bb503
DC
195
196 title: gettext('Proxmox Mail Gateway Login'),
197
198 items: [
199 {
200 xtype: 'form',
ea07c9aa 201 layout: {
c87d46fb 202 type: 'form',
ea07c9aa 203 },
cd6bb503
DC
204 defaultButton: 'loginButton',
205 url: '/api2/extjs/access/ticket',
206 reference: 'loginForm',
207
208 fieldDefaults: {
209 labelAlign: 'right',
c87d46fb 210 allowBlank: false,
cd6bb503
DC
211 },
212
213 items: [
214 {
215 xtype: 'textfield',
216 fieldLabel: gettext('User name'),
217 name: 'username',
218 itemId: 'usernameField',
c87d46fb 219 reference: 'usernameField',
31f5e458 220 stateId: 'login-username',
cd6bb503
DC
221 },
222 {
223 xtype: 'textfield',
224 inputType: 'password',
225 fieldLabel: gettext('Password'),
226 name: 'password',
c87d46fb 227 reference: 'passwordField',
cd6bb503 228 },
775b9a7d
DM
229 {
230 xtype: 'proxmoxLanguageSelector',
231 fieldLabel: gettext('Language'),
282d45fb 232 value: Ext.util.Cookies.get('PMGLangCookie') || 'en',
775b9a7d 233 name: 'lang',
c87d46fb 234 submitValue: false,
ab01cd95
DM
235 },
236 {
237 xtype: 'hiddenfield',
238 reference: 'realmfield',
239 name: 'realm',
c87d46fb
TL
240 value: 'pmg',
241 },
cd6bb503
DC
242 ],
243 buttons: [
31f5e458
DC
244 {
245 xtype: 'checkbox',
246 fieldLabel: gettext('Save User name'),
247 name: 'saveusername',
248 reference: 'saveunField',
249 stateId: 'login-saveusername',
250 labelAlign: 'right',
251 labelWidth: 150,
252 submitValue: false,
253 },
83c036b4
DC
254 {
255 text: gettext('Request Quarantine Link'),
256 reference: 'quarantineButton',
257 },
cd6bb503
DC
258 {
259 text: gettext('Login'),
260 reference: 'loginButton',
c87d46fb
TL
261 formBind: true,
262 },
263 ],
264 },
265 ],
266 },
267 ],
cd6bb503 268});