Remove deprecated EnvironmentDependentProviderFactory.isSupported method

Closes #26280

Signed-off-by: Pedro Ruivo <pruivo@redhat.com>
This commit is contained in:
Pedro Ruivo 2024-04-16 14:30:03 +01:00 committed by Alexander Schwartz
parent f6071f680a
commit 3e0a185070
51 changed files with 78 additions and 88 deletions

View file

@ -126,7 +126,7 @@ public class Argon2PasswordHashProviderFactory implements PasswordHashProviderFa
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return !Profile.isFeatureEnabled(Profile.Feature.FIPS);
}

View file

@ -119,6 +119,12 @@ By default, the syslog handler is disabled, but when enabled, it sends all log e
For more information, see the https://www.keycloak.org/server/logging[Configuring logging] guide.
= Change to class `EnvironmentDependentProviderFactory`
The method `EnvironmentDependentProviderFactory.isSupported()` was deprecated for several releases and has now been removed.
For more details, see the link:{upgradingguide_link}[{upgradingguide_name}].
= All `cache` options are runtime
It is now possible to specify the `cache`, `cache-stack`, and `cache-config-file` options during runtime.

View file

@ -248,6 +248,12 @@ The escape char is the tilde character `~`. The previous example results in the
The escaping is currently disabled by default because it represents a change in behavior. Nevertheless enabling escaping is recommended and it can be the default in future versions.
= Change to class `EnvironmentDependentProviderFactory`
The method `EnvironmentDependentProviderFactory.isSupported()` was deprecated for several releases and has now been removed.
Instead, implement `isSupported(Config.Scope config)`.
= Removal of the deprecated LinkedIn provider
In version 22.0.2 the OAuh 2.0 social provider for LinkedIn was replaced by a new OpenId Connect implementation. The legacy provider was deprecated but not removed, just in case it was still functional in some existing realms. {project_name} 25.0.0 is definitely removing the old provider and its associated `linkedin-oauth` feature. From now on, the default `LinkedIn` social provider is the only option available.

View file

@ -63,7 +63,7 @@ public class KerberosFederationProviderFactory implements UserStorageProviderFac
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.KERBEROS);
}

View file

@ -94,7 +94,7 @@ public class SSSDFederationProviderFactory implements UserStorageProviderFactory
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return AvailabilityChecker.isAvailable();
}
}

View file

@ -72,7 +72,7 @@ public class InfinispanMultiSiteLoadBalancerCheckProviderFactory implements Load
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.MULTI_SITE);
}
}

View file

@ -359,7 +359,7 @@ public final class DefaultHostnameProvider implements HostnameProvider, Hostname
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Feature.HOSTNAME_V1);
}
}

View file

@ -31,11 +31,6 @@ public class FilesKeystoreVaultProviderFactory extends org.keycloak.vault.FilesK
return ID;
}
@Override
public boolean isSupported() {
return false;
}
@Override
public boolean isSupported(Config.Scope config) {
return getId().equals(Configuration.getRawValue("kc.vault"));

View file

@ -31,11 +31,6 @@ public class FilesPlainTextVaultProviderFactory extends org.keycloak.vault.Files
return ID;
}
@Override
public boolean isSupported() {
return false;
}
@Override
public boolean isSupported(Config.Scope config) {
return getId().equals(Configuration.getRawValue("kc.vault"));

View file

@ -34,7 +34,7 @@ public final class AdminExtProvider implements AdminRealmResourceProviderFactory
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.ADMIN2);
}
}

View file

@ -93,7 +93,7 @@ public class RecoveryCodesWarningThresholdPasswordPolicyProviderFactory implemen
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.RECOVERY_CODES);
}
}

View file

@ -28,22 +28,10 @@ import org.keycloak.Config;
public interface EnvironmentDependentProviderFactory {
/**
* @return <code>true</code> if the provider is supported and should be available, <code>false</code> otherwise
* @deprecated Prefer overriding/using the {@link #isSupported(Config.Scope)} method.
*/
@Deprecated
default boolean isSupported() {
return false;
}
/**
* An alternative to {@link #isSupported()} method to check if the provider is supported based on the
* provider configuration.
* Check if the provider is supported and should be available based on the provider configuration.
*
* @param config the provider configuration
* @return {@code true} if the provider is supported. Otherwise, {@code false}.
*/
default boolean isSupported(Config.Scope config) {
return isSupported();
}
boolean isSupported(Config.Scope config);
}

View file

@ -17,6 +17,7 @@
package org.keycloak.services.clientpolicy.condition;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.provider.ConfiguredProvider;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
@ -28,7 +29,7 @@ import org.keycloak.provider.ProviderFactory;
public interface ClientPolicyConditionProviderFactory extends ProviderFactory<ClientPolicyConditionProvider>, ConfiguredProvider, EnvironmentDependentProviderFactory {
@Override
default boolean isSupported() {
default boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CLIENT_POLICIES);
}
}

View file

@ -17,6 +17,7 @@
package org.keycloak.services.clientpolicy.executor;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.provider.ConfiguredProvider;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
@ -28,7 +29,7 @@ import org.keycloak.provider.ProviderFactory;
public interface ClientPolicyExecutorProviderFactory extends ProviderFactory<ClientPolicyExecutorProvider>, ConfiguredProvider, EnvironmentDependentProviderFactory {
@Override
default boolean isSupported() {
default boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CLIENT_POLICIES);
}
}

View file

@ -23,15 +23,12 @@ import java.util.Map;
import org.keycloak.Config;
import org.keycloak.authentication.AuthenticationFlowContext;
import org.keycloak.authentication.Authenticator;
import org.keycloak.common.Profile;
import org.keycloak.deployment.DeployedConfigurationsManager;
import org.keycloak.models.AuthenticatorConfigModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.models.utils.PostMigrationEvent;
import org.keycloak.provider.ProviderConfigProperty;
import org.keycloak.provider.ProviderEvent;
import org.keycloak.representations.provider.ScriptProviderMetadata;
/**
@ -82,11 +79,6 @@ public final class DeployedScriptAuthenticatorFactory extends ScriptBasedAuthent
return model.getAlias();
}
@Override
public boolean isSupported() {
return Profile.isFeatureEnabled(Profile.Feature.SCRIPTS);
}
@Override
public void init(Config.Scope config) {
model = createModel(metadata);

View file

@ -76,7 +76,7 @@ public class RecoveryAuthnCodesFormAuthenticatorFactory implements Authenticator
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.RECOVERY_CODES);
}
}

View file

@ -141,7 +141,7 @@ public class ScriptBasedAuthenticatorFactory implements AuthenticatorFactory, En
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.SCRIPTS);
}
}

View file

@ -95,7 +95,7 @@ public class WebAuthnAuthenticatorFactory implements AuthenticatorFactory, Envir
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.WEB_AUTHN);
}
}

View file

@ -109,7 +109,7 @@ public class ConditionalLoaAuthenticatorFactory implements ConditionalAuthentica
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.STEP_UP_AUTHENTICATION);
}
}

View file

@ -120,7 +120,7 @@ public class RecoveryAuthnCodesAction implements RequiredActionProvider, Require
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.RECOVERY_CODES);
}
}

View file

@ -200,7 +200,7 @@ public class UpdateEmail implements RequiredActionProvider, RequiredActionFactor
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.UPDATE_EMAIL);
}
}

View file

@ -17,6 +17,7 @@
package org.keycloak.authentication.requiredactions;
import com.webauthn4j.validator.attestation.trustworthiness.certpath.CertPathTrustworthinessValidator;
import org.keycloak.Config;
import org.keycloak.Config.Scope;
import org.keycloak.authentication.RequiredActionFactory;
import org.keycloak.authentication.RequiredActionProvider;
@ -81,7 +82,7 @@ public class WebAuthnRegisterFactory implements RequiredActionFactory, Environme
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.WEB_AUTHN);
}
}

View file

@ -4,7 +4,6 @@ import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.models.KeycloakSession;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
import org.keycloak.userprofile.DeclarativeUserProfileProvider;
public class RecoveryAuthnCodesCredentialProviderFactory
implements CredentialProviderFactory<RecoveryAuthnCodesCredentialProvider>, EnvironmentDependentProviderFactory {
@ -22,7 +21,7 @@ public class RecoveryAuthnCodesCredentialProviderFactory
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.RECOVERY_CODES);
}
}

View file

@ -17,6 +17,7 @@
package org.keycloak.credential;
import com.webauthn4j.converter.util.ObjectConverter;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.models.KeycloakSession;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
@ -49,7 +50,7 @@ public class WebAuthnCredentialProviderFactory implements CredentialProviderFact
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.WEB_AUTHN);
}
}

View file

@ -19,6 +19,7 @@
package org.keycloak.credential;
import com.webauthn4j.converter.util.ObjectConverter;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.models.KeycloakSession;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
@ -54,7 +55,7 @@ public class WebAuthnPasswordlessCredentialProviderFactory implements Credential
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.WEB_AUTHN);
}
}

View file

@ -1,5 +1,6 @@
package org.keycloak.protocol.docker;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.events.EventBuilder;
import org.keycloak.models.ClientModel;
@ -70,7 +71,7 @@ public class DockerAuthV2ProtocolFactory extends AbstractLoginProtocolFactory im
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.DOCKER);
}

View file

@ -77,11 +77,6 @@ public interface VCSigningServiceProviderFactory extends ComponentFactory<Verifi
return Profile.isFeatureEnabled(Profile.Feature.OID4VC_VCI);
}
@Override
default boolean isSupported() {
return Profile.isFeatureEnabled(Profile.Feature.OID4VC_VCI);
}
/**
* Should validate potential implementation specific configuration of the factory.
*/

View file

@ -43,7 +43,7 @@ public class TokenExchangeGrantTypeFactory implements OAuth2GrantTypeFactory, En
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.TOKEN_EXCHANGE);
}

View file

@ -45,7 +45,7 @@ public class CibaGrantTypeFactory implements OAuth2GrantTypeFactory, Environment
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CIBA);
}

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.protocol.oidc.grants.ciba.channel;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
import org.keycloak.provider.ProviderFactory;
@ -27,7 +28,7 @@ public interface AuthenticationChannelProviderFactory extends ProviderFactory<Au
EnvironmentDependentProviderFactory {
@Override
default boolean isSupported() {
default boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CIBA);
}
}

View file

@ -19,6 +19,7 @@ package org.keycloak.protocol.oidc.grants.ciba.endpoints;
import jakarta.ws.rs.Path;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.events.EventBuilder;
import org.keycloak.models.KeycloakSession;
@ -86,7 +87,7 @@ public class CibaRootEndpoint implements OIDCExtProvider, OIDCExtProviderFactory
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CIBA);
}

View file

@ -16,6 +16,7 @@
*/
package org.keycloak.protocol.oidc.grants.ciba.resolvers;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
import org.keycloak.provider.ProviderFactory;
@ -27,7 +28,7 @@ public interface CIBALoginUserResolverFactory extends ProviderFactory<CIBALoginU
EnvironmentDependentProviderFactory {
@Override
default boolean isSupported() {
default boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CIBA);
}
}

View file

@ -45,7 +45,7 @@ public class DeviceGrantTypeFactory implements OAuth2GrantTypeFactory, Environme
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.DEVICE_FLOW);
}

View file

@ -64,7 +64,7 @@ public class DeviceEndpointFactory implements RealmResourceProviderFactory, Envi
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.DEVICE_FLOW);
}
}

View file

@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.authentication.authenticators.util.LoAUtil;
import org.keycloak.common.Profile;
import org.keycloak.models.AuthenticatedClientSessionModel;
@ -127,7 +128,7 @@ public class AcrProtocolMapper extends AbstractOIDCProtocolMapper implements OID
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.STEP_UP_AUTHENTICATION);
}
}

View file

@ -24,7 +24,6 @@ import org.keycloak.authentication.authenticators.util.AuthenticatorUtils;
import org.keycloak.models.*;
import org.keycloak.protocol.oidc.OIDCLoginProtocol;
import org.keycloak.protocol.oidc.utils.AmrUtils;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
import org.keycloak.provider.ProviderConfigProperty;
import org.keycloak.representations.IDToken;
@ -38,7 +37,7 @@ import java.util.ArrayList;
* This protocol mapper sets the 'amr' claim on the OIDC tokens to the reference values configured on the
* completed authenticators found in the user session notes.
*/
public class AmrProtocolMapper extends AbstractOIDCProtocolMapper implements OIDCAccessTokenMapper, OIDCIDTokenMapper, EnvironmentDependentProviderFactory {
public class AmrProtocolMapper extends AbstractOIDCProtocolMapper implements OIDCAccessTokenMapper, OIDCIDTokenMapper {
private static final Logger logger = Logger.getLogger(AmrProtocolMapper.class);
@ -104,9 +103,4 @@ public class AmrProtocolMapper extends AbstractOIDCProtocolMapper implements OID
logger.debugf("amr %s set in token", refs);
return refs;
}
@Override
public boolean isSupported() {
return true;
}
}

View file

@ -80,7 +80,7 @@ public class DeployedScriptOIDCProtocolMapper extends ScriptBasedOIDCProtocolMap
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.SCRIPTS);
}

View file

@ -18,6 +18,7 @@
package org.keycloak.protocol.oidc.mappers;
import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.models.ClientSessionContext;
import org.keycloak.models.KeycloakSession;
@ -119,7 +120,7 @@ public class ScriptBasedOIDCProtocolMapper extends AbstractOIDCProtocolMapper im
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.SCRIPTS);
}

View file

@ -19,6 +19,7 @@ package org.keycloak.protocol.oidc.par.endpoints;
import jakarta.ws.rs.Path;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.events.EventBuilder;
import org.keycloak.models.KeycloakSession;
@ -58,7 +59,7 @@ public class ParRootEndpoint implements OIDCExtProvider, OIDCExtProviderFactory,
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.PAR);
}

View file

@ -1,6 +1,7 @@
package org.keycloak.protocol.saml.mappers;
import org.jboss.logging.Logger;
import org.keycloak.Config;
import org.keycloak.common.Profile;
import org.keycloak.dom.saml.v2.assertion.AttributeStatementType;
import org.keycloak.dom.saml.v2.assertion.AttributeType;
@ -99,7 +100,7 @@ public class ScriptBasedMapper extends AbstractSAMLProtocolMapper implements SAM
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.SCRIPTS);
}

View file

@ -3,6 +3,8 @@ package org.keycloak.services.clientpolicy.executor;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.keycloak.Config;
import org.keycloak.Config.Scope;
import org.keycloak.common.Profile;
import org.keycloak.common.Profile.Feature;
@ -89,7 +91,7 @@ public class ClientSecretRotationExecutorFactory implements ClientPolicyExecutor
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Feature.CLIENT_SECRET_ROTATION);
}
}

View file

@ -64,7 +64,7 @@ public class RegistrationAccessTokenRotationDisabledExecutorFactory implements C
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return true;
}
}

View file

@ -20,6 +20,7 @@ package org.keycloak.services.clientpolicy.executor;
import java.util.Collections;
import java.util.List;
import org.keycloak.Config;
import org.keycloak.Config.Scope;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
@ -65,7 +66,7 @@ public class SuppressRefreshTokenRotationExecutorFactory implements ClientPolicy
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return true;
}
}

View file

@ -64,7 +64,7 @@ public class UseLightweightAccessTokenExecutorFactory implements ClientPolicyExe
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return true;
}
}

View file

@ -68,7 +68,7 @@ public class DefaultClientTypeManagerFactory implements ClientTypeManagerFactory
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CLIENT_TYPES);
}

View file

@ -97,7 +97,7 @@ public class DefaultClientTypeProviderFactory implements ClientTypeProviderFacto
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.CLIENT_TYPES);
}
}

View file

@ -102,7 +102,7 @@ public class HostnameV2ProviderFactory implements HostnameProviderFactory, Envir
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Profile.isFeatureEnabled(Profile.Feature.HOSTNAME_V2);
}
}

View file

@ -19,6 +19,7 @@
package org.keycloak.testsuite.authentication;
import org.keycloak.Config;
import org.keycloak.models.KeycloakSession;
import org.keycloak.protocol.oidc.grants.ciba.channel.AuthenticationChannelProvider;
import org.keycloak.protocol.oidc.grants.ciba.channel.HttpAuthenticationChannelProvider;
@ -50,7 +51,7 @@ public class TestHttpAuthenticationChannelProviderFactory extends HttpAuthentica
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return true;
}
}

View file

@ -20,6 +20,7 @@ package org.keycloak.testsuite.services.clientpolicy.condition;
import java.util.Collections;
import java.util.List;
import org.keycloak.Config;
import org.keycloak.Config.Scope;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
@ -67,7 +68,7 @@ public class TestRaiseExceptionConditionFactory implements ClientPolicyCondition
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return true;
}
}

View file

@ -20,6 +20,7 @@ package org.keycloak.testsuite.services.clientpolicy.executor;
import java.util.Collections;
import java.util.List;
import org.keycloak.Config;
import org.keycloak.Config.Scope;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
@ -64,7 +65,7 @@ public class TestRaiseExceptionExecutorFactory implements ClientPolicyExecutorPr
}
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return true;
}
}

View file

@ -1,5 +1,6 @@
package org.keycloak.testsuite.theme;
import org.keycloak.Config;
import org.keycloak.platform.Platform;
import org.keycloak.provider.EnvironmentDependentProviderFactory;
import org.keycloak.theme.ClasspathThemeResourceProviderFactory;
@ -16,7 +17,7 @@ public class TestThemeResourceProvider extends ClasspathThemeResourceProviderFac
* @return true if platform is Undertow
*/
@Override
public boolean isSupported() {
public boolean isSupported(Config.Scope config) {
return Platform.getPlatform().name().equals("Undertow");
}
}