]>
git.proxmox.com Git - pmg-gui.git/blob - js/LoginView.js
1 Ext
.define('PMG.LoginView', {
2 extend
: 'Ext.container.Container',
6 xclass
: 'Ext.app.ViewController',
11 let realmfield
= me
.lookup('realmfield');
13 me
.lookup('quarantineButton').setVisible(!!Proxmox
.QuarantineLink
);
15 if (view
.targetview
!== 'quarantineview') {
19 // hide save username field for quarantine view
20 me
.lookup('saveunField').setVisible(false);
22 realmfield
.setValue('quarantine');
24 // try autologin with quarantine ticket from URL
26 let qs
= Ext
.Object
.fromQueryString(location
.search
);
27 if (qs
.ticket
=== undefined) {
30 let ticket
= decodeURIComponent(qs
.ticket
);
31 let match
= ticket
.match(/^PMGQUAR:([^\s:]+):/);
35 let username
= match
[1];
36 let loginwin
= me
.lookup('loginwindow');
37 loginwin
.autoShow
= false;
38 loginwin
.setVisible(false);
39 realmfield
.setDisabled(true);
41 me
.lookup('usernameField').setValue(username
);
42 me
.lookup('passwordField').setValue(ticket
);
47 submitForm
: async
function() {
49 let view
= me
.getView();
50 let loginForm
= me
.lookupReference('loginForm');
51 var unField
= me
.lookupReference('usernameField');
52 var saveunField
= me
.lookupReference('saveunField');
54 if (loginForm
.isValid()) {
55 if (loginForm
.isVisible()) {
56 loginForm
.mask(gettext('Please wait...'), 'x-mask-loading');
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());
65 sp
.clear(unField
.getStateId());
67 sp
.set(saveunField
.getStateId(), saveunField
.getValue());
70 let creds
= loginForm
.getValues();
73 let resp
= await Proxmox
.Async
.api2({
74 url
: '/api2/extjs/access/ticket',
79 let data
= resp
.result
.data
;
80 if (data
.ticket
.startsWith('PMG:!tfa!')) {
81 data
= await me
.performTFAChallenge(data
);
83 PMG
.Utils
.updateLoginData(data
);
84 PMG
.app
.changeView(view
.targetview
);
86 Proxmox
.Utils
.authClear();
90 gettext('Login failed. Please try again'),
96 performTFAChallenge
: async
function(data
) {
99 let userid
= data
.username
;
100 let ticket
= data
.ticket
;
101 let challenge
= JSON
.parse(decodeURIComponent(
102 ticket
.split(':')[1].slice("!tfa!".length
),
105 let resp
= await
new Promise((resolve
, reject
) => {
106 Ext
.create('Proxmox.window.TfaLoginWindow', {
110 onResolve
: value
=> resolve(value
),
115 return resp
.result
.data
;
118 openQuarantineLinkWindow: function() {
120 me
.lookup('loginwindow').setVisible(false);
121 Ext
.create('Proxmox.window.Edit', {
122 title
: gettext('Request Quarantine Link'),
123 url
: '/quarantine/sendlink',
125 submitText
: gettext('OK'),
129 xtype
: 'proxmoxtextfield',
131 fieldLabel
: gettext('Your E-Mail'),
135 destroy: function() {
136 me
.lookup('loginwindow').show(true);
143 'field[name=lang]': {
144 change: function(f
, value
) {
145 let dt
= Ext
.Date
.add(new Date(), Ext
.Date
.YEAR
, 10);
146 Ext
.util
.Cookies
.set('PMGLangCookie', value
, dt
);
148 let loginwin
= this.lookupReference('loginwindow');
149 loginwin
.mask(gettext('Please wait...'), 'x-mask-loading');
150 window
.location
.reload();
153 'button[reference=quarantineButton]': {
154 click
: 'openQuarantineLinkWindow',
156 'button[reference=loginButton]': {
159 'window[reference=loginwindow]': {
162 let view
= me
.getView();
163 if (view
.targetview
!== 'quarantineview') {
164 var sp
= Ext
.state
.Manager
.getProvider();
165 var checkboxField
= this.lookupReference('saveunField');
166 var unField
= this.lookupReference('usernameField');
168 var checked
= sp
.get(checkboxField
.getStateId());
169 checkboxField
.setValue(checked
);
171 if (checked
=== true) {
172 var username
= sp
.get(unField
.getStateId());
173 unField
.setValue(username
);
174 var pwField
= this.lookupReference('passwordField');
201 xtype
: 'proxmoxlogo',
204 xtype
: 'versioninfo',
216 reference
: 'loginwindow',
221 defaultFocus
: 'usernameField',
227 title
: gettext('Proxmox Mail Gateway Login'),
235 defaultButton
: 'loginButton',
236 url
: '/api2/extjs/access/ticket',
237 reference
: 'loginForm',
247 fieldLabel
: gettext('User name'),
249 itemId
: 'usernameField',
250 reference
: 'usernameField',
251 stateId
: 'login-username',
255 inputType
: 'password',
256 fieldLabel
: gettext('Password'),
258 reference
: 'passwordField',
261 xtype
: 'proxmoxLanguageSelector',
262 fieldLabel
: gettext('Language'),
263 value
: Ext
.util
.Cookies
.get('PMGLangCookie') || 'en',
268 xtype
: 'hiddenfield',
269 reference
: 'realmfield',
277 fieldLabel
: gettext('Save User name'),
278 name
: 'saveusername',
279 reference
: 'saveunField',
280 stateId
: 'login-saveusername',
286 text
: gettext('Request Quarantine Link'),
287 reference
: 'quarantineButton',
290 text
: gettext('Login'),
291 reference
: 'loginButton',