diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebException.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebException.java index 5a8fb394c3..94b1bcd53f 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebException.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebException.java @@ -39,6 +39,9 @@ import java.util.Map; public class DBWebException extends DBException implements GraphQLError { public static final String ERROR_CODE_SESSION_EXPIRED = "sessionExpired"; + public static final String ERROR_CODE_ACCESS_DENIED = "accessDenied"; + public static final String ERROR_CODE_IDENT_REQUIRED = "identRequired"; + public static final String ERROR_CODE_AUTH_REQUIRED = "authRequired"; private List path; private List locations; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebExceptionAccessDenied.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebExceptionAccessDenied.java index b7d62705c0..a8b735bde8 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebExceptionAccessDenied.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/DBWebExceptionAccessDenied.java @@ -21,8 +21,6 @@ package io.cloudbeaver; */ public class DBWebExceptionAccessDenied extends DBWebException { - public static final String ERROR_CODE_ACCESS_DENIED = "accessDenied"; - public DBWebExceptionAccessDenied(String message) { super(message, ERROR_CODE_ACCESS_DENIED); } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java index 3c47a6efe8..c2cfe83221 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java @@ -30,6 +30,7 @@ import org.eclipse.core.runtime.Status; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.access.DBASession; import org.jkiss.dbeaver.model.app.DBPProject; import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.meta.Association; @@ -53,7 +54,7 @@ import java.util.function.Function; * Web session. * Is the main source of data in web application */ -public class WebSession { +public class WebSession implements DBASession { private static final Log log = Log.getLog(WebSession.class); @@ -104,10 +105,15 @@ public class WebSession { } @Property - public String getId() { + public String getSessionId() { return id; } + @Override + public boolean isApplicationSession() { + return false; + } + @Property public String getCreateTime() { return CBConstants.ISO_DATE_FORMAT.format(createTime); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSessionManager.java index d85e257e3e..05592f2dad 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSessionManager.java @@ -95,7 +95,7 @@ public class WebSessionManager { } } - log.debug("> New web session '" + webSession.getId() + "'"); + log.debug("> New web session '" + webSession.getSessionId() + "'"); } else { if (updateInfo) { // Update only once per request @@ -132,7 +132,7 @@ public class WebSessionManager { } for (WebSession session : expiredList) { - log.debug("> Expire session '" + session.getId() + "'"); + log.debug("> Expire session '" + session.getSessionId() + "'"); session.close(); } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java index ea4c09a24d..bb11f93704 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java @@ -18,6 +18,10 @@ package io.cloudbeaver.server; import io.cloudbeaver.auth.provider.local.LocalAuthProvider; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + /** * Application configuration */ @@ -33,6 +37,7 @@ public class CBAppConfig { private String[] enabledDrivers = new String[0]; private String[] disabledDrivers = new String[0]; private String defaultAuthProvider = LocalAuthProvider.PROVIDER_ID; + private Map plugins = new LinkedHashMap<>(); public boolean isAuthenticationEnabled() { return authenticationEnabled; @@ -77,4 +82,18 @@ public class CBAppConfig { public String getDefaultAuthProvider() { return defaultAuthProvider; } + + public Map getPluginConfig(String pluginId) { + Object config = plugins.get(pluginId); + if (config instanceof Map) { + return (Map) config; + } else { + return Collections.emptyMap(); + } + } + + public T getPluginOption(String pluginId, String option) { + return (T)getPluginConfig(pluginId).get(option); + } + } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java index 329378a003..b74b6cb7ee 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBSecurityController.java @@ -465,7 +465,7 @@ class CBSecurityController implements DBWSecurityController { try (Connection dbCon = database.openConnection()) { try (PreparedStatement dbStat = dbCon.prepareStatement( "INSERT INTO CB_SESSION(SESSION_ID,USER_ID,CREATE_TIME,LAST_ACCESS_TIME,LAST_ACCESS_REMOTE_ADDRESS,LAST_ACCESS_USER_AGENT) VALUES(?,?,?,?,?,?)")) { - dbStat.setString(1, session.getId()); + dbStat.setString(1, session.getSessionId()); WebUser user = session.getUser(); if (user == null) { dbStat.setNull(2, Types.VARCHAR); @@ -515,7 +515,7 @@ class CBSecurityController implements DBWSecurityController { dbStat.setNull(4, Types.VARCHAR); } - dbStat.setString(5, session.getId()); + dbStat.setString(5, session.getSessionId()); if (dbStat.executeUpdate() == 0) { throw new DBCException("Session not exists in database"); } diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java index ac90b8d9b2..93499f3adb 100644 --- a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java +++ b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/impl/WebServiceDataTransfer.java @@ -17,13 +17,12 @@ package io.cloudbeaver.service.data.transfer.impl; import io.cloudbeaver.DBWebException; -import io.cloudbeaver.server.CBPlatform; import io.cloudbeaver.model.WebAsyncTaskInfo; import io.cloudbeaver.model.session.WebSession; +import io.cloudbeaver.server.CBPlatform; +import io.cloudbeaver.service.data.transfer.DBWServiceDataTransfer; import io.cloudbeaver.service.sql.WebSQLContextInfo; import io.cloudbeaver.service.sql.WebSQLProcessor; -import io.cloudbeaver.service.data.transfer.DBWServiceDataTransfer; -import io.cloudbeaver.service.sql.WebSQLQueryDataContainer; import io.cloudbeaver.service.sql.WebSQLResultsInfo; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.DBException; @@ -102,7 +101,7 @@ public class WebServiceDataTransfer implements DBWServiceDataTransfer { @NotNull private String makeUniqueFileName(WebSQLProcessor sqlProcessor, DataTransferProcessorDescriptor processor) { - return sqlProcessor.getWebSession().getId() + "_" + UUID.randomUUID() + "." + WebDataTransferUtils.getProcessorFileExtension(processor); + return sqlProcessor.getWebSession().getSessionId() + "_" + UUID.randomUUID() + "." + WebDataTransferUtils.getProcessorFileExtension(processor); } @Override