CachedRealm.java

688 lines | 24.972 kB Blame History Raw Download
/*
 * Copyright 2016 Red Hat, Inc. and/or its affiliates
 * and other contributors as indicated by the @author tags.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// package org.keycloak.models.cache.infinispan.entities;

// import org.keycloak.common.enums.SslRequired;
// import org.keycloak.common.util.MultivaluedHashMap;
// import org.keycloak.component.ComponentModel;
// import org.keycloak.models.AuthenticationExecutionModel;
// import org.keycloak.models.AuthenticationFlowModel;
// import org.keycloak.models.AuthenticatorConfigModel;
// import org.keycloak.models.ClientModel;
// import org.keycloak.models.ClientScopeModel;
// import org.keycloak.models.GroupModel;
// import org.keycloak.models.IdentityProviderMapperModel;
// import org.keycloak.models.IdentityProviderModel;
// import org.keycloak.models.OTPPolicy;
// import org.keycloak.models.PasswordPolicy;
// import org.keycloak.models.RealmModel;
// import org.keycloak.models.RequiredActionProviderModel;
// import org.keycloak.models.RequiredCredentialModel;

// import java.util.ArrayList;
// import java.util.Collections;
// import java.util.HashMap;
// import java.util.HashSet;
// import java.util.LinkedList;
// import java.util.List;
// import java.util.Map;
// import java.util.Set;

// /**
//  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
//  * @version $Revision: 1 $
//  */
// public class CachedRealm extends AbstractExtendableRevisioned {

//     protected String name;
//     protected String displayName;
//     protected String displayNameHtml;
//     protected boolean enabled;
//     protected SslRequired sslRequired;
//     protected boolean registrationAllowed;
//     protected boolean registrationEmailAsUsername;
//     protected boolean rememberMe;
//     protected boolean verifyEmail;
//     protected boolean loginWithEmailAllowed;
//     protected boolean duplicateEmailsAllowed;
//     protected boolean resetPasswordAllowed;
//     protected boolean identityFederationEnabled;
//     protected boolean editUsernameAllowed;
//     //--- brute force settings
//     protected boolean bruteForceProtected;
//     protected boolean permanentLockout;
//     protected int maxFailureWaitSeconds;
//     protected int minimumQuickLoginWaitSeconds;
//     protected int waitIncrementSeconds;
//     protected long quickLoginCheckMilliSeconds;
//     protected int maxDeltaTimeSeconds;
//     protected int failureFactor;
//     //--- end brute force settings

//     protected String defaultSignatureAlgorithm;
//     protected boolean revokeRefreshToken;
//     protected int refreshTokenMaxReuse;
//     protected int ssoSessionIdleTimeout;
//     protected int ssoSessionMaxLifespan;
//     protected int ssoSessionIdleTimeoutRememberMe;
//     protected int ssoSessionMaxLifespanRememberMe;
//     protected int offlineSessionIdleTimeout;
//     // KEYCLOAK-7688 Offline Session Max for Offline Token
//     protected boolean offlineSessionMaxLifespanEnabled;
//     protected int offlineSessionMaxLifespan;
//     protected int accessTokenLifespan;
//     protected int accessTokenLifespanForImplicitFlow;
//     protected int accessCodeLifespan;
//     protected int accessCodeLifespanUserAction;
//     protected int accessCodeLifespanLogin;
//     protected int actionTokenGeneratedByAdminLifespan;
//     protected int actionTokenGeneratedByUserLifespan;
//     protected int notBefore;
//     protected PasswordPolicy passwordPolicy;
//     protected OTPPolicy otpPolicy;

//     protected String loginTheme;
//     protected String accountTheme;
//     protected String adminTheme;
//     protected String emailTheme;
//     protected String masterAdminClient;

//     protected List<RequiredCredentialModel> requiredCredentials;
//     protected MultivaluedHashMap<String, ComponentModel> componentsByParent = new MultivaluedHashMap<>();
//     protected MultivaluedHashMap<String, ComponentModel> componentsByParentAndType = new MultivaluedHashMap<>();
//     protected Map<String, ComponentModel> components = new HashMap<>();
//     protected List<IdentityProviderModel> identityProviders;

//     protected Map<String, String> browserSecurityHeaders;
//     protected Map<String, String> smtpConfig;
//     protected Map<String, AuthenticationFlowModel> authenticationFlows = new HashMap<>();
//     protected List<AuthenticationFlowModel> authenticationFlowList;
//     protected Map<String, AuthenticatorConfigModel> authenticatorConfigs = new HashMap<>();
//     protected Map<String, RequiredActionProviderModel> requiredActionProviders = new HashMap<>();
//     protected List<RequiredActionProviderModel> requiredActionProviderList;
//     protected Map<String, RequiredActionProviderModel> requiredActionProvidersByAlias = new HashMap<>();
//     protected MultivaluedHashMap<String, AuthenticationExecutionModel> authenticationExecutions = new MultivaluedHashMap<>();
//     protected Map<String, AuthenticationExecutionModel> executionsById = new HashMap<>();

//     protected AuthenticationFlowModel browserFlow;
//     protected AuthenticationFlowModel registrationFlow;
//     protected AuthenticationFlowModel directGrantFlow;
//     protected AuthenticationFlowModel resetCredentialsFlow;
//     protected AuthenticationFlowModel clientAuthenticationFlow;
//     protected AuthenticationFlowModel dockerAuthenticationFlow;

//     protected boolean eventsEnabled;
//     protected long eventsExpiration;
//     protected Set<String> eventsListeners;
//     protected Set<String> enabledEventTypes;
//     protected boolean adminEventsEnabled;
//     protected Set<String> adminEnabledEventOperations = new HashSet<String>();
//     protected boolean adminEventsDetailsEnabled;
//     protected List<String> defaultRoles;
//     private boolean allowUserManagedAccess;

//     public Set<IdentityProviderMapperModel> getIdentityProviderMapperSet() {
//         return identityProviderMapperSet;
//     }

//     protected List<String> defaultGroups = new LinkedList<String>();
//     protected List<String> clientScopes = new LinkedList<>();
//     protected List<String> defaultDefaultClientScopes = new LinkedList<>();
//     protected List<String> optionalDefaultClientScopes = new LinkedList<>();
//     protected boolean internationalizationEnabled;
//     protected Set<String> supportedLocales;
//     protected String defaultLocale;
//     protected MultivaluedHashMap<String, IdentityProviderMapperModel> identityProviderMappers = new MultivaluedHashMap<>();
//     protected Set<IdentityProviderMapperModel> identityProviderMapperSet;

//     protected Map<String, String> attributes;

//     private Map<String, Integer> userActionTokenLifespans;

//     public CachedRealm(Long revision, RealmModel model) {
//         super(revision, model.getId());
//         name = model.getName();
//         displayName = model.getDisplayName();
//         displayNameHtml = model.getDisplayNameHtml();
//         enabled = model.isEnabled();
//         allowUserManagedAccess = model.isUserManagedAccessAllowed();
//         sslRequired = model.getSslRequired();
//         registrationAllowed = model.isRegistrationAllowed();
//         registrationEmailAsUsername = model.isRegistrationEmailAsUsername();
//         rememberMe = model.isRememberMe();
//         verifyEmail = model.isVerifyEmail();
//         loginWithEmailAllowed = model.isLoginWithEmailAllowed();
//         duplicateEmailsAllowed = model.isDuplicateEmailsAllowed();
//         resetPasswordAllowed = model.isResetPasswordAllowed();
//         identityFederationEnabled = model.isIdentityFederationEnabled();
//         editUsernameAllowed = model.isEditUsernameAllowed();
//         //--- brute force settings
//         bruteForceProtected = model.isBruteForceProtected();
//         permanentLockout = model.isPermanentLockout();
//         maxFailureWaitSeconds = model.getMaxFailureWaitSeconds();
//         minimumQuickLoginWaitSeconds = model.getMinimumQuickLoginWaitSeconds();
//         waitIncrementSeconds = model.getWaitIncrementSeconds();
//         quickLoginCheckMilliSeconds = model.getQuickLoginCheckMilliSeconds();
//         maxDeltaTimeSeconds = model.getMaxDeltaTimeSeconds();
//         failureFactor = model.getFailureFactor();
//         //--- end brute force settings

//         defaultSignatureAlgorithm = model.getDefaultSignatureAlgorithm();
//         revokeRefreshToken = model.isRevokeRefreshToken();
//         refreshTokenMaxReuse = model.getRefreshTokenMaxReuse();
//         ssoSessionIdleTimeout = model.getSsoSessionIdleTimeout();
//         ssoSessionMaxLifespan = model.getSsoSessionMaxLifespan();
//         ssoSessionIdleTimeoutRememberMe = model.getSsoSessionIdleTimeoutRememberMe();
//         ssoSessionMaxLifespanRememberMe = model.getSsoSessionMaxLifespanRememberMe();
//         offlineSessionIdleTimeout = model.getOfflineSessionIdleTimeout();
//         // KEYCLOAK-7688 Offline Session Max for Offline Token
//         offlineSessionMaxLifespanEnabled = model.isOfflineSessionMaxLifespanEnabled();
//         offlineSessionMaxLifespan = model.getOfflineSessionMaxLifespan();
//         accessTokenLifespan = model.getAccessTokenLifespan();
//         accessTokenLifespanForImplicitFlow = model.getAccessTokenLifespanForImplicitFlow();
//         accessCodeLifespan = model.getAccessCodeLifespan();
//         accessCodeLifespanUserAction = model.getAccessCodeLifespanUserAction();
//         accessCodeLifespanLogin = model.getAccessCodeLifespanLogin();
//         actionTokenGeneratedByAdminLifespan = model.getActionTokenGeneratedByAdminLifespan();
//         actionTokenGeneratedByUserLifespan = model.getActionTokenGeneratedByUserLifespan();
//         notBefore = model.getNotBefore();
//         passwordPolicy = model.getPasswordPolicy();
//         otpPolicy = model.getOTPPolicy();

//         loginTheme = model.getLoginTheme();
//         accountTheme = model.getAccountTheme();
//         adminTheme = model.getAdminTheme();
//         emailTheme = model.getEmailTheme();

//         requiredCredentials = model.getRequiredCredentials();
//         userActionTokenLifespans = Collections.unmodifiableMap(new HashMap<>(model.getUserActionTokenLifespans()));

//         this.identityProviders = new ArrayList<>();

//         for (IdentityProviderModel identityProviderModel : model.getIdentityProviders()) {
//             this.identityProviders.add(new IdentityProviderModel(identityProviderModel));
//         }
//         this.identityProviders = Collections.unmodifiableList(this.identityProviders);

//         this.identityProviderMapperSet = model.getIdentityProviderMappers();
//         for (IdentityProviderMapperModel mapper : identityProviderMapperSet) {
//             identityProviderMappers.add(mapper.getIdentityProviderAlias(), mapper);
//         }



//         smtpConfig = model.getSmtpConfig();
//         browserSecurityHeaders = model.getBrowserSecurityHeaders();

//         eventsEnabled = model.isEventsEnabled();
//         eventsExpiration = model.getEventsExpiration();
//         eventsListeners = model.getEventsListeners();
//         enabledEventTypes = model.getEnabledEventTypes();

//         adminEventsEnabled = model.isAdminEventsEnabled();
//         adminEventsDetailsEnabled = model.isAdminEventsDetailsEnabled();

//         defaultRoles = model.getDefaultRoles();
//         ClientModel masterAdminClient = model.getMasterAdminClient();
//         this.masterAdminClient = (masterAdminClient != null) ? masterAdminClient.getId() : null;

//         cacheClientScopes(model);

//         internationalizationEnabled = model.isInternationalizationEnabled();
//         supportedLocales = model.getSupportedLocales();
//         defaultLocale = model.getDefaultLocale();
//         authenticationFlowList = model.getAuthenticationFlows();
//         for (AuthenticationFlowModel flow : authenticationFlowList) {
//             this.authenticationFlows.put(flow.getId(), flow);
//             authenticationExecutions.put(flow.getId(), new LinkedList<AuthenticationExecutionModel>());
//             for (AuthenticationExecutionModel execution : model.getAuthenticationExecutions(flow.getId())) {
//                 authenticationExecutions.add(flow.getId(), execution);
//                 executionsById.put(execution.getId(), execution);
//             }
//         }

//         for (AuthenticatorConfigModel authenticator : model.getAuthenticatorConfigs()) {
//             authenticatorConfigs.put(authenticator.getId(), authenticator);
//         }
//         requiredActionProviderList = model.getRequiredActionProviders();
//         for (RequiredActionProviderModel action : requiredActionProviderList) {
//             this.requiredActionProviders.put(action.getId(), action);
//             requiredActionProvidersByAlias.put(action.getAlias(), action);
//         }

//         for (GroupModel group : model.getDefaultGroups()) {
//             defaultGroups.add(group.getId());
//         }

//         browserFlow = model.getBrowserFlow();
//         registrationFlow = model.getRegistrationFlow();
//         directGrantFlow = model.getDirectGrantFlow();
//         resetCredentialsFlow = model.getResetCredentialsFlow();
//         clientAuthenticationFlow = model.getClientAuthenticationFlow();
//         dockerAuthenticationFlow = model.getDockerAuthenticationFlow();

//         for (ComponentModel component : model.getComponents()) {
//             componentsByParentAndType.add(component.getParentId() + component.getProviderType(), component);
//         }
//         for (ComponentModel component : model.getComponents()) {
//             componentsByParent.add(component.getParentId(), component);
//         }
//         for (ComponentModel component : model.getComponents()) {
//             components.put(component.getId(), component);
//         }

//         try {
//             attributes = model.getAttributes();
//         } catch (UnsupportedOperationException ex) {
//         }

//     }

//     protected void cacheClientScopes(RealmModel model) {
//         for (ClientScopeModel clientScope : model.getClientScopes()) {
//             clientScopes.add(clientScope.getId());
//         }
//         for (ClientScopeModel clientScope : model.getDefaultClientScopes(true)) {
//             defaultDefaultClientScopes.add(clientScope.getId());
//         }
//         for (ClientScopeModel clientScope : model.getDefaultClientScopes(false)) {
//             optionalDefaultClientScopes.add(clientScope.getId());
//         }
//     }

//     public String getMasterAdminClient() {
//         return masterAdminClient;
//     }

//     public String getName() {
//         return name;
//     }

//     public String getDisplayName() {
//         return displayName;
//     }

//     public String getDisplayNameHtml() {
//         return displayNameHtml;
//     }

//     public List<String> getDefaultRoles() {
//         return defaultRoles;
//     }

//     public boolean isEnabled() {
//         return enabled;
//     }

//     public SslRequired getSslRequired() {
//         return sslRequired;
//     }

//     public boolean isRegistrationAllowed() {
//         return registrationAllowed;
//     }

//     public boolean isRegistrationEmailAsUsername() {
//         return registrationEmailAsUsername;
//     }

//     public boolean isRememberMe() {
//         return this.rememberMe;
//     }

//     public boolean isBruteForceProtected() {
//         return bruteForceProtected;
//     }

//     public boolean isPermanentLockout() {
//         return permanentLockout;
//     }

//     public int getMaxFailureWaitSeconds() {
//         return this.maxFailureWaitSeconds;
//     }

//     public int getWaitIncrementSeconds() {
//         return this.waitIncrementSeconds;
//     }

//     public int getMinimumQuickLoginWaitSeconds() {
//         return this.minimumQuickLoginWaitSeconds;
//     }

//     public long getQuickLoginCheckMilliSeconds() {
//         return quickLoginCheckMilliSeconds;
//     }

//     public int getMaxDeltaTimeSeconds() {
//         return maxDeltaTimeSeconds;
//     }

//     public int getFailureFactor() {
//         return failureFactor;
//     }

//     public boolean isVerifyEmail() {
//         return verifyEmail;
//     }
    
//     public boolean isLoginWithEmailAllowed() {
//         return loginWithEmailAllowed;
//     }
    
//     public boolean isDuplicateEmailsAllowed() {
//         return duplicateEmailsAllowed;
//     }

//     public boolean isResetPasswordAllowed() {
//         return resetPasswordAllowed;
//     }

//     public boolean isEditUsernameAllowed() {
//         return editUsernameAllowed;
//     }

//     public String getDefaultSignatureAlgorithm() {
//         return defaultSignatureAlgorithm;
//     }

//     public boolean isRevokeRefreshToken() {
//         return revokeRefreshToken;
//     }

//     public int getRefreshTokenMaxReuse() {
//         return refreshTokenMaxReuse;
//     }

//     public int getSsoSessionIdleTimeout() {
//         return ssoSessionIdleTimeout;
//     }

//     public int getSsoSessionMaxLifespan() {
//         return ssoSessionMaxLifespan;
//     }

//     public int getSsoSessionIdleTimeoutRememberMe() {
//         return ssoSessionIdleTimeoutRememberMe;
//     }

//     public int getSsoSessionMaxLifespanRememberMe() {
//         return ssoSessionMaxLifespanRememberMe;
//     }

//     public int getOfflineSessionIdleTimeout() {
//         return offlineSessionIdleTimeout;
//     }

//     // KEYCLOAK-7688 Offline Session Max for Offline Token
//     public boolean isOfflineSessionMaxLifespanEnabled() {
//         return offlineSessionMaxLifespanEnabled;
//     }

//     public int getOfflineSessionMaxLifespan() {
//         return offlineSessionMaxLifespan;
//     }

//     public int getAccessTokenLifespan() {
//         return accessTokenLifespan;
//     }

//     public int getAccessTokenLifespanForImplicitFlow() {
//         return accessTokenLifespanForImplicitFlow;
//     }

//     public int getAccessCodeLifespan() {
//         return accessCodeLifespan;
//     }

//     public int getAccessCodeLifespanUserAction() {
//         return accessCodeLifespanUserAction;
//     }

//     public Map<String, Integer> getUserActionTokenLifespans() {
//         return userActionTokenLifespans;
//     }

//     public int getAccessCodeLifespanLogin() {
//         return accessCodeLifespanLogin;
//     }

//     public int getActionTokenGeneratedByAdminLifespan() {
//         return actionTokenGeneratedByAdminLifespan;
//     }

//     public int getActionTokenGeneratedByUserLifespan() {
//         return actionTokenGeneratedByUserLifespan;
//     }

//     /**
//      * This method is supposed to return user lifespan based on the action token ID
//      * provided. If nothing is provided, it will return the default lifespan.
//      * @param actionTokenId
//      * @return lifespan
//      */
//     public int getActionTokenGeneratedByUserLifespan(String actionTokenId) {
//         if (actionTokenId == null || this.userActionTokenLifespans.get(actionTokenId) == null)
//             return getActionTokenGeneratedByUserLifespan();
//         return this.userActionTokenLifespans.get(actionTokenId);
//     }

//     public List<RequiredCredentialModel> getRequiredCredentials() {
//         return requiredCredentials;
//     }

//     public PasswordPolicy getPasswordPolicy() {
//         return passwordPolicy;
//     }

//     public boolean isIdentityFederationEnabled() {
//         return identityFederationEnabled;
//     }

//     public Map<String, String> getSmtpConfig() {
//         return smtpConfig;
//     }

//     public Map<String, String> getBrowserSecurityHeaders() {
//         return browserSecurityHeaders;
//     }

//     public String getLoginTheme() {
//         return loginTheme;
//     }

//     public String getAccountTheme() {
//         return accountTheme;
//     }

//     public String getAdminTheme() {
//         return this.adminTheme;
//     }

//     public String getEmailTheme() {
//         return emailTheme;
//     }

//     public int getNotBefore() {
//         return notBefore;
//     }

//     public boolean isEventsEnabled() {
//         return eventsEnabled;
//     }

//     public long getEventsExpiration() {
//         return eventsExpiration;
//     }

//     public Set<String> getEventsListeners() {
//         return eventsListeners;
//     }

//     public Set<String> getEnabledEventTypes() {
//         return enabledEventTypes;
//     }

//     public boolean isAdminEventsEnabled() {
//         return adminEventsEnabled;
//     }

//     public Set<String> getAdminEnabledEventOperations() {
//         return adminEnabledEventOperations;
//     }

//     public boolean isAdminEventsDetailsEnabled() {
//         return adminEventsDetailsEnabled;
//     }

//     public List<IdentityProviderModel> getIdentityProviders() {
//         return identityProviders;
//     }

//     public boolean isInternationalizationEnabled() {
//         return internationalizationEnabled;
//     }

//     public Set<String> getSupportedLocales() {
//         return supportedLocales;
//     }

//     public String getDefaultLocale() {
//         return defaultLocale;
//     }

//     public MultivaluedHashMap<String, IdentityProviderMapperModel> getIdentityProviderMappers() {
//         return identityProviderMappers;
//     }

//     public Map<String, AuthenticationFlowModel> getAuthenticationFlows() {
//         return authenticationFlows;
//     }

//     public Map<String, AuthenticatorConfigModel> getAuthenticatorConfigs() {
//         return authenticatorConfigs;
//     }

//     public MultivaluedHashMap<String, AuthenticationExecutionModel> getAuthenticationExecutions() {
//         return authenticationExecutions;
//     }

//     public Map<String, AuthenticationExecutionModel> getExecutionsById() {
//         return executionsById;
//     }

//     public Map<String, RequiredActionProviderModel> getRequiredActionProviders() {
//         return requiredActionProviders;
//     }

//     public Map<String, RequiredActionProviderModel> getRequiredActionProvidersByAlias() {
//         return requiredActionProvidersByAlias;
//     }

//     public OTPPolicy getOtpPolicy() {
//         return otpPolicy;
//     }

//     public AuthenticationFlowModel getBrowserFlow() {
//         return browserFlow;
//     }

//     public AuthenticationFlowModel getRegistrationFlow() {
//         return registrationFlow;
//     }

//     public AuthenticationFlowModel getDirectGrantFlow() {
//         return directGrantFlow;
//     }

//     public AuthenticationFlowModel getResetCredentialsFlow() {
//         return resetCredentialsFlow;
//     }

//     public AuthenticationFlowModel getClientAuthenticationFlow() {
//         return clientAuthenticationFlow;
//     }

//     public AuthenticationFlowModel getDockerAuthenticationFlow() {
//         return dockerAuthenticationFlow;
//     }

//     public List<String> getDefaultGroups() {
//         return defaultGroups;
//     }

//     public List<String> getClientScopes() {
//         return clientScopes;
//     }

//     public List<String> getDefaultDefaultClientScopes() {
//         return defaultDefaultClientScopes;
//     }

//     public List<String> getOptionalDefaultClientScopes() {
//         return optionalDefaultClientScopes;
//     }

//     public List<AuthenticationFlowModel> getAuthenticationFlowList() {
//         return authenticationFlowList;
//     }

//     public List<RequiredActionProviderModel> getRequiredActionProviderList() {
//         return requiredActionProviderList;
//     }

//     public MultivaluedHashMap<String, ComponentModel> getComponentsByParent() {
//         return componentsByParent;
//     }

//     public MultivaluedHashMap<String, ComponentModel> getComponentsByParentAndType() {
//         return componentsByParentAndType;
//     }

//     public Map<String, ComponentModel> getComponents() {
//         return components;
//     }

//     public String getAttribute(String name) {
//         return attributes != null ? attributes.get(name) : null;
//     }

//     public Integer getAttribute(String name, Integer defaultValue) {
//         String v = getAttribute(name);
//         return v != null ? Integer.parseInt(v) : defaultValue;
//     }

//     public Long getAttribute(String name, Long defaultValue) {
//         String v = getAttribute(name);
//         return v != null ? Long.parseLong(v) : defaultValue;
//     }

//     public Boolean getAttribute(String name, Boolean defaultValue) {
//         String v = getAttribute(name);
//         return v != null ? Boolean.parseBoolean(v) : defaultValue;
//     }

//     public Map<String, String> getAttributes() {
//         return attributes;
//     }

//     public boolean isAllowUserManagedAccess() {
//         return allowUserManagedAccess;
//     }
// }