Search in sources :

Example 1 with Scope

use of org.keycloak.Config.Scope in project keycloak by keycloak.

the class KeycloakModelTest method createKeycloakSessionFactory.

/**
 * Creates a fresh initialized {@link KeycloakSessionFactory}. The returned factory uses configuration
 * local to the thread that calls this method, allowing for per-thread customization. This in turn allows
 * testing of several parallel session factories which can be used to simulate several servers
 * running in parallel.
 * @return
 */
public static KeycloakSessionFactory createKeycloakSessionFactory() {
    int factoryIndex = FACTORY_COUNT.incrementAndGet();
    String threadName = Thread.currentThread().getName();
    CONFIG.reset();
    CONFIG.spi(ComponentFactorySpi.NAME).provider(DefaultComponentFactoryProviderFactory.PROVIDER_ID).config("cachingForced", "true");
    MODEL_PARAMETERS.forEach(m -> m.updateConfig(CONFIG));
    LOG.debugf("Creating factory %d in %s using the following configuration:\n    %s", factoryIndex, threadName, CONFIG);
    DefaultKeycloakSessionFactory res = new DefaultKeycloakSessionFactory() {

        @Override
        protected boolean isEnabled(ProviderFactory factory, Scope scope) {
            return super.isEnabled(factory, scope) && isFactoryAllowed(factory);
        }

        @Override
        protected Map<Class<? extends Provider>, Map<String, ProviderFactory>> loadFactories(ProviderManager pm) {
            spis.removeIf(s -> !isSpiAllowed(s));
            return super.loadFactories(pm);
        }

        private boolean isSpiAllowed(Spi s) {
            return MODEL_PARAMETERS.stream().anyMatch(p -> p.isSpiAllowed(s));
        }

        private boolean isFactoryAllowed(ProviderFactory factory) {
            return MODEL_PARAMETERS.stream().anyMatch(p -> p.isFactoryAllowed(factory));
        }

        @Override
        public String toString() {
            return "KeycloakSessionFactory " + factoryIndex + " (from " + threadName + " thread)";
        }
    };
    res.init();
    res.publish(new PostMigrationEvent());
    return res;
}
Also used : DefaultKeycloakSessionFactory(org.keycloak.services.DefaultKeycloakSessionFactory) Scope(org.keycloak.Config.Scope) DefaultExecutorsProviderFactory(org.keycloak.executors.DefaultExecutorsProviderFactory) ComponentFactoryProviderFactory(org.keycloak.component.ComponentFactoryProviderFactory) DefaultAuthorizationProviderFactory(org.keycloak.authorization.DefaultAuthorizationProviderFactory) DefaultComponentFactoryProviderFactory(org.keycloak.services.DefaultComponentFactoryProviderFactory) ProviderFactory(org.keycloak.provider.ProviderFactory) DeploymentStateProviderFactory(org.keycloak.models.DeploymentStateProviderFactory) ProviderManager(org.keycloak.provider.ProviderManager) BeforeClass(org.junit.BeforeClass) Map(java.util.Map) ComponentFactorySpi(org.keycloak.component.ComponentFactorySpi) ClientScopeSpi(org.keycloak.models.ClientScopeSpi) ExecutorsSpi(org.keycloak.executors.ExecutorsSpi) DBLockSpi(org.keycloak.models.dblock.DBLockSpi) ClusterSpi(org.keycloak.cluster.ClusterSpi) UserSpi(org.keycloak.models.UserSpi) Spi(org.keycloak.provider.Spi) UserLoginFailureSpi(org.keycloak.models.UserLoginFailureSpi) TimerSpi(org.keycloak.timer.TimerSpi) ClientSpi(org.keycloak.models.ClientSpi) StoreFactorySpi(org.keycloak.authorization.store.StoreFactorySpi) RealmSpi(org.keycloak.models.RealmSpi) GroupSpi(org.keycloak.models.GroupSpi) UserSessionSpi(org.keycloak.models.UserSessionSpi) DeploymentStateSpi(org.keycloak.models.DeploymentStateSpi) EventStoreSpi(org.keycloak.events.EventStoreSpi) AuthorizationSpi(org.keycloak.authorization.AuthorizationSpi) RoleSpi(org.keycloak.models.RoleSpi) Provider(org.keycloak.provider.Provider) PostMigrationEvent(org.keycloak.models.utils.PostMigrationEvent)

Example 2 with Scope

use of org.keycloak.Config.Scope in project keycloak by keycloak.

the class DefaultComponentFactoryProviderFactory method getProviderFactory.

@Override
@SuppressWarnings("unchecked")
public <T extends Provider> ProviderFactory<T> getProviderFactory(Class<T> clazz, String realmId, String componentId, Function<KeycloakSessionFactory, ComponentModel> modelGetter) {
    ProviderFactory res = componentsMap.get().get(componentId);
    if (res != null) {
        LOG.tracef("Found cached ProviderFactory for %s in (%s, %s)", clazz, realmId, componentId);
        return res;
    }
    // Apply the expensive operation before putting it into the cache
    final ComponentModel cm;
    if (modelGetter == null) {
        LOG.debugf("Getting component configuration for component (%s, %s) from realm configuration", clazz, realmId, componentId);
        cm = KeycloakModelUtils.getComponentModel(factory, realmId, componentId);
    } else {
        LOG.debugf("Getting component configuration for component (%s, %s) via provided method", realmId, componentId);
        cm = modelGetter.apply(factory);
    }
    if (cm == null) {
        return null;
    }
    final String provider = cm.getProviderId();
    ProviderFactory<T> pf = provider == null ? factory.getProviderFactory(clazz) : factory.getProviderFactory(clazz, provider);
    if (pf == null) {
        // Either not found or not enabled
        LOG.debugf("ProviderFactory for %s in (%s, %s) not found", clazz, realmId, componentId);
        return null;
    }
    final ProviderFactory newFactory;
    try {
        newFactory = pf.getClass().getDeclaredConstructor().newInstance();
    } catch (ReflectiveOperationException ex) {
        LOG.warn("Cannot instantiate factory", ex);
        return null;
    }
    Scope scope = Config.scope(factory.getSpi(clazz).getName(), provider);
    ComponentModelScope configScope = new ComponentModelScope(scope, cm);
    ProviderFactory<T> providerFactory;
    if (this.componentCachingAvailable) {
        providerFactory = componentsMap.get().computeIfAbsent(componentId, cId -> initializeFactory(clazz, realmId, componentId, newFactory, configScope));
    } else {
        providerFactory = initializeFactory(clazz, realmId, componentId, newFactory, configScope);
    }
    return providerFactory;
}
Also used : Scope(org.keycloak.Config.Scope) InvalidableObjectType(org.keycloak.provider.InvalidationHandler.InvalidableObjectType) Arrays(java.util.Arrays) ComponentModelScope(org.keycloak.component.ComponentModelScope) KeycloakModelUtils(org.keycloak.models.utils.KeycloakModelUtils) Collection(java.util.Collection) Logger(org.jboss.logging.Logger) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Config(org.keycloak.Config) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) ConcurrentMap(java.util.concurrent.ConcurrentMap) Objects(java.util.Objects) ClusterProvider(org.keycloak.cluster.ClusterProvider) InvalidationHandler(org.keycloak.provider.InvalidationHandler) Provider(org.keycloak.provider.Provider) Stream(java.util.stream.Stream) StackUtil(org.keycloak.common.util.StackUtil) ComponentFactoryProviderFactory(org.keycloak.component.ComponentFactoryProviderFactory) KeycloakSessionFactory(org.keycloak.models.KeycloakSessionFactory) ObjectType(org.keycloak.provider.InvalidationHandler.ObjectType) ComponentModel(org.keycloak.component.ComponentModel) ProviderFactory(org.keycloak.provider.ProviderFactory) Scope(org.keycloak.Config.Scope) ComponentModelScope(org.keycloak.component.ComponentModelScope) ComponentModelScope(org.keycloak.component.ComponentModelScope) ComponentFactoryProviderFactory(org.keycloak.component.ComponentFactoryProviderFactory) ProviderFactory(org.keycloak.provider.ProviderFactory) ComponentModel(org.keycloak.component.ComponentModel)

Aggregations

Scope (org.keycloak.Config.Scope)2 ComponentFactoryProviderFactory (org.keycloak.component.ComponentFactoryProviderFactory)2 Provider (org.keycloak.provider.Provider)2 ProviderFactory (org.keycloak.provider.ProviderFactory)2 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Set (java.util.Set)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Function (java.util.function.Function)1 Stream (java.util.stream.Stream)1 Logger (org.jboss.logging.Logger)1 BeforeClass (org.junit.BeforeClass)1 Config (org.keycloak.Config)1 AuthorizationSpi (org.keycloak.authorization.AuthorizationSpi)1 DefaultAuthorizationProviderFactory (org.keycloak.authorization.DefaultAuthorizationProviderFactory)1 StoreFactorySpi (org.keycloak.authorization.store.StoreFactorySpi)1