Class DeclarativeUserProfileProvider

  • All Implemented Interfaces:
    org.keycloak.component.AmphibianProviderFactory<org.keycloak.userprofile.UserProfileProvider>, org.keycloak.component.ComponentFactory<org.keycloak.userprofile.UserProfileProvider,​org.keycloak.userprofile.UserProfileProvider>, org.keycloak.provider.ConfiguredProvider, org.keycloak.provider.Provider, org.keycloak.provider.ProviderFactory<org.keycloak.userprofile.UserProfileProvider>, org.keycloak.userprofile.UserProfileProvider, org.keycloak.userprofile.UserProfileProviderFactory<org.keycloak.userprofile.UserProfileProvider>

    public class DeclarativeUserProfileProvider
    extends AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
    implements org.keycloak.component.AmphibianProviderFactory<org.keycloak.userprofile.UserProfileProvider>
    UserProfileProvider loading configuration from the changeable JSON file stored in component config. Parsed configuration is cached.
    Author:
    Pedro Igor, Vlastimil Elias
    • Constructor Detail

      • DeclarativeUserProfileProvider

        public DeclarativeUserProfileProvider()
      • DeclarativeUserProfileProvider

        public DeclarativeUserProfileProvider​(org.keycloak.models.KeycloakSession session,
                                              Map<org.keycloak.userprofile.UserProfileContext,​org.keycloak.userprofile.UserProfileMetadata> metadataRegistry,
                                              String defaultRawConfig)
    • Method Detail

      • getId

        public String getId()
        Specified by:
        getId in interface org.keycloak.provider.ProviderFactory<org.keycloak.userprofile.UserProfileProvider>
      • create

        protected org.keycloak.userprofile.UserProfileProvider create​(org.keycloak.models.KeycloakSession session,
                                                                      Map<org.keycloak.userprofile.UserProfileContext,​org.keycloak.userprofile.UserProfileMetadata> metadataRegistry)
        Description copied from class: AbstractUserProfileProvider
        Subclasses can override this method to create their instances of UserProfileProvider.
        Specified by:
        create in class AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
        Parameters:
        session - the session
        metadataRegistry - the profile metadata
        Returns:
        the profile provider instance
      • createAttributes

        protected org.keycloak.userprofile.Attributes createAttributes​(org.keycloak.userprofile.UserProfileContext context,
                                                                       Map<String,​?> attributes,
                                                                       org.keycloak.models.UserModel user,
                                                                       org.keycloak.userprofile.UserProfileMetadata metadata)
        Overrides:
        createAttributes in class AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
      • configureUserProfile

        protected org.keycloak.userprofile.UserProfileMetadata configureUserProfile​(org.keycloak.userprofile.UserProfileMetadata metadata,
                                                                                    org.keycloak.models.KeycloakSession session)
        Description copied from class: AbstractUserProfileProvider
        Sub-types can override this method to customize how contextual profile metadata is configured at runtime.
        Overrides:
        configureUserProfile in class AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
        Parameters:
        metadata - the profile metadata
        session - the current session
        Returns:
        the metadata
      • getHelpText

        public String getHelpText()
        Specified by:
        getHelpText in interface org.keycloak.provider.ConfiguredProvider
      • validateConfiguration

        public void validateConfiguration​(org.keycloak.models.KeycloakSession session,
                                          org.keycloak.models.RealmModel realm,
                                          org.keycloak.component.ComponentModel model)
                                   throws org.keycloak.component.ComponentValidationException
        Specified by:
        validateConfiguration in interface org.keycloak.component.ComponentFactory<org.keycloak.userprofile.UserProfileProvider,​org.keycloak.userprofile.UserProfileProvider>
        Throws:
        org.keycloak.component.ComponentValidationException
      • getConfiguration

        public String getConfiguration()
        Specified by:
        getConfiguration in interface org.keycloak.userprofile.UserProfileProvider
        Overrides:
        getConfiguration in class AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
      • setConfiguration

        public void setConfiguration​(String configuration)
        Specified by:
        setConfiguration in interface org.keycloak.userprofile.UserProfileProvider
        Overrides:
        setConfiguration in class AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
      • getConfigProperties

        public List<org.keycloak.provider.ProviderConfigProperty> getConfigProperties()
        Specified by:
        getConfigProperties in interface org.keycloak.component.AmphibianProviderFactory<org.keycloak.userprofile.UserProfileProvider>
        Specified by:
        getConfigProperties in interface org.keycloak.provider.ConfiguredProvider
      • init

        public void init​(org.keycloak.Config.Scope config)
        Specified by:
        init in interface org.keycloak.provider.ProviderFactory<org.keycloak.userprofile.UserProfileProvider>
        Overrides:
        init in class AbstractUserProfileProvider<org.keycloak.userprofile.UserProfileProvider>
      • order

        public int order()
        Specified by:
        order in interface org.keycloak.provider.ProviderFactory<org.keycloak.userprofile.UserProfileProvider>
      • getComponentModel

        public org.keycloak.component.ComponentModel getComponentModel()
      • decorateUserProfileForCache

        protected org.keycloak.userprofile.UserProfileMetadata decorateUserProfileForCache​(org.keycloak.userprofile.UserProfileMetadata decoratedMetadata,
                                                                                           org.keycloak.component.ComponentModel model)
        Decorate basic metadata provided from AbstractUserProfileProvider based on 'per realm' configuration. This method is called for each UserProfileContext in each realm, and metadata are cached then and this method is called again only if configuration changes.
        Parameters:
        decoratedMetadata - base to be decorated based on configuration loaded from component model
        model - component model to get "per realm" configuration from
        Returns:
        decorated metadata
      • getParsedConfig

        protected UPConfig getParsedConfig​(org.keycloak.component.ComponentModel model)
        Get parsed config file configured in model. Default one used if not configured.
        Parameters:
        model - to take config from
        Returns:
        parsed configuration
      • createComponentModel

        protected org.keycloak.component.ComponentModel createComponentModel()
        Create the component model to store configuration
        Returns:
        component model
      • createConfiguredValidator

        protected org.keycloak.userprofile.AttributeValidatorMetadata createConfiguredValidator​(String validator,
                                                                                                Map<String,​Object> validatorConfig)
        Create validator for validation configured in the user profile config.
        Parameters:
        validator - id to create validator for
        validatorConfig - of the validator
        Returns:
        validator metadata to run given validation