Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel

This commit is contained in:
Wroud
2021-10-22 16:55:55 +03:00
2 changed files with 29 additions and 5 deletions
@@ -44,6 +44,7 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor {
private final Map<String, PropertyDescriptor> configurationParameters = new LinkedHashMap<>();
private final Map<String, WebAuthProviderPropertyDescriptor> credentialParameters = new LinkedHashMap<>();
private final boolean configurable;
private final String[] requiredFeatures;
public WebAuthProviderDescriptor(IConfigurationElement cfg) {
super(cfg);
@@ -72,6 +73,13 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor {
}
}
}
String rfList = cfg.getAttribute("requiredFeatures");
if (!CommonUtils.isEmpty(rfList)) {
requiredFeatures = rfList.split(",");
} else {
requiredFeatures = null;
}
}
@NotNull
@@ -123,4 +131,8 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor {
public String toString() {
return getId();
}
public String[] getRequiredFeatures() {
return requiredFeatures;
}
}
@@ -29,6 +29,7 @@ import io.cloudbeaver.model.user.WebAuthProviderInfo;
import io.cloudbeaver.model.user.WebUser;
import io.cloudbeaver.registry.WebAuthProviderDescriptor;
import io.cloudbeaver.registry.WebServiceRegistry;
import io.cloudbeaver.server.CBAppConfig;
import io.cloudbeaver.server.CBApplication;
import io.cloudbeaver.server.CBPlatform;
import io.cloudbeaver.service.auth.DBWServiceAuth;
@@ -64,13 +65,28 @@ public class WebServiceAuthImpl implements DBWServiceAuth {
if (CommonUtils.isEmpty(providerId)) {
throw new DBWebException("Missing auth provider parameter");
}
WebAuthProviderDescriptor authProvider = WebServiceRegistry.getInstance().getAuthProvider(providerId);
if (authProvider == null) {
throw new DBWebException("Invalid auth provider '" + providerId + "'");
}
boolean configMode = CBApplication.getInstance().isConfigurationMode();
// Check enabled auth providers
boolean providerEnabled = true;
String[] enabledAuthProviders = CBApplication.getInstance().getAppConfiguration().getEnabledAuthProviders();
CBAppConfig appConfiguration = CBApplication.getInstance().getAppConfiguration();
String[] enabledAuthProviders = appConfiguration.getEnabledAuthProviders();
if (enabledAuthProviders != null && !ArrayUtils.contains(enabledAuthProviders, providerId)) {
providerEnabled = false;
} else {
if (!ArrayUtils.isEmpty(authProvider.getRequiredFeatures())) {
for (String rf : authProvider.getRequiredFeatures()) {
if (!appConfiguration.isFeatureEnabled(rf)) {
providerEnabled = false;
break;
}
}
}
}
if (configMode || webSession.hasPermission(DBWConstants.PERMISSION_ADMIN)) {
// 1. Admin can authorize in any providers
@@ -86,10 +102,6 @@ public class WebServiceAuthImpl implements DBWServiceAuth {
}
}
}
WebAuthProviderDescriptor authProvider = WebServiceRegistry.getInstance().getAuthProvider(providerId);
if (authProvider == null) {
throw new DBWebException("Invalid auth provider '" + providerId + "'");
}
try {
Map<String, Object> providerConfig = Collections.emptyMap();