CB-4917 remove applications from configuration controller and fix deserialization (#2531)

This commit is contained in:
Ainur
2024-04-08 09:18:54 +00:00
committed by GitHub
parent d34d59ee6c
commit fd82b24e5f
5 changed files with 38 additions and 36 deletions
@@ -26,7 +26,6 @@ import io.cloudbeaver.registry.WebServiceRegistry;
import io.cloudbeaver.server.jetty.CBJettyServer;
import io.cloudbeaver.service.DBWServiceInitializer;
import io.cloudbeaver.service.DBWServiceServerConfigurator;
import io.cloudbeaver.service.security.CBEmbeddedSecurityController;
import io.cloudbeaver.service.security.SMControllerConfiguration;
import io.cloudbeaver.service.session.WebSessionManager;
import io.cloudbeaver.utils.WebDataSourceUtils;
@@ -95,7 +94,8 @@ public abstract class CBApplication<T extends CBServerConfig> extends BaseWebApp
public static CBApplication getInstance() {
return (CBApplication) BaseApplicationImpl.getInstance();
}
private File homeDirectory;
private final File homeDirectory;
// Persistence
protected SMAdminController securityController;
@@ -109,6 +109,7 @@ public abstract class CBApplication<T extends CBServerConfig> extends BaseWebApp
private WebSessionManager sessionManager;
public CBApplication() {
this.homeDirectory = new File(initHomeFolder());
}
public String getServerURL() {
@@ -185,7 +186,7 @@ public abstract class CBApplication<T extends CBServerConfig> extends BaseWebApp
}
public SMControllerConfiguration getSecurityManagerConfiguration() {
return getServerConfigurationController().getSecurityManagerConfiguration();
return getServerConfiguration().getSecurityManagerConfiguration();
}
public SMAdminController getSecurityController() {
@@ -195,7 +196,6 @@ public abstract class CBApplication<T extends CBServerConfig> extends BaseWebApp
@Override
protected void startServer() {
CBPlatform.setApplication(this);
initHomeFolder();
try {
if (!loadServerConfiguration()) {
return;
@@ -466,14 +466,9 @@ public abstract class CBApplication<T extends CBServerConfig> extends BaseWebApp
if (CommonUtils.isEmpty(homeFolder)) {
homeFolder = ".";
}
homeDirectory = new File(homeFolder);
return homeFolder;
}
protected void validateConfiguration(Map<String, Object> appConfig) throws DBException {
}
private void runWebServer() {
log.debug(
String.format("Starting Jetty server (%d on %s) ",
@@ -42,34 +42,35 @@ public class CBApplicationCE extends CBApplication<CBServerConfig> {
private final CBServerConfigurationControllerEmbedded<CBServerConfig> serverConfigController;
public CBApplicationCE() {
serverConfigController = new CBServerConfigurationControllerEmbedded<>(new CBServerConfig());
super();
this.serverConfigController = new CBServerConfigurationControllerEmbedded<>(new CBServerConfig(), getHomeDirectory());
}
@Override
public SMController createSecurityController(@NotNull SMCredentialsProvider credentialsProvider) throws DBException {
return new EmbeddedSecurityControllerFactory().createSecurityService(
return new EmbeddedSecurityControllerFactory<>().createSecurityService(
this,
getServerConfiguration().getDatabaseConfiguration(),
credentialsProvider,
getServerConfigurationController().getSecurityManagerConfiguration()
getServerConfiguration().getSecurityManagerConfiguration()
);
}
@Override
public SMAdminController getAdminSecurityController(@NotNull SMCredentialsProvider credentialsProvider) throws DBException {
return new EmbeddedSecurityControllerFactory().createSecurityService(
return new EmbeddedSecurityControllerFactory<>().createSecurityService(
this,
getServerConfiguration().getDatabaseConfiguration(),
credentialsProvider,
getServerConfigurationController().getSecurityManagerConfiguration()
getServerConfiguration().getSecurityManagerConfiguration()
);
}
protected SMAdminController createGlobalSecurityController() throws DBException {
return new EmbeddedSecurityControllerFactory().createSecurityService(
return new EmbeddedSecurityControllerFactory<>().createSecurityService(
this,
getServerConfiguration().getDatabaseConfiguration(),
new NoAuthCredentialsProvider(),
getServerConfigurationController().getSecurityManagerConfiguration()
getServerConfiguration().getSecurityManagerConfiguration()
);
}
@@ -94,8 +95,8 @@ public class CBApplicationCE extends CBApplication<CBServerConfig> {
protected void shutdown() {
try {
if (securityController instanceof CBEmbeddedSecurityController) {
((CBEmbeddedSecurityController) securityController).shutdown();
if (securityController instanceof CBEmbeddedSecurityController<?> embeddedSecurityController) {
embeddedSecurityController.shutdown();
}
} catch (Exception e) {
log.error(e);
@@ -108,8 +109,8 @@ public class CBApplicationCE extends CBApplication<CBServerConfig> {
@Nullable String adminPassword,
@NotNull List<AuthInfo> authInfoList
) throws DBException {
if (securityController instanceof CBEmbeddedSecurityController) {
((CBEmbeddedSecurityController) securityController).finishConfiguration(adminName, adminPassword, authInfoList);
if (securityController instanceof CBEmbeddedSecurityController<?> embeddedSecurityController) {
embeddedSecurityController.finishConfiguration(adminName, adminPassword, authInfoList);
}
}
@@ -19,6 +19,7 @@ package io.cloudbeaver.server;
import com.google.gson.annotations.SerializedName;
import io.cloudbeaver.auth.CBAuthConstants;
import io.cloudbeaver.model.app.WebServerConfiguration;
import io.cloudbeaver.service.security.SMControllerConfiguration;
import io.cloudbeaver.service.security.db.WebDatabaseConfig;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
@@ -50,6 +51,8 @@ public class CBServerConfig implements WebServerConfiguration {
private boolean enableSecurityManager = false;
private final Map<String, Object> productSettings = new HashMap<>();
@SerializedName("sm")
protected final SMControllerConfiguration securityManagerConfiguration = new SMControllerConfiguration();
@SerializedName("database")
private WebDatabaseConfig databaseConfiguration = new WebDatabaseConfig();
private String staticContent = "";
@@ -191,4 +194,8 @@ public class CBServerConfig implements WebServerConfiguration {
public Map<String, Object> getProductSettings() {
return productSettings;
}
public SMControllerConfiguration getSecurityManagerConfiguration() {
return securityManagerConfiguration;
}
}
@@ -56,14 +56,17 @@ public abstract class CBServerConfigurationController<T extends CBServerConfig>
private static final Log log = Log.getLog(CBServerConfigurationController.class);
// Configurations
protected final SMControllerConfiguration securityManagerConfiguration = new SMControllerConfiguration();
@NotNull
private final T serverConfiguration;
private final CBAppConfig appConfiguration = new CBAppConfig();
private Map<String, String> externalProperties = new LinkedHashMap<>();
private Map<String, Object> originalConfigurationProperties = new LinkedHashMap<>();
@NotNull
protected final Path homeDirectory;
private final Map<String, String> externalProperties = new LinkedHashMap<>();
private final Map<String, Object> originalConfigurationProperties = new LinkedHashMap<>();
protected CBServerConfigurationController(T serverConfiguration) {
protected CBServerConfigurationController(@NotNull T serverConfiguration, @NotNull Path homeDirectory) {
this.serverConfiguration = serverConfiguration;
this.homeDirectory = homeDirectory;
}
public String getAuthServiceURL() {
@@ -159,7 +162,7 @@ public abstract class CBServerConfigurationController<T extends CBServerConfig>
}
config.setServerURL("http://" + hostName + ":" + config.getServerPort());
}
var homeDirectory = CBApplication.getInstance().getHomeDirectory().toString();
config.setContentRoot(WebAppUtils.getRelativePath(config.getContentRoot(), homeDirectory));
config.setRootURI(readRootUri(config.getRootURI()));
config.setDriversLocation(WebAppUtils.getRelativePath(config.getDriversLocation(), homeDirectory));
@@ -223,7 +226,7 @@ public abstract class CBServerConfigurationController<T extends CBServerConfig>
CBConstants.PARAM_PRODUCT_CONFIGURATION,
CBConstants.DEFAULT_PRODUCT_CONFIGURATION
),
CBApplication.getInstance().getHomeDirectory().toString()
homeDirectory
);
if (!CommonUtils.isEmpty(productConfigPath)) {
File productConfigFile = new File(productConfigPath);
@@ -300,6 +303,7 @@ public abstract class CBServerConfigurationController<T extends CBServerConfig>
// Stupid way to populate existing objects but ok google (https://github.com/google/gson/issues/431)
InstanceCreator<CBAppConfig> appConfigCreator = type -> appConfiguration;
InstanceCreator<DataSourceNavigatorSettings> navSettingsCreator = type -> (DataSourceNavigatorSettings) appConfiguration.getDefaultNavigatorSettings();
var securityManagerConfiguration = getServerConfiguration().getSecurityManagerConfiguration();
InstanceCreator<SMControllerConfiguration> smConfigCreator = type -> securityManagerConfiguration;
InstanceCreator<T> serverConfigCreator = type -> serverConfiguration;
InstanceCreator<PasswordPolicyConfiguration> smPasswordPoliceConfigCreator =
@@ -602,10 +606,6 @@ public abstract class CBServerConfigurationController<T extends CBServerConfig>
return getServerConfiguration().getProductSettings();
}
public SMControllerConfiguration getSecurityManagerConfiguration() {
return securityManagerConfiguration;
}
private String readRootUri(String uri) {
//slashes are needed to correctly display static resources on ui
if (!uri.endsWith("/")) {
@@ -25,6 +25,7 @@ import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.utils.CommonUtils;
import java.nio.file.Path;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -35,8 +36,8 @@ public class CBServerConfigurationControllerEmbedded<T extends CBServerConfig> e
private static final Log log = Log.getLog(CBServerConfigurationControllerEmbedded.class);
public CBServerConfigurationControllerEmbedded(T serverConfig) {
super(serverConfig);
public CBServerConfigurationControllerEmbedded(@NotNull T serverConfig, @NotNull Path homeDirectory) {
super(serverConfig, homeDirectory);
}
@NotNull
@@ -79,7 +80,7 @@ public class CBServerConfigurationControllerEmbedded<T extends CBServerConfig> e
);
Gson gson = getGson();
Map<String, Object> passwordPolicyConfig = gson.fromJson(
gson.toJsonTree(securityManagerConfiguration.getPasswordPolicyConfiguration()),
gson.toJsonTree(getServerConfiguration().getSecurityManagerConfiguration().getPasswordPolicyConfiguration()),
JSONUtils.MAP_TYPE_TOKEN
);
if (!CommonUtils.isEmpty(passwordPolicyConfig)) {
@@ -98,10 +99,8 @@ public class CBServerConfigurationControllerEmbedded<T extends CBServerConfig> e
GsonBuilder gsonBuilder = super.getGsonBuilder();
var databaseConfiguration = getServerConfiguration().getDatabaseConfiguration();
InstanceCreator<WebDatabaseConfig> dbConfigCreator = type -> databaseConfiguration;
InstanceCreator<WebDatabaseConfig.Pool> dbPoolConfigCreator = type -> databaseConfiguration.getPool();
return gsonBuilder
.registerTypeAdapter(WebDatabaseConfig.class, dbConfigCreator)
.registerTypeAdapter(WebDatabaseConfig.Pool.class, dbPoolConfigCreator);
.registerTypeAdapter(WebDatabaseConfig.class, dbConfigCreator);
}