Class AbstractStorageManager<ProviderType extends org.keycloak.provider.Provider,​StorageProviderModelType extends org.keycloak.storage.CacheableStorageProviderModel>

  • Type Parameters:
    ProviderType - This type will be used for looking for factories that produce instances of desired providers
    StorageProviderModelType - Type of model used for creating provider, it needs to extend CacheableStorageProviderModel as it has isEnabled() method and also extend PrioritizedComponentModel which is required for sorting providers based on its priorities
    Direct Known Subclasses:
    ClientScopeStorageManager, GroupStorageManager, UserCredentialStoreManager, UserStorageManager

    public abstract class AbstractStorageManager<ProviderType extends org.keycloak.provider.Provider,​StorageProviderModelType extends org.keycloak.storage.CacheableStorageProviderModel>
    extends Object
    • Field Detail

      • session

        protected final org.keycloak.models.KeycloakSession session
    • Constructor Detail

      • AbstractStorageManager

        public AbstractStorageManager​(org.keycloak.models.KeycloakSession session,
                                      Class<? extends org.keycloak.provider.ProviderFactory> factoryTypeClass,
                                      Class<ProviderType> providerTypeClass,
                                      Function<org.keycloak.component.ComponentModel,​StorageProviderModelType> toStorageProviderModelTypeFunction,
                                      String configScope)
    • Method Detail

      • getStorageProviderTimeout

        protected Long getStorageProviderTimeout()
      • getStorageProviderFactory

        protected <T extends ProviderType> org.keycloak.component.ComponentFactory<T,​ProviderType> getStorageProviderFactory​(String providerId)
        Returns a factory with the providerId, which produce instances of type CreatedProviderType
        Parameters:
        providerId - id of factory that produce desired instances
        Returns:
        A factory that implements ComponentFactory<CreatedProviderType, ProviderType>
      • getEnabledStorageProviders

        protected <T> Stream<T> getEnabledStorageProviders​(org.keycloak.models.RealmModel realm,
                                                           Class<T> capabilityInterface)
        Returns stream of all storageProviders within the realm that implements the capabilityInterface.
        Parameters:
        realm - realm
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        Returns:
        enabled storage providers for realm and @{code getProviderTypeClass()}
      • flatMapEnabledStorageProvidersWithTimeout

        protected <R,​T> Stream<R> flatMapEnabledStorageProvidersWithTimeout​(org.keycloak.models.RealmModel realm,
                                                                                  Class<T> capabilityInterface,
                                                                                  Function<T,​? extends Stream<R>> applyFunction)
        Gets all enabled StorageProviders that implements the capabilityInterface, applies applyFunction on each of them and then join the results together. !! Each StorageProvider has a limited time to respond, if it fails to do it, empty stream is returned !!
        Type Parameters:
        R - result of applyFunction
        Parameters:
        realm - realm
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        applyFunction - function that is applied on StorageProviders
        Returns:
        a stream with all results from all StorageProviders
      • mapEnabledStorageProvidersWithTimeout

        protected <R,​T> Stream<R> mapEnabledStorageProvidersWithTimeout​(org.keycloak.models.RealmModel realm,
                                                                              Class<T> capabilityInterface,
                                                                              Function<T,​R> applyFunction)
        Gets all enabled StorageProviders that implements the capabilityInterface, applies applyFunction on each of them and returns the stream. !! Each StorageProvider has a limited time to respond, if it fails to do it, null is returned !!
        Type Parameters:
        R - Result of applyFunction
        Parameters:
        realm - realm
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        applyFunction - function that is applied on StorageProviders
        Returns:
        First result from StorageProviders
      • consumeEnabledStorageProvidersWithTimeout

        protected <T> void consumeEnabledStorageProvidersWithTimeout​(org.keycloak.models.RealmModel realm,
                                                                     Class<T> capabilityInterface,
                                                                     Consumer<T> consumer)
        Gets all enabled StorageProviders that implements the capabilityInterface and call applyFunction on each !! Each StorageProvider has a limited time for consuming !!
        Parameters:
        realm - realm
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        consumer - function that is applied on StorageProviders
      • getStorageProviderInstance

        protected <T> T getStorageProviderInstance​(org.keycloak.models.RealmModel realm,
                                                   String providerId,
                                                   Class<T> capabilityInterface)
      • getStorageProviderInstance

        protected <T> T getStorageProviderInstance​(org.keycloak.models.RealmModel realm,
                                                   String providerId,
                                                   Class<T> capabilityInterface,
                                                   boolean includeDisabled)
        Returns an instance of provider with the providerId within the realm or null if storage provider with providerId doesn't implement capabilityInterface.
        Parameters:
        realm - realm
        providerId - id of ComponentModel within database/storage
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        Returns:
        an instance of type CreatedProviderType or null if storage provider with providerId doesn't implement capabilityInterface
      • getStorageProviderModel

        protected StorageProviderModelType getStorageProviderModel​(org.keycloak.models.RealmModel realm,
                                                                   String providerId)
        Returns an instance of StorageProvider model corresponding realm and providerId
        Parameters:
        realm - Realm.
        providerId - Id of desired provider.
        Returns:
        An instance of type StorageProviderModelType
      • getStorageProviderInstance

        protected <T> T getStorageProviderInstance​(StorageProviderModelType model,
                                                   Class<T> capabilityInterface)
        Returns an instance of provider for the model or null if storage provider based on the model doesn't implement capabilityInterface.
        Type Parameters:
        T - Required capability interface type
        Parameters:
        model - StorageProviderModel obtained from database/storage
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        Returns:
        an instance of type T or null if storage provider based on the model doesn't exist or doesn't implement the capabilityInterface.
      • getStorageProviderInstance

        protected <T> T getStorageProviderInstance​(StorageProviderModelType model,
                                                   Class<T> capabilityInterface,
                                                   boolean includeDisabled)
        Returns an instance of provider for the model or null if storage provider based on the model doesn't implement capabilityInterface.
        Parameters:
        model - StorageProviderModel obtained from database/storage
        capabilityInterface - class of desired capabilityInterface. For example, GroupLookupProvider or UserQueryProvider
        includeDisabled - If set to true, the method will return also disabled providers.
        Returns:
        an instance of type T or null if storage provider based on the model doesn't exist or doesn't implement the capabilityInterface.
      • getStorageProviderModels

        public static Stream<org.keycloak.component.ComponentModel> getStorageProviderModels​(org.keycloak.models.RealmModel realm,
                                                                                             Class<? extends org.keycloak.provider.Provider> storageType)
        Stream of ComponentModels of storageType.
        Parameters:
        realm - Realm.
        storageType - Type.
        Returns:
        Stream of ComponentModels