From cda74f44fd3601df36d63162f6cf291451063ac2 Mon Sep 17 00:00:00 2001 From: Ainur Iagudin Date: Wed, 17 Aug 2022 10:59:24 +0300 Subject: [PATCH] CB-2268 add session expired exception for sessionState --- .../io/cloudbeaver/service/WebServiceBindingBase.java | 6 +++++- .../service/core/WebServiceBindingCore.java | 2 +- .../service/session/WebSessionManager.java | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java index ff27dd0077..095ad4b3aa 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java @@ -27,7 +27,6 @@ import io.cloudbeaver.server.CBApplication; import io.cloudbeaver.server.CBPlatform; import io.cloudbeaver.server.graphql.GraphQLEndpoint; import org.jkiss.code.NotNull; -import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.rm.RMProject; @@ -126,6 +125,11 @@ public abstract class WebServiceBindingBase impleme getServletRequest(env)); } + public static WebSession findWebSession(DataFetchingEnvironment env, boolean errorOnNotFound) throws DBWebException { + return CBPlatform.getInstance().getSessionManager().findWebSession( + getServletRequest(env), errorOnNotFound); + } + @NotNull public static WebConnectionInfo getWebConnection(WebSession session, String projectId, String connectionId) throws DBWebException { return session.getWebConnectionInfo(projectId, connectionId); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java index a4ea024473..833c08e928 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java @@ -67,7 +67,7 @@ public class WebServiceBindingCore extends WebServiceBindingBase getWebSession(env), getProjectReference(env), env.getArgument("path"))) .dataFetcher("sessionPermissions", env -> getService(env).getSessionPermissions(getWebSession(env))) - .dataFetcher("sessionState", env -> getService(env).getSessionState(findWebSession(env))) + .dataFetcher("sessionState", env -> getService(env).getSessionState(findWebSession(env, true))) .dataFetcher("connectionInfo", env -> getService(env).getConnectionState( getWebSession(env), getProjectReference(env), env.getArgument("id"))) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java index 66d45b87b5..0991189fa2 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/session/WebSessionManager.java @@ -149,6 +149,17 @@ public class WebSessionManager { } } + public WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException { + WebSession webSession = findWebSession(request); + if (webSession != null) { + return webSession; + } + if (errorOnNoFound) { + throw new DBWebException("Session has expired", DBWebException.ERROR_CODE_SESSION_EXPIRED); + } + return null; + } + public void expireIdleSessions() { long maxSessionIdleTime = DBWorkbench.getPlatform(CBPlatform.class).getApplication().getMaxSessionIdleTime(); if (CBApplication.getInstance().isConfigurationMode()) {