Package org.keycloak.models.utils
Class KeycloakModelUtils
java.lang.Object
org.keycloak.models.utils.KeycloakModelUtils
Set of helper methods, which are useful in various model implementations.
- Author:
- Marek Posolda, Daniel Fesenmeyer
- 
Field SummaryFields
- 
Method SummaryModifier and TypeMethodDescriptionstatic StringbuildGroupPath(boolean escapeSlashes, String... names) static StringbuildGroupPath(GroupModel group) static StringbuildGroupPath(GroupModel group, GroupModel otherParentGroup) static StringbuildRoleQualifier(String clientId, String roleName) static voidcloneContextRealmClientSessionToSession(KeycloakContext origContext, KeycloakSession targetSession) Sets up the context for the specified session with the RealmModel, clientModel and AuthenticatedSessionModel.static voidcloneContextRealmClientToSession(KeycloakContext origContext, KeycloakSession targetSession) Sets up the context for the specified session with the RealmModel.componentModelGetter(String realmId, String componentId) static StringconvertClientScopeName(String previousName) Replace spaces in the name with underscore, so that scope name can be used as value of scope parameterstatic ComponentModelcreateComponentModel(String name, String parentId, String providerId, String providerType, String... config) static ClientModelcreateManagementClient(RealmModel realm, String name) static ClientModelcreatePublicClient(RealmModel realm, String name) static voiddeepDeleteAuthenticationExecutor(KeycloakSession session, RealmModel realm, AuthenticationExecutionModel authExecutor, Runnable flowUnavailableHandler, Runnable builtinFlowHandler) Recursively remove authentication executor (including sub-flows and configs) from the model storagestatic voiddeepDeleteAuthenticationFlow(KeycloakSession session, RealmModel realm, AuthenticationFlowModel authFlow, Runnable flowUnavailableHandler, Runnable builtinFlowHandler) Recursively remove authentication flow (including all subflows and executions) from the model storagestatic voiddeepFindAuthenticationExecutions(RealmModel realm, AuthenticationFlowModel flow, List<AuthenticationExecutionModel> result) Recursively find all AuthenticationExecutionModel from specified flow or all it's subflowsstatic booleanescapeSlashesInGroupPath(KeycloakSession session) Helper to get from the session if group path slashes should be escaped or not.static ClientScopeModelfindClientScopeById(RealmModel realm, ClientModel client, String clientScopeId) Lookup clientScope OR client by id.static GroupModelfindGroupByPath(KeycloakSession session, RealmModel realm, String path) Finds group by path.static GroupModelfindGroupByPath(KeycloakSession session, RealmModel realm, String[] path) Finds group by path.static UserModelfindUserByNameOrEmail(KeycloakSession session, RealmModel realm, String username) Try to find user by username or email for authenticationstatic Stringstatic Stringstatic CertificateRepresentationgenerateKeyPairCertificate(String subject) static StringgenerateSecret(ClientModel client) static X509CertificategetCertificate(String cert) static ClientScopeModelgetClientScopeByName(RealmModel realm, String clientScopeName) getClientScopeMappingsStream(ClientModel client, ScopeContainerModel container) static <T extends Provider>
 ProviderFactory<T>getComponentFactory(KeycloakSessionFactory factory, Class<T> providerClass, Config.Scope config, String spiName) static ComponentModelgetComponentModel(KeycloakSessionFactory factory, String realmId, String componentId) static Stringstatic StringgetIdentityProviderDisplayName(KeycloakSession session, IdentityProviderModel provider) static StringgetMasterRealmAdminApplicationClientId(String realmName) static StringgetPemFromCertificate(X509Certificate certificate) static StringgetPemFromKey(Key key) static PrivateKeygetPrivateKey(String privateKeyPem) static PublicKeygetPublicKey(String publicKeyPem) static RoleModelgetRoleFromString(RealmModel realm, String roleName) static KeygetSecretKey(String secret) static intgetSecretLengthByAuthenticationType(String clientAuthenticatorType, String signingAlg) static booleanisFlowUsed(RealmModel realm, AuthenticationFlowModel model) Check to see if a flow is currently in usestatic StringnormalizeGroupPath(String groupPath) static String[]static Collection<String>resolveAttribute(GroupModel group, String name, boolean aggregateAttrs) static Collection<String>resolveAttribute(UserModel user, String name, boolean aggregateAttrs) static voidrunJobInTransaction(KeycloakSessionFactory factory, KeycloakContext context, KeycloakSessionTask task) Wrap given runnable job into KeycloakTransaction.static voidrunJobInTransaction(KeycloakSessionFactory factory, KeycloakSessionTask task) Wrap given runnable job into KeycloakTransaction.static <V> VrunJobInTransactionWithResult(KeycloakSessionFactory factory, KeycloakContext context, KeycloakSessionTaskWithResult<V> callable) Wrap a given callable job into a KeycloakTransaction.static <V> VrunJobInTransactionWithResult(KeycloakSessionFactory factory, KeycloakSessionTaskWithResult<V> callable) Wrap a given callable job into a KeycloakTransaction.static voidrunJobInTransactionWithTimeout(KeycloakSessionFactory factory, KeycloakSessionTask task, int timeoutInSeconds) Wrap given runnable job into KeycloakTransaction.static booleanDeep search if given role is descendant of composite rolestatic voidsetDefaultGroups(KeycloakSession session, RealmModel realm, Stream<String> groups) Sets the default groups on the realmstatic voidsetTransactionLimit(KeycloakSessionFactory factory, int timeoutInSeconds) static voidstatic voidsetupDefaultRole(RealmModel realm, String defaultRoleName) Creates default role for particular realm with the given name.static voidsetupDeleteAccount(ClientModel accountClient) static RoleModelsetupOfflineRole(RealmModel realm) static String[]Splits a group path than can be escaped for slashes.static voidsuspendJtaTransaction(KeycloakSessionFactory factory, Runnable runnable) static StringtoLowerCaseSafe(String str) 
- 
Field Details- 
AUTH_TYPE_CLIENT_SECRET- See Also:
 
- 
AUTH_TYPE_CLIENT_SECRET_JWT- See Also:
 
- 
GROUP_PATH_SEPARATOR- See Also:
 
- 
GROUP_PATH_ESCAPE- See Also:
 
 
- 
- 
Method Details- 
generateId
- 
getPublicKey
- 
getCertificate
- 
getPrivateKey
- 
getSecretKey
- 
getPemFromKey
- 
getPemFromCertificate
- 
generateKeyPairCertificate
- 
generateSecret
- 
getDefaultClientAuthenticatorType
- 
generateCodeSecret
- 
createManagementClient
- 
createPublicClient
- 
searchForDeep search if given role is descendant of composite role- Parameters:
- role- role to check
- composite- composite role
- visited- set of already visited roles (used for recursion)
- Returns:
- true if "role" is descendant of "composite"
 
- 
findUserByNameOrEmailpublic static UserModel findUserByNameOrEmail(KeycloakSession session, RealmModel realm, String username) Try to find user by username or email for authentication- Parameters:
- realm- realm
- username- username or email of user
- Returns:
- found user
 
- 
runJobInTransactionWrap given runnable job into KeycloakTransaction.- Parameters:
- factory- The session factory to use
- task- The task to execute
 
- 
runJobInTransactionpublic static void runJobInTransaction(KeycloakSessionFactory factory, KeycloakContext context, KeycloakSessionTask task) Wrap given runnable job into KeycloakTransaction.- Parameters:
- factory- The session factory to use
- context- The context from the previous session
- task- The task to execute
 
- 
cloneContextRealmClientToSessionpublic static void cloneContextRealmClientToSession(KeycloakContext origContext, KeycloakSession targetSession) Sets up the context for the specified session with the RealmModel.- Parameters:
- origContext- The original context to propagate
- targetSession- The new target session to propagate the context to
 
- 
cloneContextRealmClientSessionToSessionpublic static void cloneContextRealmClientSessionToSession(KeycloakContext origContext, KeycloakSession targetSession) Sets up the context for the specified session with the RealmModel, clientModel and AuthenticatedSessionModel.- Parameters:
- origContext- The original context to propagate
- targetSession- The new target session to propagate the context to
 
- 
runJobInTransactionWithResultpublic static <V> V runJobInTransactionWithResult(KeycloakSessionFactory factory, KeycloakSessionTaskWithResult<V> callable) Wrap a given callable job into a KeycloakTransaction.- Type Parameters:
- V- The type for the result
- Parameters:
- factory- The session factory
- callable- The callable to execute
- Returns:
- The return value from the callable
 
- 
runJobInTransactionWithResultpublic static <V> V runJobInTransactionWithResult(KeycloakSessionFactory factory, KeycloakContext context, KeycloakSessionTaskWithResult<V> callable) Wrap a given callable job into a KeycloakTransaction.- Type Parameters:
- V- The type for the result
- Parameters:
- factory- The session factory
- context- The context from the previous session to use
- callable- The callable to execute
- Returns:
- The return value from the callable
 
- 
runJobInTransactionWithTimeoutpublic static void runJobInTransactionWithTimeout(KeycloakSessionFactory factory, KeycloakSessionTask task, int timeoutInSeconds) Wrap given runnable job into KeycloakTransaction. Set custom timeout for the JTA transaction (in case we're in the environment with JTA enabled)- Parameters:
- factory-
- task-
- timeoutInSeconds-
 
- 
setTransactionLimit
- 
componentModelGetterpublic static Function<KeycloakSessionFactory,ComponentModel> componentModelGetter(String realmId, String componentId) 
- 
getComponentModelpublic static ComponentModel getComponentModel(KeycloakSessionFactory factory, String realmId, String componentId) 
- 
getComponentFactorypublic static <T extends Provider> ProviderFactory<T> getComponentFactory(KeycloakSessionFactory factory, Class<T> providerClass, Config.Scope config, String spiName) 
- 
getMasterRealmAdminApplicationClientId
- 
createComponentModel
- 
toLowerCaseSafe
- 
setupDefaultRoleCreates default role for particular realm with the given name.- Parameters:
- realm- Realm
- defaultRoleName- Name of the newly created defaultRole
 
- 
setupOfflineRole
- 
setupDeleteAccount
- 
deepFindAuthenticationExecutionspublic static void deepFindAuthenticationExecutions(RealmModel realm, AuthenticationFlowModel flow, List<AuthenticationExecutionModel> result) Recursively find all AuthenticationExecutionModel from specified flow or all it's subflows- Parameters:
- realm-
- flow-
- result- input should be empty list. At the end will be all executions added to this list
 
- 
resolveAttributepublic static Collection<String> resolveAttribute(GroupModel group, String name, boolean aggregateAttrs) 
- 
resolveAttributepublic static Collection<String> resolveAttribute(UserModel user, String name, boolean aggregateAttrs) 
- 
escapeSlashesInGroupPathHelper to get from the session if group path slashes should be escaped or not.- Parameters:
- session- The session
- Returns:
- true or false
 
- 
findGroupByPathFinds group by path. Path is separated by '/' character. For example: /group/subgroup/subsubgroup The method takes into consideration also groups with '/' in their name. For example: /group/sub/group/subgroup This method allows escaping of slashes for example: /parent\/group/child which is a two level path for ["parent/group", "child"].- Parameters:
- session- Keycloak session
- realm- The realm
- path- Path that will be searched among groups
- Returns:
- GroupModelcorresponding to the given- pathor- nullif no group was found
 
- 
findGroupByPathFinds group by path. Variant when you have the path already separated by group names.- Parameters:
- session- Keycloak session
- realm- The realm
- path- Path The path hierarchy of groups
- Returns:
- GroupModelcorresponding to the given- pathor- nullif no group was found
 
- 
splitPathSplits a group path than can be escaped for slashes.- Parameters:
- path- The group path
- escapedSlashes- true if slashes are escaped in the path
- Returns:
 
- 
buildGroupPath
- 
buildGroupPath
- 
buildGroupPath
- 
normalizeGroupPath
- 
getClientScopeMappingsStreampublic static Stream<RoleModel> getClientScopeMappingsStream(ClientModel client, ScopeContainerModel container) 
- 
getRoleFromString
- 
parseRole
- 
buildRoleQualifier
- 
isFlowUsedCheck to see if a flow is currently in use- Parameters:
- realm-
- model-
- Returns:
 
- 
deepDeleteAuthenticationFlowpublic static void deepDeleteAuthenticationFlow(KeycloakSession session, RealmModel realm, AuthenticationFlowModel authFlow, Runnable flowUnavailableHandler, Runnable builtinFlowHandler) Recursively remove authentication flow (including all subflows and executions) from the model storage- Parameters:
- session- The keycloak session
- realm- The realm
- authFlow- flow to delete
- flowUnavailableHandler- Will be executed when flow, sub-flow or executor is null
- builtinFlowHandler- will be executed when flow is built-in flow
 
- 
deepDeleteAuthenticationExecutorpublic static void deepDeleteAuthenticationExecutor(KeycloakSession session, RealmModel realm, AuthenticationExecutionModel authExecutor, Runnable flowUnavailableHandler, Runnable builtinFlowHandler) Recursively remove authentication executor (including sub-flows and configs) from the model storage- Parameters:
- session- The keycloak session
- realm- The realm
- authExecutor- The authentication executor to remove
- flowUnavailableHandler- Handler that will be executed when flow, sub-flow or executor is null
- builtinFlowHandler- Handler that will be executed when flow is built-in flow
 
- 
getClientScopeByName
- 
findClientScopeByIdpublic static ClientScopeModel findClientScopeById(RealmModel realm, ClientModel client, String clientScopeId) Lookup clientScope OR client by id. Method is useful if you know just ID, but you don't know if underlying model is clientScope or client
- 
convertClientScopeNameReplace spaces in the name with underscore, so that scope name can be used as value of scope parameter
- 
setupAuthorizationServices
- 
suspendJtaTransaction
- 
getIdentityProviderDisplayNamepublic static String getIdentityProviderDisplayName(KeycloakSession session, IdentityProviderModel provider) 
- 
getSecretLengthByAuthenticationTypepublic static int getSecretLengthByAuthenticationType(String clientAuthenticatorType, String signingAlg) - Parameters:
- clientAuthenticatorType-
- Returns:
- secret size based on authentication type
 
- 
setDefaultGroupspublic static void setDefaultGroups(KeycloakSession session, RealmModel realm, Stream<String> groups) Sets the default groups on the realm- Parameters:
- session-
- realm-
- groups-
- Throws:
- RuntimeException- if a group does not exist
 
 
-