diff --git a/CHANGELOG.md b/CHANGELOG.md index 139efa68f418..7189c4fe6441 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Our Keycloak version is working well with PostgreSQL database. For using other S - Fix bugs in AutoUpdated schedule task - Correct query for autoUpdated IdP - Do not change lastRefreshTime during IdP update +- Improvements and logs in SAML federation task execution ## [22.0.10-1.7] - 2024-07-10 diff --git a/model/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java b/model/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java index b069550fdaac..587f7d2fb797 100755 --- a/model/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java +++ b/model/infinispan/src/main/java/org/keycloak/models/cache/infinispan/RealmAdapter.java @@ -17,6 +17,7 @@ package org.keycloak.models.cache.infinispan; +import org.jboss.logging.Logger; import org.keycloak.Config; import org.keycloak.common.enums.SslRequired; import org.keycloak.component.ComponentModel; @@ -38,6 +39,9 @@ * @version $Revision: 1 $ */ public class RealmAdapter implements CachedRealmModel { + + protected static final Logger logger = Logger.getLogger(RealmAdapter.class); + protected CachedRealm cached; protected RealmCacheSession cacheSession; protected volatile RealmModel updated; @@ -977,6 +981,7 @@ public void taskExecutionFederation(FederationModel federationModel, List { - FederationEntity fed = new FederationEntity(); - fed.setInternalId(id); - return fed; - }).collect(Collectors.toSet())); - } - session.getKeycloakSessionFactory().publish(new RealmModel.IdentityProviderUpdatedEvent() { @Override @@ -1394,6 +1381,24 @@ public KeycloakSession getKeycloakSession() { return session; } }); + + } + + /** + * method for update when federation task is executed + * @param identityProvider + */ + private void updateIdentityProviderFromFed(IdentityProviderModel identityProvider) { + + IdentityProviderEntity entity =(IdentityProviderEntity) em.find(IdentityProviderEntity.class,identityProvider.getInternalId()); + modelToEntity(entity,identityProvider); + if (identityProvider.getFederations() != null) { + entity.setFederations(identityProvider.getFederations().stream().map(id -> { + FederationEntity fed = new FederationEntity(); + fed.setInternalId(id); + return fed; + }).collect(Collectors.toSet())); + } } private FederationModel entityToModel(FederationEntity entity) { @@ -1552,8 +1557,9 @@ public void updateSAMLFederation(FederationModel federationModel) { @Override public void taskExecutionFederation(FederationModel federationModel, List addIdPs, List updatedIdPs, List removedIdPs) { + logger.info("Strating updating in database the SAML federation (id): " + federationModel.getAlias()); addIdPs.stream().forEach(idp -> { - this.addIdentityProvider(idp); + this.addIdentityProviderMain(idp); //add mappers from federation for new identity providers federationModel.getFederationMapperModels().stream().map(mapper -> new IdentityProviderMapperModel(mapper, idp.getAlias())).forEach(mapper ->{ try { @@ -1572,7 +1578,10 @@ public void taskExecutionFederation(FederationModel federationModel, List