diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java index e9cc455679..1b5e98bd13 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/registry/WebAuthProviderDescriptor.java @@ -44,6 +44,7 @@ public class WebAuthProviderDescriptor extends AbstractDescriptor { private final Map configurationParameters = new LinkedHashMap<>(); private final Map 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; + } } diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java index 745ad6a426..5a49811499 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java @@ -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 providerConfig = Collections.emptyMap();