federation refactor
This commit is contained in:
1 parent
ba8fe1ddaf
commit
8ea0d19d2f
38 files changed
+903
-3822
No files matched your search
@@ -3,8 +3,9 @@ package org.keycloak.models.jpa;
|
||||
import org.keycloak.models.ApplicationModel;
|
||||
import org.keycloak.models.AuthenticationProviderModel;
|
||||
import org.keycloak.models.ClientModel;
|
||||
import org.keycloak.models.UserFederationProvider;
|
||||
import org.keycloak.models.UserFederationProviderModel;
|
||||
import org.keycloak.models.jpa.entities.FederationProviderEntity;
|
||||
import org.keycloak.models.jpa.entities.UserFederationProviderEntity;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.OAuthClientModel;
|
||||
import org.keycloak.models.PasswordPolicy;
|
||||
@@ -30,6 +31,7 @@ import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -728,61 +730,104 @@ public class RealmAdapter implements RealmModel {
|
||||
|
||||
@Override
|
||||
public List<UserFederationProviderModel> getUserFederationProviders() {
|
||||
List<FederationProviderEntity> entities = realm.getFederationProviders();
|
||||
List<FederationProviderEntity> copy = new ArrayList<FederationProviderEntity>();
|
||||
for (FederationProviderEntity entity : entities) {
|
||||
List<UserFederationProviderEntity> entities = realm.getUserFederationProviders();
|
||||
List<UserFederationProviderEntity> copy = new ArrayList<UserFederationProviderEntity>();
|
||||
for (UserFederationProviderEntity entity : entities) {
|
||||
copy.add(entity);
|
||||
|
||||
}
|
||||
Collections.sort(copy, new Comparator<FederationProviderEntity>() {
|
||||
Collections.sort(copy, new Comparator<UserFederationProviderEntity>() {
|
||||
|
||||
@Override
|
||||
public int compare(FederationProviderEntity o1, FederationProviderEntity o2) {
|
||||
public int compare(UserFederationProviderEntity o1, UserFederationProviderEntity o2) {
|
||||
return o1.getPriority() - o2.getPriority();
|
||||
}
|
||||
|
||||
});
|
||||
List<UserFederationProviderModel> result = new ArrayList<UserFederationProviderModel>();
|
||||
for (FederationProviderEntity entity : copy) {
|
||||
result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig()));
|
||||
for (UserFederationProviderEntity entity : copy) {
|
||||
result.add(new UserFederationProviderModel(entity.getId(), entity.getProviderName(), entity.getConfig(), entity.getPriority()));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserFederationProviders(List<UserFederationProviderModel> providers) {
|
||||
List<FederationProviderEntity> newEntities = new ArrayList<FederationProviderEntity>();
|
||||
int counter = 1;
|
||||
for (UserFederationProviderModel model : providers) {
|
||||
FederationProviderEntity entity = new FederationProviderEntity();
|
||||
entity.setId(KeycloakModelUtils.generateId());
|
||||
entity.setRealm(realm);
|
||||
entity.setProviderName(model.getProviderName());
|
||||
entity.setConfig(model.getConfig());
|
||||
entity.setPriority(counter++);
|
||||
newEntities.add(entity);
|
||||
}
|
||||
|
||||
// Remove all existing first
|
||||
Collection<FederationProviderEntity> existing = realm.getFederationProviders();
|
||||
Collection<FederationProviderEntity> copy = new ArrayList<FederationProviderEntity>(existing);
|
||||
for (FederationProviderEntity apToRemove : copy) {
|
||||
existing.remove(apToRemove);
|
||||
em.remove(apToRemove);
|
||||
}
|
||||
|
||||
em.flush();
|
||||
|
||||
// Now create all new providers
|
||||
for (FederationProviderEntity apToAdd : newEntities) {
|
||||
existing.add(apToAdd);
|
||||
em.persist(apToAdd);
|
||||
}
|
||||
|
||||
public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority) {
|
||||
String id = KeycloakModelUtils.generateId();
|
||||
UserFederationProviderEntity entity = new UserFederationProviderEntity();
|
||||
entity.setId(id);
|
||||
entity.setRealm(realm);
|
||||
entity.setProviderName(providerName);
|
||||
entity.setConfig(config);
|
||||
entity.setPriority(priority);
|
||||
em.persist(entity);
|
||||
realm.getUserFederationProviders().add(entity);
|
||||
em.flush();
|
||||
return new UserFederationProviderModel(entity.getId(), providerName, config, priority);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeUserFederationProvider(UserFederationProviderModel provider) {
|
||||
UserFederationProviderEntity entity = null;
|
||||
Iterator<UserFederationProviderEntity> it = realm.getUserFederationProviders().iterator();
|
||||
while (it.hasNext()) {
|
||||
if (entity.getId().equals(provider.getId())) {
|
||||
it.remove();
|
||||
em.remove(entity);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserFederationProviders(List<UserFederationProviderModel> providers) {
|
||||
|
||||
Iterator<UserFederationProviderEntity> it = realm.getUserFederationProviders().iterator();
|
||||
while (it.hasNext()) {
|
||||
UserFederationProviderEntity entity = it.next();
|
||||
boolean found = false;
|
||||
for (UserFederationProviderModel model : providers) {
|
||||
if (entity.getId().equals(model.getId())) {
|
||||
entity.setConfig(model.getConfig());
|
||||
entity.setPriority(model.getPriority());
|
||||
entity.setProviderName(model.getProviderName());
|
||||
entity.setPriority(model.getPriority());
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (found) continue;
|
||||
it.remove();
|
||||
em.remove(entity);
|
||||
}
|
||||
|
||||
List<UserFederationProviderModel> add = new LinkedList<UserFederationProviderModel>();
|
||||
for (UserFederationProviderModel model : providers) {
|
||||
boolean found = false;
|
||||
for (UserFederationProviderEntity entity : realm.getUserFederationProviders()) {
|
||||
if (entity.getId().equals(model.getId())) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) add.add(model);
|
||||
}
|
||||
|
||||
for (UserFederationProviderModel model : providers) {
|
||||
UserFederationProviderEntity entity = new UserFederationProviderEntity();
|
||||
if (model.getId() != null) entity.setId(model.getId());
|
||||
else entity.setId(KeycloakModelUtils.generateId());
|
||||
entity.setConfig(model.getConfig());
|
||||
entity.setPriority(model.getPriority());
|
||||
entity.setProviderName(model.getProviderName());
|
||||
entity.setPriority(model.getPriority());
|
||||
em.persist(entity);
|
||||
realm.getUserFederationProviders().add(entity);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RoleModel getRole(String name) {
|
||||
|
||||
@@ -117,7 +117,7 @@ public class RealmEntity {
|
||||
|
||||
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true)
|
||||
@JoinTable(name="FED_PROVIDERS")
|
||||
List<FederationProviderEntity> federationProviders = new ArrayList<FederationProviderEntity>();
|
||||
List<UserFederationProviderEntity> userFederationProviders = new ArrayList<UserFederationProviderEntity>();
|
||||
|
||||
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true)
|
||||
@JoinTable(name="REALM_APPLICATION", joinColumns={ @JoinColumn(name="APPLICATION_ID") }, inverseJoinColumns={ @JoinColumn(name="REALM_ID") })
|
||||
@@ -513,12 +513,12 @@ public class RealmEntity {
|
||||
this.masterAdminApp = masterAdminApp;
|
||||
}
|
||||
|
||||
public List<FederationProviderEntity> getFederationProviders() {
|
||||
return federationProviders;
|
||||
public List<UserFederationProviderEntity> getUserFederationProviders() {
|
||||
return userFederationProviders;
|
||||
}
|
||||
|
||||
public void setFederationProviders(List<FederationProviderEntity> federationProviders) {
|
||||
this.federationProviders = federationProviders;
|
||||
public void setUserFederationProviders(List<UserFederationProviderEntity> userFederationProviders) {
|
||||
this.userFederationProviders = userFederationProviders;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -19,8 +19,8 @@ import java.util.Map;
|
||||
* @author <a href="mailto:bburke@redhat.com">Bill Burke</a>
|
||||
*/
|
||||
@Entity
|
||||
@Table(name="FEDERATION_PROVIDER")
|
||||
public class FederationProviderEntity {
|
||||
@Table(name="USER_FEDERATION_PROVIDER")
|
||||
public class UserFederationProviderEntity {
|
||||
|
||||
@Id
|
||||
@Column(name="ID", length = 36)
|
||||
@@ -38,7 +38,7 @@ public class FederationProviderEntity {
|
||||
@ElementCollection
|
||||
@MapKeyColumn(name="name")
|
||||
@Column(name="value")
|
||||
@CollectionTable(name="FEDERATION_PROVIDER_CONFIG")
|
||||
@CollectionTable(name="USER_FEDERATION_CONFIG")
|
||||
private Map<String, String> config;
|
||||
|
||||
public String getId() {
|
||||
Reference in new issue
Block a user