Martin Betak has uploaded a new change for review. Change subject: frontend: Add infrastructure for Console Foreign Menu ......................................................................
frontend: Add infrastructure for Console Foreign Menu Added necessary hooks to implement outputting the [ovirt] section into VV file. Please note this just related to frontend infrastructure and contains no API commitments (does not alter VV file output in any way). Moved the RestApiSessionManager to gwt-common project so it would be accessible from both webadmin and userportal. Due to the fact that uicommon does not see the generated gwt-p events and handlers we need to attach the listener for RestApiSessionAcquiredEvent in UiCommonDefaultTypeResolver. To prevent excessive number of event listeners attached we cache the created SpiceNativeImpl and VncNativeImpl. Change-Id: I0e0cc2a2fd462bd8dc9085b300ec12fe46ff4518 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=975730 Signed-off-by: Martin Betak <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java M frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java M frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java M frontend/webadmin/modules/gwt-common/exclude-filters.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java R frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java R frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java R frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java M frontend/webadmin/modules/webadmin/exclude-filters.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java 37 files changed, 395 insertions(+), 197 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/38986/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java new file mode 100644 index 0000000..7adddae --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetEngineCertificateQuery.java @@ -0,0 +1,23 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.utils.PKIResources; + +public class GetEngineCertificateQuery<P extends VdcQueryParametersBase> extends QueriesCommandBase<P> { + public GetEngineCertificateQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + try { + getQueryReturnValue().setSucceeded(false); + getQueryReturnValue().setReturnValue( + PKIResources.Resource.EngineCertificate.toString(PKIResources.Format.X509_PEM) + ); + getQueryReturnValue().setSucceeded(true); + } catch (Exception e) { + getQueryReturnValue().setExceptionString(e.getMessage()); + } + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 2495a80..090959b 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -130,6 +130,7 @@ // Certificate GetCACertificate(VdcQueryAuthType.User), + GetEngineCertificate(VdcQueryAuthType.User), SignString(VdcQueryAuthType.User), // VM Template based entities queries diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java index 805714a..93af555 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java @@ -23,8 +23,11 @@ import org.ovirt.engine.core.branding.BrandingFilter; import org.ovirt.engine.core.branding.BrandingManager; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.core.common.config.ConfigCommon; import org.ovirt.engine.core.common.constants.SessionConstants; import org.ovirt.engine.core.common.interfaces.BackendLocal; +import org.ovirt.engine.core.common.queries.ConfigurationValues; +import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -82,6 +85,8 @@ private static final String HOST_JSP = "/GwtHostPage.jsp"; //$NON-NLS-1$ private static final String UTF_CONTENT_TYPE = "text/html; charset=UTF-8"; //$NON-NLS-1$ + protected static final String ATTR_ENGINE_SESSION_TIMEOUT = "engineSessionTimeout"; //$NON-NLS-1$ + private BackendLocal backend; private ObjectMapper mapper; @@ -129,6 +134,10 @@ request.setAttribute(MD5Attributes.ATTR_SSO_TOKEN.getKey(), getValueObject(ssoToken)); } } + + // Set attribute for engineSessionTimeout object + Integer engineSessionTimeout = getEngineSessionTimeout(getEngineSessionId(request)); + request.setAttribute(ATTR_ENGINE_SESSION_TIMEOUT, getEngineSessionTimeoutObject(engineSessionTimeout)); try { // Calculate MD5 for use with If-None-Match request header @@ -292,6 +301,10 @@ toString().getBytes(StandardCharsets.UTF_8)); } } + + // Update based on engineSessionTimeout object + digest.update(request.getAttribute(ATTR_ENGINE_SESSION_TIMEOUT).toString().getBytes(StandardCharsets.UTF_8)); //$NON-NLS-1$ + return digest; } @@ -299,4 +312,16 @@ return MessageDigest.getInstance("MD5"); //$NON-NLS-1$ } + private Integer getEngineSessionTimeout(String sessionId) { + return (Integer) runPublicQuery(VdcQueryType.GetConfigurationValue, + new GetConfigurationValueParameters(ConfigurationValues.UserSessionTimeOutInterval, + ConfigCommon.defaultConfigurationVersion), sessionId); + } + + protected ObjectNode getEngineSessionTimeoutObject(Integer engineSessionTimeout) { + ObjectNode obj = createObjectNode(); + obj.put("value", String.valueOf(engineSessionTimeout)); //$NON-NLS-1$ + return obj; + } + } diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java index 64d1834..bcfa4ad 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServlet.java @@ -35,7 +35,7 @@ protected static final String ATTR_APPLICATION_MODE = "applicationMode"; //$NON-NLS-1$ protected static final String ATTR_PLUGIN_DEFS = "pluginDefinitions"; //$NON-NLS-1$ - protected static final String ATTR_ENGINE_SESSION_TIMEOUT = "engineSessionTimeout"; //$NON-NLS-1$ + protected static final String ATTR_ENGINE_REPORTS_DASHBOARD_URL = "ENGINE_REPORTS_DASHBOARD_URL"; //$NON-NLS-1$ protected static final String ATTR_ENGINE_REPORTS_RIGHTCLICK_URL = "ENGINE_REPORTS_RIGHTCLICK_URL"; //$NON-NLS-1$ protected static final String ATTR_ENGINE_REPORTS_BASE_URL = "ENGINE_REPORTS_BASE_URL"; //$NON-NLS-1$ @@ -82,10 +82,6 @@ List<PluginData> pluginData = getPluginData(); request.setAttribute(ATTR_PLUGIN_DEFS, getPluginDefinitionsArray(pluginData)); - // Set attribute for engineSessionTimeout object - Integer engineSessionTimeout = getEngineSessionTimeout(getEngineSessionId(request)); - request.setAttribute(ATTR_ENGINE_SESSION_TIMEOUT, getEngineSessionTimeoutObject(engineSessionTimeout)); - // Set attribute for engineReportsUrl object request.setAttribute(ATTR_ENGINE_REPORTS_BASE_URL, getReportInit(reportRedirectUrl.substring(reportBaseUrl.length()), @@ -117,9 +113,6 @@ // Update based on pluginDefinitions array digest.update(request.getAttribute(ATTR_PLUGIN_DEFS).toString().getBytes(StandardCharsets.UTF_8)); - - // Update based on engineSessionTimeout object - digest.update(request.getAttribute(ATTR_ENGINE_SESSION_TIMEOUT).toString().getBytes(StandardCharsets.UTF_8)); // Update based on report URL parameters. digest.update(request.getAttribute(ATTR_ENGINE_REPORTS_BASE_URL).toString().getBytes()); @@ -156,18 +149,6 @@ arr.add(dataObj); } return arr; - } - - protected Integer getEngineSessionTimeout(String sessionId) { - return (Integer) runPublicQuery(VdcQueryType.GetConfigurationValue, - new GetConfigurationValueParameters(ConfigurationValues.UserSessionTimeOutInterval, - ConfigCommon.defaultConfigurationVersion), sessionId); - } - - protected ObjectNode getEngineSessionTimeoutObject(Integer engineSessionTimeout) { - ObjectNode obj = createObjectNode(); - obj.put("value", String.valueOf(engineSessionTimeout)); //$NON-NLS-1$ - return obj; } } diff --git a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java index a9ddff4..0e68d49 100644 --- a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java +++ b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java @@ -82,6 +82,9 @@ @Mock private ObjectNode mockUserInfoObject; + @Mock + protected ObjectNode mockEngineSessionTimeoutObject; + @Captor protected ArgumentCaptor<byte[]> byteArrayCaptor; @@ -92,6 +95,7 @@ when(mockRequest.getAttribute(GwtDynamicHostPageServlet. MD5Attributes.ATTR_SELECTOR_SCRIPT.getKey())). thenReturn(SELECTOR_SCRIPT); + when(mockRequest.getAttribute(GwtDynamicHostPageServlet.ATTR_ENGINE_SESSION_TIMEOUT)).thenReturn(mockEngineSessionTimeoutObject); when(mockRequest.getSession()).thenReturn(mockSession); when(mockRequest.getSession().getServletContext()).thenReturn(mockServletContext); when(mockSession.getId()).thenReturn("sessionId"); //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java index ae1b42a..e510406 100644 --- a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java +++ b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java @@ -53,9 +53,6 @@ // Cannot use @Mock since ArrayNode is final private ArrayNode mockPluginDefinitionsArray; - @Mock - private ObjectNode mockEngineSessionTimeoutObject; - @Before public void setUpMockRequest() { ObjectMapper mapper = new ObjectMapper(); @@ -66,7 +63,6 @@ when(mockApplicationModeObject.toString()).thenReturn(APPLICATION_MODE); when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_APPLICATION_MODE)).thenReturn(mockApplicationModeObject); when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_PLUGIN_DEFS)).thenReturn(mockPluginDefinitionsArray); - when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_ENGINE_SESSION_TIMEOUT)).thenReturn(mockEngineSessionTimeoutObject); when(mockRequest.getAttribute(WebAdminHostPageServlet.ATTR_ENGINE_REPORTS_BASE_URL)).thenReturn(""); } @@ -111,10 +107,11 @@ UnsupportedEncodingException { MessageDigest result = testServlet.getMd5Digest(mockRequest); assertEquals(result, mockDigest); - verify(mockDigest, atLeast(3)).update(byteArrayCaptor.capture()); + verify(mockDigest, atLeast(4)).update(byteArrayCaptor.capture()); assertArrayEquals(SELECTOR_SCRIPT.getBytes(StandardCharsets.UTF_8), byteArrayCaptor.getAllValues().get(0)); - assertArrayEquals(APPLICATION_MODE.getBytes(StandardCharsets.UTF_8), byteArrayCaptor.getAllValues().get(1)); - assertArrayEquals(mockPluginDefinitionsArray.toString().getBytes(StandardCharsets.UTF_8), byteArrayCaptor.getAllValues().get(2)); + assertArrayEquals(mockEngineSessionTimeoutObject.toString().getBytes(StandardCharsets.UTF_8), byteArrayCaptor.getAllValues().get(1)); + assertArrayEquals(APPLICATION_MODE.getBytes(StandardCharsets.UTF_8), byteArrayCaptor.getAllValues().get(2)); + assertArrayEquals(mockPluginDefinitionsArray.toString().getBytes(StandardCharsets.UTF_8), byteArrayCaptor.getAllValues().get(3)); } @Test diff --git a/frontend/webadmin/modules/gwt-common/exclude-filters.xml b/frontend/webadmin/modules/gwt-common/exclude-filters.xml index 122feee..818824b 100644 --- a/frontend/webadmin/modules/gwt-common/exclude-filters.xml +++ b/frontend/webadmin/modules/gwt-common/exclude-filters.xml @@ -123,6 +123,18 @@ </Match> <!-- + findbugs complain of unused field in class. + This is a GWT class and use to generate code + + findbugs reason: + UuF: Unused field (UUF_UNUSED_FIELD) + --> + <Match> + <Class name="org.ovirt.engine.ui.common.restapi.RestApiSessionAcquired" /> + <Bug code="UuF"/> + </Match> + + <!-- findbugs complains that we don't use pathEditor in AbstractStorageView We do use that code in inherited classes such as GlusterStorageView diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java index 699db46..5d9518a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseSystemModule.java @@ -7,6 +7,7 @@ import org.ovirt.engine.ui.common.CommonApplicationTemplates; import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.auth.LoggedInGatekeeper; +import org.ovirt.engine.ui.common.restapi.RestApiSessionManager; import org.ovirt.engine.ui.common.system.ApplicationFocusManager; import org.ovirt.engine.ui.common.system.AsyncCallFailureHandler; import org.ovirt.engine.ui.common.system.ClientStorage; @@ -84,6 +85,7 @@ bind(VdcOperationManager.class).in(Singleton.class); bind(OperationProcessor.class).in(Singleton.class); bind(CommunicationProvider.class).to(GWTRPCCommunicationProvider.class).in(Singleton.class); + bind(RestApiSessionManager.class).in(Singleton.class); } protected void bindResourceConfiguration( diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java index 7686800..6d02725 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUiCommonModule.java @@ -3,13 +3,27 @@ import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl; import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener; import org.ovirt.engine.ui.common.uicommon.LoggerImpl; +import org.ovirt.engine.ui.common.uicommon.NoVncImpl; +import org.ovirt.engine.ui.common.uicommon.RdpNativeImpl; +import org.ovirt.engine.ui.common.uicommon.RdpPluginImpl; +import org.ovirt.engine.ui.common.uicommon.SpiceHtml5Impl; +import org.ovirt.engine.ui.common.uicommon.SpiceNativeImpl; +import org.ovirt.engine.ui.common.uicommon.SpicePluginImpl; import org.ovirt.engine.ui.common.uicommon.UiCommonDefaultTypeResolver; +import org.ovirt.engine.ui.common.uicommon.VncNativeImpl; import org.ovirt.engine.ui.uicommonweb.Configurator; import org.ovirt.engine.ui.uicommonweb.ILogger; import org.ovirt.engine.ui.uicommonweb.ITypeResolver; import com.google.gwt.inject.client.AbstractGinModule; import com.google.inject.Singleton; +import org.ovirt.engine.ui.uicommonweb.models.vms.INoVnc; +import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpNative; +import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpPlugin; +import org.ovirt.engine.ui.uicommonweb.models.vms.ISpiceHtml5; +import org.ovirt.engine.ui.uicommonweb.models.vms.ISpiceNative; +import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin; +import org.ovirt.engine.ui.uicommonweb.models.vms.IVncNative; /** * GIN module containing common UiCommon integration bindings. @@ -17,14 +31,27 @@ public abstract class BaseUiCommonModule extends AbstractGinModule { protected void bindCommonIntegration() { - bind(ITypeResolver.class).to(UiCommonDefaultTypeResolver.class).in(Singleton.class); + bind(ITypeResolver.class).to(UiCommonDefaultTypeResolver.class).asEagerSingleton(); bind(FrontendEventsHandlerImpl.class).in(Singleton.class); bind(FrontendFailureEventListener.class).in(Singleton.class); bind(ILogger.class).to(LoggerImpl.class).in(Singleton.class); + + bindConsoles(); } protected void bindConfiguratorIntegration(Class<? extends Configurator> configurator) { bind(Configurator.class).to(configurator).in(Singleton.class); } + private void bindConsoles() { + bind(INoVnc.class).to(NoVncImpl.class); + bind(IVncNative.class).to(VncNativeImpl.class); + + bind(ISpiceHtml5.class).to(SpiceHtml5Impl.class); + bind(ISpiceNative.class).to(SpiceNativeImpl.class); + bind(ISpicePlugin.class).to(SpicePluginImpl.class); + + bind(IRdpNative.class).to(RdpNativeImpl.class); + bind(IRdpPlugin.class).to(RdpPluginImpl.class); + } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/EngineSessionTimeoutData.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java similarity index 89% rename from frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/EngineSessionTimeoutData.java rename to frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java index 92a3f35..4ab00e0 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/EngineSessionTimeoutData.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/EngineSessionTimeoutData.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.ui.webadmin.plugin.restapi; +package org.ovirt.engine.ui.common.restapi; import com.google.gwt.core.client.JavaScriptObject; diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionAcquired.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java similarity index 80% rename from frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionAcquired.java rename to frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java index 24cc929..6d254c8 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionAcquired.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionAcquired.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.ui.webadmin.plugin.restapi; +package org.ovirt.engine.ui.common.restapi; import com.gwtplatform.dispatch.annotation.GenEvent; diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java similarity index 99% rename from frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java rename to frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java index 5a5dc83..b04295c 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/restapi/RestApiSessionManager.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/restapi/RestApiSessionManager.java @@ -1,4 +1,4 @@ -package org.ovirt.engine.ui.webadmin.plugin.restapi; +package org.ovirt.engine.ui.common.restapi; import java.util.logging.Level; import java.util.logging.Logger; diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java index cd0eb36..a213a16 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/system/BaseApplicationInit.java @@ -1,14 +1,20 @@ package org.ovirt.engine.ui.common.system; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.common.auth.AutoLoginData; import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.auth.CurrentUser.LogoutHandler; import org.ovirt.engine.ui.common.auth.SSOTokenData; +import org.ovirt.engine.ui.common.restapi.EngineSessionTimeoutData; +import org.ovirt.engine.ui.common.restapi.RestApiSessionManager; import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl; import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener; import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.frontend.FrontendLoginHandler; import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.frontend.communication.SSOTokenChangeEvent; import org.ovirt.engine.ui.uicommonweb.ITypeResolver; @@ -35,6 +41,7 @@ */ public abstract class BaseApplicationInit<T extends LoginModel> implements Bootstrapper, LogoutHandler { + private final RestApiSessionManager restApiSessionManager; private final ITypeResolver typeResolver; private final FrontendEventsHandlerImpl frontendEventsHandler; protected final FrontendFailureEventListener frontendFailureEventListener; @@ -57,7 +64,8 @@ Provider<T> loginModelProvider, LockInteractionManager lockInteractionManager, Frontend frontend, CurrentUserRole currentUserRole, - Provider<CommonModel> commonModelProvider) { + Provider<CommonModel> commonModelProvider, + RestApiSessionManager restApiSessionManager) { this.commonModelProvider = commonModelProvider; this.typeResolver = typeResolver; this.frontendEventsHandler = frontendEventsHandler; @@ -68,6 +76,7 @@ this.lockInteractionManager = lockInteractionManager; this.frontend = frontend; this.currentUserRole = currentUserRole; + this.restApiSessionManager = restApiSessionManager; } @Override @@ -84,6 +93,12 @@ AutoLoginData autoLoginData = AutoLoginData.instance(); if (autoLoginData != null) { handleAutoLogin(autoLoginData); + } + + // Check for Engine user session timeout configuration + EngineSessionTimeoutData engineSessionTimeoutData = EngineSessionTimeoutData.instance(); + if (engineSessionTimeoutData != null) { + restApiSessionManager.setSessionTimeout(engineSessionTimeoutData.getValue()); } } @@ -175,6 +190,33 @@ }); frontend.setFilterQueries(filterFrontendQueries()); + + // Configure REST API integration for availability of engine session id + frontend.setLoginHandler(new FrontendLoginHandler() { + @Override + public void onLoginSuccess() { + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + frontend.runQuery(VdcQueryType.GetEngineSessionIdToken, + new VdcQueryParametersBase(), + new AsyncQuery(new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + String engineAuthToken = ((VdcQueryReturnValue) returnValue).getReturnValue(); + restApiSessionManager.acquireSession(engineAuthToken); + } + }) + ); + } + }); + } + + @Override + public void onLogout() { + restApiSessionManager.releaseSession(); + } + }); } /** @@ -204,6 +246,14 @@ SSOTokenChangeEvent.fire(eventBus, SSOTokenData.instance().getToken()); // Indicate that the user should be logged in automatically user.setAutoLogin(true); + + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + // Assume the REST API session has been acquired and is still active + restApiSessionManager.reuseSession(); + } + }); } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java new file mode 100644 index 0000000..655e527 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractConsole.java @@ -0,0 +1,9 @@ +package org.ovirt.engine.ui.common.uicommon; + +import com.google.inject.Inject; +import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; + +public class AbstractConsole { + @Inject + protected ConsoleUtils consoleUtils; +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java index 200e468..2dea503 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractRdp.java @@ -3,7 +3,7 @@ import org.ovirt.engine.ui.frontend.Frontend; -public class AbstractRdp { +public class AbstractRdp extends AbstractConsole { private String address; private String guestID; diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java index a7f77c0..631e5fb 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractSpice.java @@ -6,15 +6,14 @@ import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.compat.Version; -import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; -import org.ovirt.engine.ui.uicommonweb.TypeResolver; +import org.ovirt.engine.ui.common.uicommon.model.AbstractConsoleWithForeignMenu; import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.WANDisableEffects; import org.ovirt.engine.ui.uicommonweb.models.vms.WanColorDepth; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; -public abstract class AbstractSpice { +public abstract class AbstractSpice extends AbstractConsoleWithForeignMenu { protected Event<EventArgs> disconnectedEvent = new Event<EventArgs>( SpiceConsoleModel.spiceDisconnectedEventDefinition); @@ -43,7 +42,6 @@ protected String sslChanels; protected String cipherSuite; protected String hostSubject; - protected String trustStore; protected String title; protected String toggleFullscreenHotKey; protected String releaseCursorHotKey; @@ -69,8 +67,6 @@ // even the spice proxy is globally configured, user can choose to disable it for specific VM private boolean spiceProxyEnabled; - - private final ConsoleUtils consoleUtils = (ConsoleUtils) TypeResolver.getInstance().resolve(ConsoleUtils.class); public AbstractSpice() { setWANDisableEffects(new ArrayList<WANDisableEffects>()); @@ -274,14 +270,6 @@ public void setHostSubject(String hostSubject) { this.hostSubject = hostSubject; - } - - public String getTrustStore() { - return trustStore; - } - - public void setTrustStore(String trustStore) { - this.trustStore = trustStore; } public String getTitle() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java index 9fbb42b..97e786ee 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/AbstractVnc.java @@ -1,9 +1,8 @@ package org.ovirt.engine.ui.common.uicommon; -import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; -import org.ovirt.engine.ui.uicommonweb.TypeResolver; +import org.ovirt.engine.ui.common.uicommon.model.AbstractConsoleWithForeignMenu; -public class AbstractVnc { +public abstract class AbstractVnc extends AbstractConsoleWithForeignMenu { private String vncHost; private String vncPort; @@ -11,7 +10,6 @@ private String title; private boolean remapCtrlAltDelete; - private final ConsoleUtils consoleUtils = (ConsoleUtils) TypeResolver.getInstance().resolve(ConsoleUtils.class); private int ticketValiditySeconds; private String toggleFullscreenHotKey; private String releaseCursorHotKey; diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java index 617f978..8beff30 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/NoVncImpl.java @@ -9,17 +9,18 @@ private static final String CLIENT_PAGE = BaseContextPathData.getInstance().getRelativePath() + "services/novnc-main.html"; //$NON-NLS-1$ - private final WebsocketProxyConfig config; - - public NoVncImpl() { - this.config = new WebsocketProxyConfig( - (String) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy), getVncHost()); - } + private WebsocketProxyConfig config; @Override public void invokeClient() { - WebClientConsoleInvoker invoker = new WebClientConsoleInvoker(CLIENT_PAGE, config, getVncHost(), getVncPort(), getTicket(), false); + WebClientConsoleInvoker invoker = new WebClientConsoleInvoker(CLIENT_PAGE, getConfig(), getVncHost(), getVncPort(), getTicket(), false); invoker.invokeClient(); } + protected WebsocketProxyConfig getConfig() { + if (config != null) { + config = new WebsocketProxyConfig((String) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy), getVncHost()); + } + return config; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java index b85db86..064f158 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java @@ -1,14 +1,14 @@ package org.ovirt.engine.ui.common.uicommon; import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel; -import org.ovirt.engine.ui.uicommonweb.models.vms.IRdp; +import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpNative; /** * Class for generating an RDP descriptor and invoking native RDP client. * This method of console invocation doesn't support automatic login. * */ -public class RdpNativeImpl extends AbstractRdp implements IRdp { +public class RdpNativeImpl extends AbstractRdp implements IRdpNative { private static final String BASE_CONFIG_FILE = "session bpp:i:32\n" + //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java index 418cd86..511cb9b 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpPluginImpl.java @@ -2,8 +2,6 @@ import java.util.logging.Logger; -import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; -import org.ovirt.engine.ui.uicommonweb.TypeResolver; import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol; import org.ovirt.engine.ui.uicommonweb.models.vms.ErrorCodeEventArgs; import org.ovirt.engine.ui.uicommonweb.models.vms.IRdpPlugin; @@ -23,13 +21,6 @@ private static EventDefinition RdpDisconnectedEventDefinition = new EventDefinition("RdpDisconnected", RdpConsoleModel.class); //$NON-NLS-1$ private final Event<ErrorCodeEventArgs> disconnectedEvent = new Event<ErrorCodeEventArgs>(RdpDisconnectedEventDefinition); private RdpConsoleModel parentModel; - - private final ConsoleUtils consoleUtils; - - public RdpPluginImpl() { - super(); - this.consoleUtils = (ConsoleUtils) TypeResolver.getInstance().resolve(ConsoleUtils.class); - } @Override public void connect() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java index 1243151..18d52f0 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceHtml5Impl.java @@ -9,20 +9,19 @@ private static final String CLIENT_PAGE = BaseContextPathData.getInstance().getRelativePath() + "services/spicehtml5-main.html"; //$NON-NLS-1$ - private final WebsocketProxyConfig config; - - public SpiceHtml5Impl() { - super(); - - this.config = new WebsocketProxyConfig( - (String) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy), getHost()); - } + private WebsocketProxyConfig config; @Override public void connect() { boolean sslTarget = securePort == -1 ? false : true; - WebClientConsoleInvoker invoker = new WebClientConsoleInvoker(CLIENT_PAGE, config, getHost(), String.valueOf(sslTarget ? securePort : port), getPassword(), sslTarget); + WebClientConsoleInvoker invoker = new WebClientConsoleInvoker(CLIENT_PAGE, getConfig(), getHost(), String.valueOf(sslTarget ? securePort : port), getPassword(), sslTarget); invoker.invokeClient(); } + protected WebsocketProxyConfig getConfig() { + if (config == null) { + config = new WebsocketProxyConfig((String) AsyncDataProvider.getInstance().getConfigValuePreConverted(ConfigurationValues.WebSocketProxy), getHost()); + } + return config; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java index 8d72378..3b16935 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpiceNativeImpl.java @@ -81,6 +81,8 @@ configBuilder.append("\nsecure-channels=").append(formatSecureChannels(getSslChanels())); //$NON-NLS-1$ } + writeOVirtSection(configBuilder); + ConsoleModel.makeConsoleConfigRequest("console.vv", "application/x-virt-viewer; charset=UTF-8", configBuilder.toString()); //$NON-NLS-1$ $NON-NLS-2$ } @@ -92,5 +94,4 @@ ? "" //$NON-NLS-1$ : sslChanels.replace(',', ';'); } - } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java index 5894b11..0865886 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/SpicePluginImpl.java @@ -4,16 +4,16 @@ import java.util.List; import java.util.logging.Logger; +import com.google.inject.Inject; import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.uicommonweb.Configurator; -import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; -import org.ovirt.engine.ui.uicommonweb.TypeResolver; import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin; public class SpicePluginImpl extends AbstractSpice implements ISpicePlugin { private static final Logger logger = Logger.getLogger(SpicePluginImpl.class.getName()); - private final Configurator configurator = (Configurator) TypeResolver.getInstance().resolve(Configurator.class); - private final ConsoleUtils cu = (ConsoleUtils) TypeResolver.getInstance().resolve(ConsoleUtils.class); + + @Inject + private Configurator configurator; @Override public void connect() { @@ -21,7 +21,7 @@ if (configurator.isClientLinuxFirefox()) { connectNativelyViaXPI(); - } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) { + } else if (configurator.isClientWindowsExplorer() || consoleUtils.isIE11()) { connectNativelyViaActiveX(); } } @@ -221,7 +221,7 @@ public boolean detectBrowserPlugin() { if (configurator.isClientLinuxFirefox()) { return detectXpiPlugin(); - } else if (configurator.isClientWindowsExplorer() || cu.isIE11()) { + } else if (configurator.isClientWindowsExplorer() || consoleUtils.isIE11()) { return detectActiveXPlugin(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java index 312ba10..80fd6bd 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java @@ -1,6 +1,9 @@ package org.ovirt.engine.ui.common.uicommon; +import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; +import com.google.inject.Provider; +import org.ovirt.engine.ui.common.restapi.RestApiSessionAcquiredEvent; import org.ovirt.engine.ui.uicommonweb.Configurator; import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister; import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; @@ -16,8 +19,9 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.ISpiceNative; import org.ovirt.engine.ui.uicommonweb.models.vms.ISpicePlugin; import org.ovirt.engine.ui.uicommonweb.models.vms.IVncNative; +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; -public class UiCommonDefaultTypeResolver implements ITypeResolver { +public class UiCommonDefaultTypeResolver implements ITypeResolver, RestApiSessionAcquiredEvent.RestApiSessionAcquiredHandler { private final Configurator configurator; private final ILogger logger; @@ -25,19 +29,50 @@ private final ConsoleOptionsFrontendPersister consoleOptionsFrontendPersister; private final ConsoleUtils consoleUtils; private final ErrorPopupManager errorPopupManager; - private CurrentUserRole currentUserRole; + private final CurrentUserRole currentUserRole; + + // we inject providers for the console impls since they + // contain state unique for each connect operation and thus + // new instance is required each time + private final Provider<ISpicePlugin> spicePluginProvider; + private final Provider<ISpiceNative> spiceNativeProvider; + private final Provider<ISpiceHtml5> spiceHtml5Provider; + private final Provider<IRdpPlugin> rdpPluginProvider; + private final Provider<IRdpNative> rdpNativeProvider; + private final Provider<IVncNative> vncNativeProvider; + private final Provider<INoVnc> noVncProvider; + + private String sessionId; @Inject public UiCommonDefaultTypeResolver(Configurator configurator, ILogger logger, ConsoleUtils consoleUtils, ErrorPopupManager errorPopupManager, ConsoleOptionsFrontendPersister consoleOptionsFrontendPersister, - CurrentUserRole currentUserRole) { + CurrentUserRole currentUserRole, + EventBus eventBus, + Provider<ISpicePlugin> spicePluginProvider, + Provider<ISpiceNative> spiceNativeProvider, + Provider<ISpiceHtml5> spiceHtml5Provider, + Provider<IRdpPlugin> rdpPluginProvider, + Provider<IRdpNative> rdpNativeProvider, + Provider<IVncNative> vncNativeProvider, + Provider<INoVnc> noVncProvider) { this.configurator = configurator; this.logger = logger; this.consoleOptionsFrontendPersister = consoleOptionsFrontendPersister; this.consoleUtils = consoleUtils; this.errorPopupManager = errorPopupManager; this.currentUserRole = currentUserRole; + + this.spicePluginProvider = spicePluginProvider; + this.spiceNativeProvider = spiceNativeProvider; + this.spiceHtml5Provider = spiceHtml5Provider; + this.rdpPluginProvider = rdpPluginProvider; + this.rdpNativeProvider = rdpNativeProvider; + this.vncNativeProvider = vncNativeProvider; + this.noVncProvider = noVncProvider; + + eventBus.addHandler(RestApiSessionAcquiredEvent.getType(), this); } @SuppressWarnings("rawtypes") @@ -50,19 +85,19 @@ } else if (type == ITimer.class) { return new TimerImpl(); } else if (type == ISpicePlugin.class) { - return new SpicePluginImpl(); + return spicePluginProvider.get(); } else if (type == ISpiceNative.class) { - return new SpiceNativeImpl(); + return withSessionId(spiceNativeProvider.get()); } else if (type == ISpiceHtml5.class) { - return new SpiceHtml5Impl(); + return spiceHtml5Provider.get(); } else if (type == IRdpPlugin.class) { - return new RdpPluginImpl(); + return rdpPluginProvider.get(); } else if (type == IRdpNative.class) { - return new RdpNativeImpl(); + return rdpNativeProvider.get(); } else if (type == INoVnc.class) { - return new NoVncImpl(); + return noVncProvider.get(); } else if (type == IVncNative.class) { - return new VncNativeImpl(); + return withSessionId(vncNativeProvider.get()); } else if (type == ConsoleOptionsFrontendPersister.class) { return consoleOptionsFrontendPersister; } else if (type == ConsoleUtils.class) { @@ -76,4 +111,13 @@ throw new RuntimeException("UiCommon Resolver cannot resolve type: " + type); //$NON-NLS-1$ } + public <T extends HasForeignMenuData> T withSessionId(T consoleImpl) { + consoleImpl.setSessionId(sessionId); + return consoleImpl; + } + + @Override + public void onRestApiSessionAcquired(RestApiSessionAcquiredEvent event) { + this.sessionId = event.getSessionId(); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java index 9d57e6e..573a7ad 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/VncNativeImpl.java @@ -2,9 +2,9 @@ import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel; -import org.ovirt.engine.ui.uicommonweb.models.vms.IVnc; +import org.ovirt.engine.ui.uicommonweb.models.vms.IVncNative; -public class VncNativeImpl extends AbstractVnc implements IVnc { +public class VncNativeImpl extends AbstractVnc implements IVncNative { @Override public void invokeClient() { @@ -29,7 +29,8 @@ configBuilder.append("\nsecure-attention=").append(getSecureAttentionMapping()); //$NON-NLS-1$ } + writeOVirtSection(configBuilder); + ConsoleModel.makeConsoleConfigRequest("console.vv", "application/x-virt-viewer; charset=UTF-8", configBuilder.toString()); //$NON-NLS-1$ $NON-NLS-2$ } - } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java new file mode 100644 index 0000000..1332b98 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/model/AbstractConsoleWithForeignMenu.java @@ -0,0 +1,65 @@ +package org.ovirt.engine.ui.common.uicommon.model; + +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.ui.common.uicommon.AbstractConsole; +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; + +public class AbstractConsoleWithForeignMenu extends AbstractConsole implements HasForeignMenuData { + private String sessionId; + private Guid vmId; + private String engineHost; + private String trustStore; + private boolean admin; + + @Override + public String getSessionId() { + return sessionId; + } + + @Override + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + @Override + public Guid getVmId() { + return vmId; + } + + @Override + public void setVmId(Guid vmId) { + this.vmId = vmId; + } + + @Override + public String getEngineHost() { + return engineHost; + } + + @Override + public void setEngineHost(String host) { + this.engineHost = host; + } + + @Override + public String getTrustStore() { + return trustStore; + } + + @Override + public void setTrustStore(String trustStore) { + this.trustStore = trustStore; + } + + public boolean isAdmin() { + return admin; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + protected void writeOVirtSection(StringBuilder configBuilder) { + // TODO: implement when [ovirt] section API is defined + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java index 156e8d3..e5f306e7 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ConsoleModel.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; import com.google.gwt.dom.client.FormElement; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; @@ -27,6 +28,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventDefinition; @@ -102,12 +104,6 @@ forceVmStatusUp = value; onPropertyChanged(new PropertyChangedEventArgs("ForceVmStatusUp")); //$NON-NLS-1$ } - } - - @Override - public VM getEntity() - { - return (VM) super.getEntity(); } /** @@ -326,4 +322,11 @@ } return 0; } + + protected void setForeignMenuData(HasForeignMenuData nativeImpl, String engineCertificate) { + nativeImpl.setEngineHost(Window.Location.getHost()); + nativeImpl.setVmId(getEntity().getId()); + nativeImpl.setTrustStore(engineCertificate); + nativeImpl.setAdmin(Frontend.getInstance().getLoggedInUser().isAdmin()); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java index 36ad136..f30fc5d 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ISpiceNative.java @@ -1,9 +1,11 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; + /** - * Marking interface + * Marking interface for native SPICE implementations * */ -public interface ISpiceNative extends ISpice { +public interface ISpiceNative extends ISpice, HasForeignMenuData { } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java index efe20d5..2133e65 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/IVncNative.java @@ -1,5 +1,11 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; -public interface IVncNative extends IVnc { +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; + +/** + * Marking interface for native VNC implementations + * + */ +public interface IVncNative extends IVnc, HasForeignMenuData { } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java index 3f4e10d..513bee9 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java @@ -44,6 +44,7 @@ import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; @@ -65,6 +66,7 @@ public static EventDefinition wanDisableEffectsChangeEventDefinition; private SpiceMenu menu; + private ISpice privatespice; private ClientConsoleMode consoleMode; @@ -341,7 +343,7 @@ } if (!success) { - boolean enableSpiceRootCertificateValidation = (Boolean) result.getReturnValues().get(3).getReturnValue(); + boolean enableSpiceRootCertificateValidation = result.getReturnValues().get(3).getReturnValue(); VdcQueryReturnValue caCertificateReturnValue = result.getReturnValues().get(5); // If only the caCertificate query failed - ignore failure (goto onSuccess) @@ -359,18 +361,18 @@ String cipherSuite = null; String spiceSecureChannels = null; - boolean isSSLEnabled = (Boolean) returnValues.get(0).getReturnValue(); + boolean isSSLEnabled = returnValues.get(0).getReturnValue(); if (isSSLEnabled) { - cipherSuite = (String) returnValues.get(1).getReturnValue(); - spiceSecureChannels = (String) returnValues.get(2).getReturnValue(); + cipherSuite = returnValues.get(1).getReturnValue(); + spiceSecureChannels = returnValues.get(2).getReturnValue(); } String certificateSubject = ""; //$NON-NLS-1$ String caCertificate = ""; //$NON-NLS-1$ - if ((Boolean) returnValues.get(3).getReturnValue()) { - certificateSubject = (String) returnValues.get(4).getReturnValue(); - caCertificate = (String) returnValues.get(5).getReturnValue(); + if (returnValues.get(3).getReturnValue()) { + certificateSubject = returnValues.get(4).getReturnValue(); + caCertificate = returnValues.get(5).getReturnValue(); } GraphicsInfo spiceInfo = getEntity().getGraphicsInfos().get(GraphicsType.SPICE); @@ -396,6 +398,10 @@ getspice().setHostSubject(certificateSubject); getspice().setTrustStore(caCertificate); + if (getspice() instanceof HasForeignMenuData) { + HasForeignMenuData spiceNativeImpl = (HasForeignMenuData) getspice(); + setForeignMenuData(spiceNativeImpl, getspice().getTrustStore()); + } getspice().setTitle(getClientTitle()); @@ -429,8 +435,8 @@ ArrayList<String> isos = new ArrayList<String>(); - if (returnValues.size() > 6) { - ArrayList<RepoImage> repoList = returnValues.get(6).getReturnValue(); + if (returnValues.size() > 7) { + ArrayList<RepoImage> repoList = returnValues.get(7).getReturnValue(); for (RepoImage repoImage : repoList) { isos.add(repoImage.getRepoImageId()); } @@ -518,7 +524,7 @@ public void onSuccess(Object model, Object ReturnValue) { SpiceConsoleModel spiceConsoleModel = (SpiceConsoleModel) model; String address = - (String) ((VdcQueryReturnValue) ReturnValue).getReturnValue(); + ((VdcQueryReturnValue) ReturnValue).getReturnValue(); spiceConsoleModel.getspice().setHost(address); spiceConsoleModel.spiceConnect(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java index 0d3fc04..c68e83f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VncConsoleModel.java @@ -8,6 +8,7 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.StringHelper; @@ -20,6 +21,7 @@ import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicommonweb.restapi.HasForeignMenuData; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; @@ -162,7 +164,18 @@ vncImpl.setReleaseCursorHotKey(getReleaseCursorKeys()); vncImpl.setTicketValiditySeconds(TICKET_VALIDITY_SECONDS); - vncImpl.invokeClient(); + if (vncImpl instanceof HasForeignMenuData) { + final HasForeignMenuData vncNativeImpl = (HasForeignMenuData) vncImpl; + Frontend.getInstance().runQuery(VdcQueryType.GetCACertificate, new VdcQueryParametersBase(), new AsyncQuery(new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + setForeignMenuData(vncNativeImpl, returnValue.toString()); + vncImpl.invokeClient(); + } + })); + } else { + vncImpl.invokeClient(); + } } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java new file mode 100644 index 0000000..81fe940 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/restapi/HasForeignMenuData.java @@ -0,0 +1,20 @@ +package org.ovirt.engine.ui.uicommonweb.restapi; + +import org.ovirt.engine.core.compat.Guid; + +public interface HasForeignMenuData { + String getSessionId(); + void setSessionId(String sessionId); + + Guid getVmId(); + void setVmId(Guid vmId); + + String getEngineHost(); + void setEngineHost(String host); + + String getTrustStore(); + void setTrustStore(String trustStore); + + boolean isAdmin(); + void setAdmin(boolean admin); +} diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java index a57fdd2..eba4251 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/system/ApplicationInit.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.userportal.system; import org.ovirt.engine.ui.common.auth.CurrentUser; +import org.ovirt.engine.ui.common.restapi.RestApiSessionManager; import org.ovirt.engine.ui.common.system.BaseApplicationInit; import org.ovirt.engine.ui.common.system.LockInteractionManager; import org.ovirt.engine.ui.common.uicommon.ClientAgentType; @@ -44,9 +45,10 @@ UserPortalCurrentUserRole userRole, ConnectAutomaticallyManager connectAutomaticallyManager, ClientAgentType clientAgentType, - ApplicationDynamicMessages dynamicMessages) { + ApplicationDynamicMessages dynamicMessages, + RestApiSessionManager restApiSessionManager) { super(typeResolver, frontendEventsHandler, frontendFailureEventListener, - user, eventBus, loginModelProvider, lockInteractionManager, frontend, userRole, null); + user, eventBus, loginModelProvider, lockInteractionManager, frontend, userRole, null, restApiSessionManager); this.placeManager = placeManager; this.userRole = userRole; this.connectAutomaticallyManager = connectAutomaticallyManager; diff --git a/frontend/webadmin/modules/webadmin/exclude-filters.xml b/frontend/webadmin/modules/webadmin/exclude-filters.xml index f27334f..35442b3 100644 --- a/frontend/webadmin/modules/webadmin/exclude-filters.xml +++ b/frontend/webadmin/modules/webadmin/exclude-filters.xml @@ -18,18 +18,6 @@ UuF: Unused field (UUF_UNUSED_FIELD) --> <Match> - <Class name="org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionAcquired" /> - <Bug code="UuF"/> - </Match> - - <!-- - findbugs complain of unused field in class. - This is a GWT class and use to generate code - - findbugs reason: - UuF: Unused field (UUF_UNUSED_FIELD) - --> - <Match> <Class name="org.ovirt.engine.ui.webadmin.section.main.presenter.UpdateMainContentLayout" /> <Bug code="UuF"/> </Match> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java index 3c8edc2..0c623dc 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PluginModule.java @@ -3,7 +3,6 @@ import org.ovirt.engine.ui.webadmin.plugin.PluginEventHandler; import org.ovirt.engine.ui.webadmin.plugin.PluginManager; import org.ovirt.engine.ui.webadmin.plugin.api.PluginUiFunctions; -import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionManager; import org.ovirt.engine.ui.webadmin.section.main.presenter.DynamicUrlContentTabPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.DynamicUrlContentTabProxyFactory; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.DynamicUrlContentPopupPresenterWidget; @@ -23,7 +22,6 @@ bind(PluginManager.class).asEagerSingleton(); bind(PluginEventHandler.class).asEagerSingleton(); bind(PluginUiFunctions.class).in(Singleton.class); - bind(RestApiSessionManager.class).in(Singleton.class); // Dynamic tab component bind(DynamicUrlContentTabPresenter.ViewDef.class).to(DynamicUrlContentTabView.class); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java index c46e924..2aa5dd1 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/plugin/PluginEventHandler.java @@ -5,12 +5,12 @@ import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.auth.UserLoginChangeEvent; import org.ovirt.engine.ui.common.auth.UserLoginChangeEvent.UserLoginChangeHandler; +import org.ovirt.engine.ui.common.restapi.RestApiSessionAcquiredEvent; import org.ovirt.engine.ui.webadmin.plugin.PluginManager.PluginInvocationCondition; import org.ovirt.engine.ui.webadmin.plugin.entity.EntityObject; import org.ovirt.engine.ui.webadmin.plugin.entity.SystemTreeItemObject; import org.ovirt.engine.ui.webadmin.plugin.jsni.JsArrayHelper; -import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionAcquiredEvent; -import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionAcquiredEvent.RestApiSessionAcquiredHandler; +import org.ovirt.engine.ui.common.restapi.RestApiSessionAcquiredEvent.RestApiSessionAcquiredHandler; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent.ClusterSelectionChangeHandler; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.DataCenterSelectionChangeEvent; diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java index 0a94fdc..ab588f8 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/system/ApplicationInit.java @@ -1,19 +1,12 @@ package org.ovirt.engine.ui.webadmin.system; import org.ovirt.engine.core.common.mode.ApplicationMode; -import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; -import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryType; -import org.ovirt.engine.ui.common.auth.AutoLoginData; import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.system.BaseApplicationInit; import org.ovirt.engine.ui.common.system.LockInteractionManager; import org.ovirt.engine.ui.common.uicommon.FrontendEventsHandlerImpl; import org.ovirt.engine.ui.common.uicommon.FrontendFailureEventListener; -import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; -import org.ovirt.engine.ui.frontend.FrontendLoginHandler; -import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.ITypeResolver; import org.ovirt.engine.ui.uicommonweb.ReportInit; import org.ovirt.engine.ui.uicommonweb.auth.CurrentUserRole; @@ -24,12 +17,9 @@ import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.webadmin.ApplicationDynamicMessages; -import org.ovirt.engine.ui.webadmin.plugin.restapi.EngineSessionTimeoutData; -import org.ovirt.engine.ui.webadmin.plugin.restapi.RestApiSessionManager; +import org.ovirt.engine.ui.common.restapi.RestApiSessionManager; import org.ovirt.engine.ui.webadmin.uimode.UiModeData; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.Window; import com.google.inject.Inject; @@ -39,7 +29,6 @@ public class ApplicationInit extends BaseApplicationInit<LoginModel> { private final PlaceManager placeManager; - private final RestApiSessionManager restApiSessionManager; private final ApplicationDynamicMessages dynamicMessages; @Inject @@ -57,11 +46,9 @@ CurrentUserRole currentUserRole, Provider<CommonModel> commonModelProvider) { super(typeResolver, frontendEventsHandler, frontendFailureEventListener, user, eventBus, loginModelProvider, lockInteractionManager, frontend, currentUserRole, - commonModelProvider); + commonModelProvider, restApiSessionManager); this.placeManager = placeManager; - this.restApiSessionManager = restApiSessionManager; this.dynamicMessages = dynamicMessages; - } @Override @@ -73,12 +60,6 @@ UiModeData uiModeData = UiModeData.instance(); if (uiModeData != null) { handleUiMode(uiModeData); - } - - // Check for Engine user session timeout configuration - EngineSessionTimeoutData engineSessionTimeoutData = EngineSessionTimeoutData.instance(); - if (engineSessionTimeoutData != null) { - restApiSessionManager.setSessionTimeout(engineSessionTimeoutData.getValue()); } // Initiate transition to requested application place @@ -115,46 +96,6 @@ super.initFrontend(); ReportInit.getInstance().initHandlers(eventBus); - - // Configure REST API integration for UI plugin infrastructure - frontend.setLoginHandler(new FrontendLoginHandler() { - @Override - public void onLoginSuccess() { - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - frontend.runQuery(VdcQueryType.GetEngineSessionIdToken, - new VdcQueryParametersBase(), - new AsyncQuery(new INewAsyncCallback() { - @Override - public void onSuccess(Object model, Object returnValue) { - String engineAuthToken = (String) ((VdcQueryReturnValue) returnValue).getReturnValue(); - restApiSessionManager.acquireSession(engineAuthToken); - } - }) - ); - } - }); - } - - @Override - public void onLogout() { - restApiSessionManager.releaseSession(); - } - }); - } - - @Override - protected void handleAutoLogin(AutoLoginData autoLoginData) { - super.handleAutoLogin(autoLoginData); - - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - // Assume the REST API session has been acquired and is still active - restApiSessionManager.reuseSession(); - } - }); } void handleUiMode(UiModeData uiModeData) { -- To view, visit https://gerrit.ovirt.org/38986 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0e0cc2a2fd462bd8dc9085b300ec12fe46ff4518 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Betak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
