mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-4917 remove applications from configuration controller and fix deserialization (#2531)
This commit is contained in:
@@ -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) ",
|
||||
|
||||
+12
-11
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-10
@@ -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("/")) {
|
||||
|
||||
+5
-6
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user