/* * Workspace base class * * popup login window when auth fails (call onLogin handler) * update (re-login) ticket every 15 minutes * */ Ext.define('PVE.Workspace', { extend: 'Ext.container.Viewport', title: 'Proxmox Virtual Environment', loginData: null, // Data from last login call onLogin: function(loginData) {}, // private updateLoginData: function(loginData) { var me = this; me.loginData = loginData; PVE.CSRFPreventionToken = loginData.CSRFPreventionToken; PVE.UserName = loginData.username; if (loginData.cap) { Ext.state.Manager.set('GuiCap', loginData.cap); } // creates a session cookie (expire = null) // that way the cookie gets deleted after browser window close Ext.util.Cookies.set('PVEAuthCookie', loginData.ticket, null, '/', null, true); me.onLogin(loginData); }, // private showLogin: function() { var me = this; PVE.Utils.authClear(); PVE.UserName = null; me.loginData = null; if (!me.login) { me.login = Ext.create('PVE.window.LoginWindow', { handler: function(data) { me.login = null; me.updateLoginData(data); PVE.Utils.checked_command(function() {}); // display subscription status } }); } me.onLogin(null); me.login.show(); }, initComponent : function() { var me = this; Ext.tip.QuickTipManager.init(); // fixme: what about other errors Ext.Ajax.on('requestexception', function(conn, response, options) { if (response.status == 401) { // auth failure me.showLogin(); } }); me.callParent(); if (!PVE.Utils.authOK()) { me.showLogin(); } else { if (me.loginData) { me.onLogin(me.loginData); } } Ext.TaskManager.start({ run: function() { var ticket = PVE.Utils.authOK(); if (!ticket || !PVE.UserName) { return; } Ext.Ajax.request({ params: { username: PVE.UserName, password: ticket }, url: '/api2/json/access/ticket', method: 'POST', success: function(response, opts) { var obj = Ext.decode(response.responseText); me.updateLoginData(obj.data); } }); }, interval: 15*60*1000 }); } }); Ext.define('PVE.ConsoleWorkspace', { extend: 'PVE.Workspace', alias: ['widget.pveConsoleWorkspace'], title: gettext('Console'), initComponent : function() { // novnc is a string in param // but a boolean in content /*jslint confusion: true*/ var me = this; var param = Ext.Object.fromQueryString(window.location.search); var consoleType = me.consoleType || param.console; param.novnc = (param.novnc === '1') ? true : false; var content; if (consoleType === 'kvm') { me.title = "VM " + param.vmid; if (param.vmname) { me.title += " ('" + param.vmname + "')"; } content = { xtype: 'pveKVMConsole', novnc: param.novnc, vmid: param.vmid, nodename: param.node, vmname: param.vmname, toplevel: true }; } else if (consoleType === 'lxc') { me.title = "CT " + param.vmid; if (param.vmname) { me.title += " ('" + param.vmname + "')"; } content = { xtype: 'pveLxcConsole', novnc: param.novnc, vmid: param.vmid, nodename: param.node, vmname: param.vmname, toplevel: true }; } else if (consoleType === 'shell') { me.title = "node '" + param.node + "'"; content = { xtype: 'pveShell', novnc: param.novnc, nodename: param.node, toplevel: true }; } else if (consoleType === 'upgrade') { me.title = Ext.String.format(gettext('System upgrade on node {0}'), "'" + param.node + "'"); content = { xtype: 'pveShell', novnc: param.novnc, nodename: param.node, ugradeSystem: true, toplevel: true }; } else { content = { border: false, bodyPadding: 10, html: gettext('Error') + ': No such console type' }; } Ext.apply(me, { layout: { type: 'fit' }, border: false, items: [ content ] }); me.callParent(); } }); Ext.define('PVE.StdWorkspace', { extend: 'PVE.Workspace', alias: ['widget.pveStdWorkspace'], // private setContent: function(comp) { var me = this; var cont = me.child('#content'); var lay = cont.getLayout(); var cur = lay.getActiveItem(); if (comp) { PVE.Utils.setErrorMask(cont, false); comp.border = false; cont.add(comp); if (cur !== null && lay.getNext()) { lay.next(); var task = Ext.create('Ext.util.DelayedTask', function(){ cont.remove(cur); }); task.delay(10); } } else { // helper for cleaning the content when logging out cont.removeAll(); } }, selectById: function(nodeid) { var me = this; var tree = me.down('pveResourceTree'); tree.selectById(nodeid); }, checkVmMigration: function(record) { var me = this; var tree = me.down('pveResourceTree'); tree.checkVmMigration(record); }, onLogin: function(loginData) { var me = this; me.updateUserInfo(); if (loginData) { PVE.data.ResourceStore.startUpdate(); PVE.Utils.API2Request({ url: '/version', method: 'GET', success: function(response) { PVE.VersionInfo = response.result.data; me.updateVersionInfo(); } }); } }, updateUserInfo: function() { var me = this; var ui = me.query('#userinfo')[0]; if (PVE.UserName) { var msg = Ext.String.format(gettext("You are logged in as {0}"), "'" + PVE.UserName + "'"); ui.update('