Search in sources :

Example 6 with KeycloakDeploymentInfo

use of org.keycloak.provider.KeycloakDeploymentInfo in project keycloak by keycloak.

the class KeycloakProviderDependencyProcessor method getKeycloakProviderDeploymentInfo.

public static KeycloakDeploymentInfo getKeycloakProviderDeploymentInfo(DeploymentUnit du) {
    KeycloakDeploymentInfo info = KeycloakDeploymentInfo.create();
    info.name(du.getName());
    final ResourceRoot resourceRoot = du.getAttachment(Attachments.DEPLOYMENT_ROOT);
    if (resourceRoot != null) {
        final VirtualFile deploymentRoot = resourceRoot.getRoot();
        if (deploymentRoot != null && deploymentRoot.exists()) {
            if (deploymentRoot.getChild("META-INF/keycloak-themes.json").exists() && deploymentRoot.getChild("theme").exists()) {
                info.themes();
            }
            if (deploymentRoot.getChild("theme-resources").exists()) {
                info.themeResources();
            }
            VirtualFile services = deploymentRoot.getChild("META-INF/services");
            if (services.exists()) {
                try {
                    List<VirtualFile> archives = services.getChildren(new AbstractVirtualFileFilterWithAttributes() {

                        @Override
                        public boolean accepts(VirtualFile file) {
                            return file.getName().startsWith("org.keycloak");
                        }
                    });
                    if (!archives.isEmpty()) {
                        info.services();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    return info;
}
Also used : VirtualFile(org.jboss.vfs.VirtualFile) KeycloakDeploymentInfo(org.keycloak.provider.KeycloakDeploymentInfo) ResourceRoot(org.jboss.as.server.deployment.module.ResourceRoot) AbstractVirtualFileFilterWithAttributes(org.jboss.vfs.util.AbstractVirtualFileFilterWithAttributes) IOException(java.io.IOException)

Example 7 with KeycloakDeploymentInfo

use of org.keycloak.provider.KeycloakDeploymentInfo in project keycloak by keycloak.

the class KeycloakProcessor method loadFactories.

private Map<Spi, Map<Class<? extends Provider>, Map<String, ProviderFactory>>> loadFactories(Map<String, ProviderFactory> preConfiguredProviders) {
    Config.init(new MicroProfileConfigProvider());
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    KeycloakDeploymentInfo keycloakDeploymentInfo = KeycloakDeploymentInfo.create().name("classpath").services().themeResources();
    ProviderManager pm = new ProviderManager(keycloakDeploymentInfo, classLoader);
    Map<Spi, Map<Class<? extends Provider>, Map<String, ProviderFactory>>> factories = new HashMap<>();
    for (Spi spi : pm.loadSpis()) {
        Map<Class<? extends Provider>, Map<String, ProviderFactory>> providers = new HashMap<>();
        List<ProviderFactory> loadedFactories = new ArrayList<>(pm.load(spi));
        Map<String, ProviderFactory> deployedScriptProviders = loadDeployedScriptProviders(classLoader, spi);
        loadedFactories.addAll(deployedScriptProviders.values());
        preConfiguredProviders.putAll(deployedScriptProviders);
        for (ProviderFactory factory : loadedFactories) {
            if (IGNORED_PROVIDER_FACTORY.contains(factory.getClass())) {
                continue;
            }
            Config.Scope scope = Config.scope(spi.getName(), factory.getId());
            if (isEnabled(factory, scope)) {
                if (spi.isInternal() && !isInternal(factory)) {
                    ServicesLogger.LOGGER.spiMayChange(factory.getId(), factory.getClass().getName(), spi.getName());
                }
                providers.computeIfAbsent(spi.getProviderClass(), aClass -> new HashMap<>()).put(factory.getId(), factory);
            } else {
                logger.debugv("SPI {0} provider {1} disabled", spi.getName(), factory.getId());
            }
        }
        factories.put(spi, providers);
    }
    return factories;
}
Also used : Arrays(java.util.Arrays) Enumeration(java.util.Enumeration) ScriptProviderMetadata(org.keycloak.representations.provider.ScriptProviderMetadata) QUERY_PROPERTY_PREFIX(org.keycloak.quarkus.runtime.storage.database.jpa.QuarkusJpaConnectionProviderFactory.QUERY_PROPERTY_PREFIX) NS_QUARKUS(org.keycloak.quarkus.runtime.configuration.MicroProfileConfigProvider.NS_QUARKUS) KeycloakConfigSourceProvider(org.keycloak.quarkus.runtime.configuration.KeycloakConfigSourceProvider) DeployedScriptAuthenticatorFactory(org.keycloak.authentication.authenticators.browser.DeployedScriptAuthenticatorFactory) PersistenceXmlDescriptorBuildItem(io.quarkus.hibernate.orm.deployment.PersistenceXmlDescriptorBuildItem) ResteasyDeploymentCustomizerBuildItem(io.quarkus.resteasy.server.common.deployment.ResteasyDeploymentCustomizerBuildItem) Map(java.util.Map) Spi(org.keycloak.provider.Spi) Entity(javax.persistence.Entity) Consume(io.quarkus.deployment.annotations.Consume) AuthenticatorSpi(org.keycloak.authentication.AuthenticatorSpi) ProtocolMapperSpi(org.keycloak.protocol.ProtocolMapperSpi) StandardCharsets(java.nio.charset.StandardCharsets) FolderThemeProviderFactory(org.keycloak.theme.FolderThemeProviderFactory) ResteasyContextParameters(org.jboss.resteasy.plugins.server.servlet.ResteasyContextParameters) AnnotationInstance(org.jboss.jandex.AnnotationInstance) FilterBuildItem(io.quarkus.vertx.http.deployment.FilterBuildItem) RequestHostnameProviderFactory(org.keycloak.url.RequestHostnameProviderFactory) SmallRyeHealthHandler(io.quarkus.smallrye.health.runtime.SmallRyeHealthHandler) Environment.getProviderFiles(org.keycloak.quarkus.runtime.Environment.getProviderFiles) PersistedConfigSource(org.keycloak.quarkus.runtime.configuration.PersistedConfigSource) DefaultJpaConnectionProviderFactory(org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory) Record(io.quarkus.deployment.annotations.Record) ByteArrayOutputStream(java.io.ByteArrayOutputStream) AvailableSettings(org.hibernate.cfg.AvailableSettings) JBossJtaTransactionManagerLookup(org.keycloak.transaction.JBossJtaTransactionManagerLookup) DotName(org.jboss.jandex.DotName) FilesPlainTextVaultProviderFactory(org.keycloak.vault.FilesPlainTextVaultProviderFactory) AUTHENTICATORS(org.keycloak.representations.provider.ScriptProviderDescriptor.AUTHENTICATORS) DevServicesDatasourceResultBuildItem(io.quarkus.datasource.deployment.spi.DevServicesDatasourceResultBuildItem) ArrayList(java.util.ArrayList) IndexDependencyBuildItem(io.quarkus.deployment.builditem.IndexDependencyBuildItem) AdditionalJpaModelBuildItem(io.quarkus.hibernate.orm.deployment.AdditionalJpaModelBuildItem) HibernateOrmConfig(io.quarkus.hibernate.orm.deployment.HibernateOrmConfig) PropertyMappers(org.keycloak.quarkus.runtime.configuration.mappers.PropertyMappers) ProviderFactory(org.keycloak.provider.ProviderFactory) Configuration.getPropertyNames(org.keycloak.quarkus.runtime.configuration.Configuration.getPropertyNames) Environment(org.keycloak.quarkus.runtime.Environment) Properties(java.util.Properties) IOException(java.io.IOException) File(java.io.File) FixedHostnameProviderFactory(org.keycloak.url.FixedHostnameProviderFactory) LaunchModeBuildItem(io.quarkus.deployment.builditem.LaunchModeBuildItem) QuarkusDevRequestFilter(org.keycloak.quarkus.runtime.dev.QuarkusDevRequestFilter) QuarkusPropertiesConfigSource(org.keycloak.quarkus.runtime.configuration.QuarkusPropertiesConfigSource) URL(java.net.URL) JarFile(java.util.jar.JarFile) NonApplicationRootPathBuildItem(io.quarkus.vertx.http.deployment.NonApplicationRootPathBuildItem) ParsedPersistenceXmlDescriptor(org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor) Configuration(org.keycloak.quarkus.runtime.configuration.Configuration) RoutingContext(io.vertx.ext.web.RoutingContext) Config(org.keycloak.Config) CombinedIndexBuildItem(io.quarkus.deployment.builditem.CombinedIndexBuildItem) BuildProducer(io.quarkus.deployment.annotations.BuildProducer) FeatureBuildItem(io.quarkus.deployment.builditem.FeatureBuildItem) ResteasyDeployment(org.jboss.resteasy.spi.ResteasyDeployment) QUARKUS_PROPERTY_ENABLED(org.keycloak.quarkus.runtime.configuration.QuarkusPropertiesConfigSource.QUARKUS_PROPERTY_ENABLED) DeployedScriptOIDCProtocolMapper(org.keycloak.protocol.oidc.mappers.DeployedScriptOIDCProtocolMapper) AnnotationTarget(org.jboss.jandex.AnnotationTarget) ProviderManager(org.keycloak.provider.ProviderManager) DefaultHostnameProviderFactory(org.keycloak.url.DefaultHostnameProviderFactory) PolicySpi(org.keycloak.authorization.policy.provider.PolicySpi) Collection(java.util.Collection) ExecutionTime(io.quarkus.deployment.annotations.ExecutionTime) JpaUtils.loadSpecificNamedQueries(org.keycloak.connections.jpa.util.JpaUtils.loadSpecificNamedQueries) ConfigValue(io.smallrye.config.ConfigValue) List(java.util.List) Provider(org.keycloak.provider.Provider) Entry(java.util.Map.Entry) Optional(java.util.Optional) PropertyMapper(org.keycloak.quarkus.runtime.configuration.mappers.PropertyMapper) QuarkusKeycloakApplication(org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication) StaticInitConfigSourceProviderBuildItem(io.quarkus.deployment.builditem.StaticInitConfigSourceProviderBuildItem) KeycloakDeploymentInfo(org.keycloak.provider.KeycloakDeploymentInfo) RouteBuildItem(io.quarkus.vertx.http.deployment.RouteBuildItem) Profile(org.keycloak.common.Profile) ScriptProviderDescriptor(org.keycloak.representations.provider.ScriptProviderDescriptor) HotDeploymentWatchedFileBuildItem(io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem) QuarkusProfile(org.keycloak.quarkus.runtime.QuarkusProfile) Logger(org.jboss.logging.Logger) MicroProfileConfigProvider(org.keycloak.quarkus.runtime.configuration.MicroProfileConfigProvider) LaunchMode(io.quarkus.runtime.LaunchMode) HashMap(java.util.HashMap) ServicesLogger(org.keycloak.services.ServicesLogger) EnvironmentDependentProviderFactory(org.keycloak.provider.EnvironmentDependentProviderFactory) Function(java.util.function.Function) IsDevelopment(io.quarkus.deployment.IsDevelopment) JarEntry(java.util.jar.JarEntry) KeycloakRecorder(org.keycloak.quarkus.runtime.KeycloakRecorder) BuildStep(io.quarkus.deployment.annotations.BuildStep) DefaultLiquibaseConnectionProvider(org.keycloak.connections.jpa.updater.liquibase.conn.DefaultLiquibaseConnectionProvider) StreamUtil(org.keycloak.common.util.StreamUtil) POLICIES(org.keycloak.representations.provider.ScriptProviderDescriptor.POLICIES) RuntimeConfigSetupCompleteBuildItem(io.quarkus.deployment.builditem.RuntimeConfigSetupCompleteBuildItem) LiquibaseJpaUpdaterProviderFactory(org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProviderFactory) IndexView(org.jboss.jandex.IndexView) GeneratedResourceBuildItem(io.quarkus.deployment.builditem.GeneratedResourceBuildItem) QuarkusRequestFilter(org.keycloak.quarkus.runtime.integration.web.QuarkusRequestFilter) PersistenceUnitTransactionType(javax.persistence.spi.PersistenceUnitTransactionType) Consumer(java.util.function.Consumer) JsonSerialization(org.keycloak.util.JsonSerialization) DeployedScriptPolicyFactory(org.keycloak.authorization.policy.provider.js.DeployedScriptPolicyFactory) MAPPERS(org.keycloak.representations.provider.ScriptProviderDescriptor.MAPPERS) JdbcDataSourceBuildItem(io.quarkus.agroal.spi.JdbcDataSourceBuildItem) NotFoundHandler(org.keycloak.quarkus.runtime.integration.web.NotFoundHandler) ProfileManager(io.quarkus.runtime.configuration.ProfileManager) Comparator(java.util.Comparator) Handler(io.vertx.core.Handler) InputStream(java.io.InputStream) KeycloakDeploymentInfo(org.keycloak.provider.KeycloakDeploymentInfo) HashMap(java.util.HashMap) HibernateOrmConfig(io.quarkus.hibernate.orm.deployment.HibernateOrmConfig) Config(org.keycloak.Config) ArrayList(java.util.ArrayList) MicroProfileConfigProvider(org.keycloak.quarkus.runtime.configuration.MicroProfileConfigProvider) Spi(org.keycloak.provider.Spi) AuthenticatorSpi(org.keycloak.authentication.AuthenticatorSpi) ProtocolMapperSpi(org.keycloak.protocol.ProtocolMapperSpi) PolicySpi(org.keycloak.authorization.policy.provider.PolicySpi) KeycloakConfigSourceProvider(org.keycloak.quarkus.runtime.configuration.KeycloakConfigSourceProvider) Provider(org.keycloak.provider.Provider) MicroProfileConfigProvider(org.keycloak.quarkus.runtime.configuration.MicroProfileConfigProvider) DefaultLiquibaseConnectionProvider(org.keycloak.connections.jpa.updater.liquibase.conn.DefaultLiquibaseConnectionProvider) ProviderManager(org.keycloak.provider.ProviderManager) FolderThemeProviderFactory(org.keycloak.theme.FolderThemeProviderFactory) RequestHostnameProviderFactory(org.keycloak.url.RequestHostnameProviderFactory) DefaultJpaConnectionProviderFactory(org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory) FilesPlainTextVaultProviderFactory(org.keycloak.vault.FilesPlainTextVaultProviderFactory) ProviderFactory(org.keycloak.provider.ProviderFactory) FixedHostnameProviderFactory(org.keycloak.url.FixedHostnameProviderFactory) DefaultHostnameProviderFactory(org.keycloak.url.DefaultHostnameProviderFactory) EnvironmentDependentProviderFactory(org.keycloak.provider.EnvironmentDependentProviderFactory) LiquibaseJpaUpdaterProviderFactory(org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProviderFactory) Map(java.util.Map) HashMap(java.util.HashMap)

Example 8 with KeycloakDeploymentInfo

use of org.keycloak.provider.KeycloakDeploymentInfo in project keycloak by keycloak.

the class FeatureDeployerUtil method undeployFactoriesAfterFeatureDisabled.

public static void undeployFactoriesAfterFeatureDisabled(Profile.Feature feature) {
    ProviderManager manager = deployersCache.get(feature);
    if (manager == null) {
        // This is used if some feature is enabled by default and then disabled
        // Need to figure which provider factories were enabled after feature was enabled. Create deployer based on it and save it to the cache
        Map<ProviderFactory, Spi> factoriesBeforeDisable = initializer.remove(feature);
        Map<ProviderFactory, Spi> factoriesAfterDisable = loadEnabledEnvironmentFactories();
        Map<ProviderFactory, Spi> factories = getFactoriesDependentOnFeature(factoriesAfterDisable, factoriesBeforeDisable);
        KeycloakDeploymentInfo di = createDeploymentInfo(factories);
        manager = new ProviderManager(di, FeatureDeployerUtil.class.getClassLoader());
        loadFactories(manager);
        deployersCache.put(feature, manager);
    }
    ProviderManagerRegistry.SINGLETON.undeploy(manager);
}
Also used : KeycloakDeploymentInfo(org.keycloak.provider.KeycloakDeploymentInfo) ProviderManager(org.keycloak.provider.ProviderManager) EnvironmentDependentProviderFactory(org.keycloak.provider.EnvironmentDependentProviderFactory) ProviderFactory(org.keycloak.provider.ProviderFactory) Spi(org.keycloak.provider.Spi)

Example 9 with KeycloakDeploymentInfo

use of org.keycloak.provider.KeycloakDeploymentInfo in project keycloak by keycloak.

the class FeatureDeployerUtil method loadEnabledEnvironmentFactories.

private static Map<ProviderFactory, Spi> loadEnabledEnvironmentFactories() {
    KeycloakDeploymentInfo di = KeycloakDeploymentInfo.create().services();
    ClassLoader classLoader = DefaultKeycloakSession.class.getClassLoader();
    DefaultProviderLoader loader = new DefaultProviderLoader(di, classLoader);
    Map<ProviderFactory, Spi> providerFactories = new HashMap<>();
    for (Spi spi : loader.loadSpis()) {
        List<ProviderFactory> currentFactories = loader.load(spi);
        for (ProviderFactory factory : currentFactories) {
            if (factory instanceof EnvironmentDependentProviderFactory) {
                if (((EnvironmentDependentProviderFactory) factory).isSupported()) {
                    providerFactories.put(factory, spi);
                }
            }
        }
    }
    return providerFactories;
}
Also used : KeycloakDeploymentInfo(org.keycloak.provider.KeycloakDeploymentInfo) DefaultProviderLoader(org.keycloak.provider.DefaultProviderLoader) EnvironmentDependentProviderFactory(org.keycloak.provider.EnvironmentDependentProviderFactory) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) EnvironmentDependentProviderFactory(org.keycloak.provider.EnvironmentDependentProviderFactory) ProviderFactory(org.keycloak.provider.ProviderFactory) Spi(org.keycloak.provider.Spi)

Aggregations

KeycloakDeploymentInfo (org.keycloak.provider.KeycloakDeploymentInfo)9 EnvironmentDependentProviderFactory (org.keycloak.provider.EnvironmentDependentProviderFactory)5 ProviderFactory (org.keycloak.provider.ProviderFactory)5 Spi (org.keycloak.provider.Spi)5 ProviderManager (org.keycloak.provider.ProviderManager)4 HashMap (java.util.HashMap)3 IOException (java.io.IOException)2 JdbcDataSourceBuildItem (io.quarkus.agroal.spi.JdbcDataSourceBuildItem)1 DevServicesDatasourceResultBuildItem (io.quarkus.datasource.deployment.spi.DevServicesDatasourceResultBuildItem)1 IsDevelopment (io.quarkus.deployment.IsDevelopment)1 BuildProducer (io.quarkus.deployment.annotations.BuildProducer)1 BuildStep (io.quarkus.deployment.annotations.BuildStep)1 Consume (io.quarkus.deployment.annotations.Consume)1 ExecutionTime (io.quarkus.deployment.annotations.ExecutionTime)1 Record (io.quarkus.deployment.annotations.Record)1 CombinedIndexBuildItem (io.quarkus.deployment.builditem.CombinedIndexBuildItem)1 FeatureBuildItem (io.quarkus.deployment.builditem.FeatureBuildItem)1 GeneratedResourceBuildItem (io.quarkus.deployment.builditem.GeneratedResourceBuildItem)1 HotDeploymentWatchedFileBuildItem (io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem)1 IndexDependencyBuildItem (io.quarkus.deployment.builditem.IndexDependencyBuildItem)1