Skip to content

Commit

Permalink
remove sorting IdPs in cache , improve nd extra logs for federation t…
Browse files Browse the repository at this point in the history
…ask execution
  • Loading branch information
cgeorgilakis-grnet committed Sep 6, 2024
1 parent ddafe77 commit 68eeea5
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 20 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -977,6 +981,7 @@ public void taskExecutionFederation(FederationModel federationModel, List<Identi
updated.taskExecutionFederation(federationModel, addIdPs, updatedIdPs, removedIdPs);
//invalidate cache for users related with removed IdPs
session.users().preRemove(removedIdPs);
logger.info("finish updating cache for the SAML federation (id): " + federationModel.getAlias());
}

@Override
Expand Down
47 changes: 28 additions & 19 deletions model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -1295,6 +1295,11 @@ public IdentityProviderModel getIdentityProviderByAlias(String alias) {

@Override
public void addIdentityProvider(IdentityProviderModel identityProvider) {
addIdentityProviderMain(identityProvider);
em.flush();
}

private void addIdentityProviderMain(IdentityProviderModel identityProvider) {
IdentityProviderEntity entity = new IdentityProviderEntity();

if (identityProvider.getInternalId() == null) {
Expand Down Expand Up @@ -1359,24 +1364,6 @@ public void updateIdentityProvider(IdentityProviderModel identityProvider) {

em.flush();

}

/**
* 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()));
}

session.getKeycloakSessionFactory().publish(new RealmModel.IdentityProviderUpdatedEvent() {

@Override
Expand All @@ -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) {
Expand Down Expand Up @@ -1552,8 +1557,9 @@ public void updateSAMLFederation(FederationModel federationModel) {
@Override
public void taskExecutionFederation(FederationModel federationModel, List<IdentityProviderModel> addIdPs, List<IdentityProviderModel> updatedIdPs, List<String> 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 {
Expand All @@ -1572,7 +1578,10 @@ public void taskExecutionFederation(FederationModel federationModel, List<Identi
this.removeFederationIdp(federationModel, alias);
});
}
logger.info("Finish updating IdPs of the SAML federation (id): " + federationModel.getAlias());
this.updateSAMLFederation(federationModel);
em.flush();
logger.info("Finish updating in database the SAML federation (id): " + federationModel.getAlias());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ public void enableUpdateTask() {
@Override
public synchronized void updateSamlEntities() {

logger.info("Started updating the SAML federation (id): " + model.getInternalId());
logger.info("Started updating the SAML federation (id): " + model.getAlias());

RealmModel realm = session.realms().getRealm(realmId);

Expand Down Expand Up @@ -353,6 +353,7 @@ public synchronized void updateSamlEntities() {
}
});

logger.info("finish parsing the SAML federation (id): " + model.getAlias());
model.setLastMetadataRefreshTimestamp(new Date().getTime());
realm.taskExecutionFederation(model, addedIdps, updatedIdps, existingIdps);

Expand Down

0 comments on commit 68eeea5

Please sign in to comment.