From c301687eeb422690cb5a3fb0085eb7d99197a6b4 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Wed, 9 Sep 2020 20:19:44 +0300 Subject: [PATCH] CB-253 Grant anonymous access to predefined connections --- .../io/cloudbeaver/server/CBApplication.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java index 0f92aa77df..55af1ba502 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java @@ -20,7 +20,9 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; import com.google.gson.stream.JsonWriter; +import io.cloudbeaver.DBWConnectionGrant; import io.cloudbeaver.DBWSecurityController; +import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.server.jetty.CBJettyServer; import org.eclipse.core.runtime.Platform; import org.eclipse.equinox.app.IApplicationContext; @@ -29,6 +31,7 @@ import org.jkiss.code.NotNull; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ModelPreferences; +import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.app.DBPApplication; import org.jkiss.dbeaver.model.data.json.JSONUtils; import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings; @@ -38,6 +41,7 @@ import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.dbeaver.utils.PrefUtils; import org.jkiss.dbeaver.utils.SystemVariablesResolver; +import org.jkiss.utils.ArrayUtils; import org.jkiss.utils.CommonUtils; import org.jkiss.utils.StandardConstants; @@ -407,6 +411,11 @@ public class CBApplication extends BaseApplicationImpl { log.debug("Saving runtime configuration"); saveRuntimeConfig(newServerName, appConfig); + // Grant permissions to predefined connections + if (appConfig.isAnonymousAccessEnabled()) { + grantAnonymousAccessToConnections(appConfig, adminName); + } + // Re-load runtime configuration try { log.debug("Reloading application configuration"); @@ -422,6 +431,24 @@ public class CBApplication extends BaseApplicationImpl { configurationMode = CommonUtils.isEmpty(serverName); } + private void grantAnonymousAccessToConnections(CBAppConfig appConfig, String adminName) { + try { + String anonymousRoleId = appConfig.getAnonymousUserRole(); + DBWSecurityController securityController = getSecurityController(); + for (DBPDataSourceContainer ds : WebServiceUtils.getDataSourceRegistry().getDataSources()) { + DBWConnectionGrant[] grants = securityController.getConnectionSubjectAccess(ds.getId()); + if (ArrayUtils.isEmpty(grants)) { + securityController.setConnectionSubjectAccess( + ds.getId(), + new String[] { anonymousRoleId }, + adminName); + } + } + } catch (Exception e) { + log.error("Error granting anonymous access to connections", e); + } + } + private void saveRuntimeConfig(String newServerName, CBAppConfig appConfig) throws DBException { File runtimeConfigFile = getRuntimeConfigFile();