keycloak-aplcache

Make 3 more tests pass.

3/3/2015 5:14:57 PM

Details

diff --git a/model/file/src/main/java/org/keycloak/models/file/adapter/ClientAdapter.java b/model/file/src/main/java/org/keycloak/models/file/adapter/ClientAdapter.java
index 5b2625f..9271644 100755
--- a/model/file/src/main/java/org/keycloak/models/file/adapter/ClientAdapter.java
+++ b/model/file/src/main/java/org/keycloak/models/file/adapter/ClientAdapter.java
@@ -24,15 +24,22 @@ import org.keycloak.models.RoleModel;
 import org.keycloak.models.entities.ClientEntity;
 
 import java.util.ArrayList;
+import java.util.Collection;
 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;
+import org.keycloak.models.ClientIdentityProviderMappingModel;
+import org.keycloak.models.ProtocolMapperModel;
+import org.keycloak.models.entities.ClientIdentityProviderMappingEntity;
+import org.keycloak.models.entities.ProtocolMapperEntity;
 
 /**
  * ClientModel for JSON persistence.
- * 
+ *
  * @author Stan Silvert ssilvert@redhat.com (C) 2015 Red Hat Inc.
  */
 public abstract class ClientAdapter implements ClientModel {
@@ -275,4 +282,86 @@ public abstract class ClientAdapter implements ClientModel {
         copy.putAll(clientEntity.getAttributes());
         return copy;
     }
+
+    @Override
+    public Set<ProtocolMapperModel> getProtocolMappers() {
+        Set<ProtocolMapperModel> result = new HashSet<ProtocolMapperModel>();
+        for (String id : clientEntity.getProtocolMappers()) {
+            ProtocolMapperModel model = getRealm().getProtocolMapperById(id);
+            if (model != null) result.add(model);
+        }
+        return result;
+    }
+
+    @Override
+    public void addProtocolMappers(Set<String> mapperIds) {
+        clientEntity.getProtocolMappers().addAll(mapperIds);
+    }
+
+    @Override
+    public void removeProtocolMappers(Set<String> mapperIds) {
+        clientEntity.getProtocolMappers().removeAll(mapperIds);
+    }
+
+    @Override
+    public void setProtocolMappers(Set<String> mapperIds) {
+        clientEntity.getProtocolMappers().clear();
+        clientEntity.getProtocolMappers().addAll(mapperIds);
+    }
+
+    @Override
+    public void updateAllowedIdentityProviders(List<ClientIdentityProviderMappingModel> identityProviders) {
+        List<ClientIdentityProviderMappingEntity> stored = new ArrayList<ClientIdentityProviderMappingEntity>();
+
+        for (ClientIdentityProviderMappingModel model : identityProviders) {
+            ClientIdentityProviderMappingEntity entity = new ClientIdentityProviderMappingEntity();
+
+            entity.setId(model.getIdentityProvider());
+            entity.setRetrieveToken(model.isRetrieveToken());
+            stored.add(entity);
+        }
+
+        clientEntity.setIdentityProviders(stored);
+    }
+
+    @Override
+    public List<ClientIdentityProviderMappingModel> getIdentityProviders() {
+        List<ClientIdentityProviderMappingModel> models = new ArrayList<ClientIdentityProviderMappingModel>();
+
+        for (ClientIdentityProviderMappingEntity entity : clientEntity.getIdentityProviders()) {
+            ClientIdentityProviderMappingModel model = new ClientIdentityProviderMappingModel();
+
+            model.setIdentityProvider(entity.getId());
+            model.setRetrieveToken(entity.isRetrieveToken());
+
+            models.add(model);
+        }
+
+        return models;
+    }
+
+    @Override
+    public boolean hasIdentityProvider(String providerId) {
+        for (ClientIdentityProviderMappingEntity identityProviderMappingModel : clientEntity.getIdentityProviders()) {
+            String identityProvider = identityProviderMappingModel.getId();
+
+            if (identityProvider.equals(providerId)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean isAllowedRetrieveTokenFromIdentityProvider(String providerId) {
+        for (ClientIdentityProviderMappingEntity identityProviderMappingModel : clientEntity.getIdentityProviders()) {
+            if (identityProviderMappingModel.getId().equals(providerId)) {
+                return identityProviderMappingModel.isRetrieveToken();
+            }
+        }
+
+        return false;
+    }
+
 }
diff --git a/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java b/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java
index b6f8414..b26da21 100755
--- a/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java
+++ b/model/file/src/main/java/org/keycloak/models/file/adapter/RealmAdapter.java
@@ -46,11 +46,16 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.keycloak.models.ClaimTypeModel;
 import org.keycloak.models.ModelDuplicateException;
+import org.keycloak.models.ProtocolMapperModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.models.entities.ApplicationEntity;
+import org.keycloak.models.entities.ClaimTypeEntity;
 import org.keycloak.models.entities.ClientEntity;
+import org.keycloak.models.entities.IdentityProviderEntity;
 import org.keycloak.models.entities.OAuthClientEntity;
+import org.keycloak.models.entities.ProtocolMapperEntity;
 import org.keycloak.models.entities.RealmEntity;
 import org.keycloak.models.entities.RoleEntity;
 import org.keycloak.models.file.InMemoryModel;
@@ -841,15 +846,31 @@ public class RealmAdapter implements RealmModel {
     }
 
     @Override
+    public IdentityProviderModel getIdentityProviderById(String identityProviderId) {
+        for (IdentityProviderModel identityProviderModel : getIdentityProviders()) {
+            if (identityProviderModel.getId().equals(identityProviderId)) {
+                return identityProviderModel;
+            }
+        }
+
+        return null;
+    }
+
+    @Override
     public void addIdentityProvider(IdentityProviderModel identityProvider) {
         if (identityProvider.getId() == null) throw new NullPointerException("identityProvider.getId() == null");
-
-        allIdProviders.put(identityProvider.getId(), identityProvider);
+        if (identityProvider.getInternalId() == null) identityProvider.setInternalId(KeycloakModelUtils.generateId());
+        allIdProviders.put(identityProvider.getInternalId(), identityProvider);
     }
 
     @Override
     public void removeIdentityProviderById(String providerId) {
-        allIdProviders.remove(providerId);
+        for (IdentityProviderModel provider : getIdentityProviders()) {
+            if (provider.getId().equals(providerId)) {
+                allIdProviders.remove(provider.getInternalId());
+                break;
+            }
+        }
     }
 
     @Override
@@ -857,7 +878,7 @@ public class RealmAdapter implements RealmModel {
         removeIdentityProviderById(identityProvider.getId());
         addIdentityProvider(identityProvider);
     }
-    //------------------------------------------------------------------------------
+
     @Override
     public UserFederationProviderModel addUserFederationProvider(String providerName, Map<String, String> config, int priority, String displayName, int fullSyncPeriod, int changedSyncPeriod, int lastSync) {
         UserFederationProviderEntity entity = new UserFederationProviderEntity();
@@ -1012,7 +1033,172 @@ public class RealmAdapter implements RealmModel {
     @Override
     public boolean isIdentityFederationEnabled() {
         //TODO: not sure if we will support identity federation storage for file
-        return false;
+        return true;
+    }
+
+    @Override
+    public Set<ProtocolMapperModel> getProtocolMappers() {
+        Set<ProtocolMapperModel> result = new HashSet<ProtocolMapperModel>();
+        for (ProtocolMapperEntity entity : realm.getProtocolMappers()) {
+            ProtocolMapperModel mapping = new ProtocolMapperModel();
+            mapping.setId(entity.getId());
+            mapping.setName(entity.getName());
+            mapping.setProtocol(entity.getProtocol());
+            mapping.setAppliedByDefault(entity.isAppliedByDefault());
+            mapping.setConsentRequired(entity.isConsentRequired());
+            mapping.setConsentText(entity.getConsentText());
+            Map<String, String> config = new HashMap<String, String>();
+            if (entity.getConfig() != null) {
+                config.putAll(entity.getConfig());
+            }
+            mapping.setConfig(config);
+        }
+        return result;
+    }
+
+    @Override
+    public ProtocolMapperModel addProtocolMapper(ProtocolMapperModel model) {
+        if (getProtocolMapperByName(model.getProtocol(), model.getName()) != null) {
+            throw new RuntimeException("protocol mapper name must be unique per protocol");
+        }
+        ProtocolMapperEntity entity = new ProtocolMapperEntity();
+        entity.setId(KeycloakModelUtils.generateId());
+        entity.setProtocol(model.getProtocol());
+        entity.setName(model.getName());
+        entity.setAppliedByDefault(model.isAppliedByDefault());
+        entity.setProtocolMapper(model.getProtocolMapper());
+        entity.setConfig(model.getConfig());
+        entity.setConsentRequired(model.isConsentRequired());
+        entity.setConsentText(model.getConsentText());
+        realm.getProtocolMappers().add(entity);
+        return entityToModel(entity);
+    }
+
+    @Override
+    public void removeProtocolMapper(ProtocolMapperModel mapping) {
+        for (ProtocolMapperEntity entity : realm.getProtocolMappers()) {
+            if (entity.getId().equals(mapping.getId())) {
+                realm.getProtocolMappers().remove(entity);
+                break;
+            }
+        }
+
+    }
+
+    protected ProtocolMapperEntity getProtocolMapperyEntityById(String id) {
+        for (ProtocolMapperEntity entity : realm.getProtocolMappers()) {
+            if (entity.getId().equals(id)) {
+                return entity;
+            }
+        }
+        return null;
+
+    }
+
+    protected ProtocolMapperEntity getProtocolMapperEntityByName(String protocol, String name) {
+        for (ProtocolMapperEntity entity : realm.getProtocolMappers()) {
+            if (entity.getProtocol().equals(protocol) && entity.getName().equals(name)) {
+                return entity;
+            }
+        }
+        return null;
+
+    }
+
+    @Override
+    public void updateProtocolMapper(ProtocolMapperModel mapping) {
+        ProtocolMapperEntity entity = getProtocolMapperyEntityById(mapping.getId());
+        entity.setAppliedByDefault(mapping.isAppliedByDefault());
+        entity.setProtocolMapper(mapping.getProtocolMapper());
+        entity.setConsentRequired(mapping.isConsentRequired());
+        entity.setConsentText(mapping.getConsentText());
+        if (entity.getConfig() != null) {
+            entity.getConfig().clear();
+            entity.getConfig().putAll(mapping.getConfig());
+        } else {
+            entity.setConfig(mapping.getConfig());
+        }
+    }
+
+    @Override
+    public ProtocolMapperModel getProtocolMapperById(String id) {
+        ProtocolMapperEntity entity = getProtocolMapperyEntityById(id);
+        if (entity == null) return null;
+        return entityToModel(entity);
+    }
+
+    @Override
+    public ProtocolMapperModel getProtocolMapperByName(String protocol, String name) {
+        ProtocolMapperEntity entity = getProtocolMapperEntityByName(protocol, name);
+        if (entity == null) return null;
+        return entityToModel(entity);
+    }
+
+    protected ProtocolMapperModel entityToModel(ProtocolMapperEntity entity) {
+        ProtocolMapperModel mapping = new ProtocolMapperModel();
+        mapping.setId(entity.getId());
+        mapping.setName(entity.getName());
+        mapping.setProtocol(entity.getProtocol());
+        mapping.setAppliedByDefault(entity.isAppliedByDefault());
+        mapping.setProtocolMapper(entity.getProtocolMapper());
+        mapping.setConsentRequired(entity.isConsentRequired());
+        mapping.setConsentText(entity.getConsentText());
+        Map<String, String> config = new HashMap<String, String>();
+        if (entity.getConfig() != null) config.putAll(entity.getConfig());
+        mapping.setConfig(config);
+        return mapping;
+    }
+
+    @Override
+    public Set<ClaimTypeModel> getClaimTypes() {
+        Set<ClaimTypeModel> result = new HashSet<ClaimTypeModel>();
+        for (ClaimTypeEntity entity : realm.getClaimTypes()) {
+            result.add(new ClaimTypeModel(entity.getId(), entity.getName(), entity.isBuiltIn(), entity.getType()));
+        }
+       return result;
+    }
+
+    @Override
+    public ClaimTypeModel addClaimType(ClaimTypeModel model) {
+        String id = model.getId() == null ? KeycloakModelUtils.generateId() : model.getId();
+        ClaimTypeModel claim = new ClaimTypeModel(id, model.getName(), model.isBuiltIn(), model.getType());
+        ClaimTypeEntity entity = new ClaimTypeEntity();
+        entity.setId(claim.getId());
+        entity.setType(model.getType());
+        entity.setBuiltIn(model.isBuiltIn());
+        entity.setName(model.getName());
+        realm.getClaimTypes().add(entity);
+        return claim;
+    }
+
+    @Override
+    public void removeClaimType(ClaimTypeModel claimType) {
+        for (ClaimTypeEntity entity : realm.getClaimTypes()) {
+            if (entity.getId().equals(claimType.getId())) {
+                realm.getClaimTypes().remove(entity);
+                break;
+            }
+        }
+    }
+
+    @Override
+    public ClaimTypeModel getClaimType(String name) {
+        for (ClaimTypeModel claimType : getClaimTypes()) {
+            if (claimType.getName().equals(name)) return claimType;
+        }
+        return null;
+    }
+
+    @Override
+    public void updateClaimType(ClaimTypeModel claimType) {
+        for (ClaimTypeEntity entity : realm.getClaimTypes()) {
+            if (entity.getId().equals(claimType.getId())) {
+                entity.setName(claimType.getName());
+                entity.setBuiltIn(claimType.isBuiltIn());
+                entity.setType(claimType.getType());
+                break;
+            }
+        }
     }
 
     @Override
diff --git a/model/file/src/main/java/org/keycloak/models/file/adapter/UserAdapter.java b/model/file/src/main/java/org/keycloak/models/file/adapter/UserAdapter.java
index eb19db8..e6d08c7 100755
--- a/model/file/src/main/java/org/keycloak/models/file/adapter/UserAdapter.java
+++ b/model/file/src/main/java/org/keycloak/models/file/adapter/UserAdapter.java
@@ -55,8 +55,8 @@ public class UserAdapter implements UserModel, Comparable {
     public UserAdapter(RealmModel realm, UserEntity userEntity, InMemoryModel inMemoryModel) {
         this.user = userEntity;
         this.realm = realm;
-        if (userEntity.getSocialLinks() == null) {
-            userEntity.setSocialLinks(new ArrayList<FederatedIdentityEntity>());
+        if (userEntity.getFederatedIdentities() == null) {
+            userEntity.setFederatedIdentities(new ArrayList<FederatedIdentityEntity>());
         }
         this.inMemoryModel = inMemoryModel;
     }
diff --git a/model/file/src/main/java/org/keycloak/models/file/FileRealmProviderFactory.java b/model/file/src/main/java/org/keycloak/models/file/FileRealmProviderFactory.java
index 3296743..cf7135e 100644
--- a/model/file/src/main/java/org/keycloak/models/file/FileRealmProviderFactory.java
+++ b/model/file/src/main/java/org/keycloak/models/file/FileRealmProviderFactory.java
@@ -18,6 +18,7 @@ package org.keycloak.models.file;
 
 import org.keycloak.Config;
 import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.KeycloakSessionFactory;
 import org.keycloak.models.RealmProvider;
 import org.keycloak.models.RealmProviderFactory;
 
@@ -58,4 +59,8 @@ public class FileRealmProviderFactory implements RealmProviderFactory {
     public void close() {
     }
 
+    @Override
+    public void postInit(KeycloakSessionFactory factory) {
+    }
+
 }
diff --git a/model/file/src/main/java/org/keycloak/models/file/FileUserProvider.java b/model/file/src/main/java/org/keycloak/models/file/FileUserProvider.java
index 0406f45..099167d 100644
--- a/model/file/src/main/java/org/keycloak/models/file/FileUserProvider.java
+++ b/model/file/src/main/java/org/keycloak/models/file/FileUserProvider.java
@@ -35,6 +35,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.regex.Pattern;
 import org.keycloak.models.ApplicationModel;
+import org.keycloak.models.CredentialValidationOutput;
 import org.keycloak.models.ModelDuplicateException;
 import org.keycloak.models.entities.FederatedIdentityEntity;
 import org.keycloak.models.entities.UserEntity;
@@ -68,7 +69,7 @@ public class FileUserProvider implements UserProvider {
     public UserModel getUserByUsername(String username, RealmModel realm) {
         for (UserModel user : inMemoryModel.getUsers(realm.getId())) {
             if (user.getUsername() == null) continue;
-            if (user.getUsername().equals(username)) return user;
+            if (user.getUsername().equals(username.toLowerCase())) return user;
         }
 
         return null;
@@ -78,7 +79,7 @@ public class FileUserProvider implements UserProvider {
     public UserModel getUserByEmail(String email, RealmModel realm) {
         for (UserModel user : inMemoryModel.getUsers(realm.getId())) {
             if (user.getEmail() == null) continue;
-            if (user.getEmail().equals(email)) return user;
+            if (user.getEmail().equals(email.toLowerCase())) return user;
         }
 
         return null;
@@ -220,7 +221,7 @@ public class FileUserProvider implements UserProvider {
     public Set<FederatedIdentityModel> getFederatedIdentities(UserModel userModel, RealmModel realm) {
         UserModel user = getUserById(userModel.getId(), realm);
         UserEntity userEntity = ((UserAdapter) user).getUserEntity();
-        List<FederatedIdentityEntity> linkEntities = userEntity.getSocialLinks();
+        List<FederatedIdentityEntity> linkEntities = userEntity.getFederatedIdentities();
 
         if (linkEntities == null) {
             return Collections.EMPTY_SET;
@@ -238,7 +239,7 @@ public class FileUserProvider implements UserProvider {
     private FederatedIdentityEntity findSocialLink(UserModel userModel, String socialProvider, RealmModel realm) {
         UserModel user = getUserById(userModel.getId(), realm);
         UserEntity userEntity = ((UserAdapter) user).getUserEntity();
-        List<FederatedIdentityEntity> linkEntities = userEntity.getSocialLinks();
+        List<FederatedIdentityEntity> linkEntities = userEntity.getFederatedIdentities();
         if (linkEntities == null) {
             return null;
         }
@@ -260,10 +261,10 @@ public class FileUserProvider implements UserProvider {
 
     @Override
     public UserAdapter addUser(RealmModel realm, String id, String username, boolean addDefaultRoles) {
-        if (inMemoryModel.hasUserWithUsername(realm.getId(), username))
+        if (inMemoryModel.hasUserWithUsername(realm.getId(), username.toLowerCase()))
             throw new ModelDuplicateException("User with username " + username + " already exists in realm.");
 
-        UserAdapter userModel = addUserEntity(realm, id, username);
+        UserAdapter userModel = addUserEntity(realm, id, username.toLowerCase());
 
         if (addDefaultRoles) {
             for (String r : realm.getDefaultRoles()) {
@@ -312,14 +313,14 @@ public class FileUserProvider implements UserProvider {
         FederatedIdentityEntity federatedIdentityEntity = new FederatedIdentityEntity();
         federatedIdentityEntity.setIdentityProvider(socialLink.getIdentityProvider());
         federatedIdentityEntity.setUserId(socialLink.getUserId());
-        federatedIdentityEntity.setUserName(socialLink.getUserName());
+        federatedIdentityEntity.setUserName(socialLink.getUserName().toLowerCase());
 
         //check if it already exitsts - do I need to do this?
-        for (FederatedIdentityEntity fedIdent : userEntity.getSocialLinks()) {
+        for (FederatedIdentityEntity fedIdent : userEntity.getFederatedIdentities()) {
             if (fedIdent.equals(federatedIdentityEntity)) return;
         }
 
-        userEntity.getSocialLinks().add(federatedIdentityEntity);
+        userEntity.getFederatedIdentities().add(federatedIdentityEntity);
     }
 
     @Override
@@ -331,12 +332,12 @@ public class FileUserProvider implements UserProvider {
             return false;
         }
 
-        userEntity.getSocialLinks().remove(federatedIdentityEntity);
+        userEntity.getFederatedIdentities().remove(federatedIdentityEntity);
         return true;
     }
 
     private FederatedIdentityEntity findSocialLink(UserEntity userEntity, String socialProvider) {
-        List<FederatedIdentityEntity> linkEntities = userEntity.getSocialLinks();
+        List<FederatedIdentityEntity> linkEntities = userEntity.getFederatedIdentities();
         if (linkEntities == null) {
             return null;
         }
@@ -351,7 +352,7 @@ public class FileUserProvider implements UserProvider {
 
     @Override
     public UserModel addUser(RealmModel realm, String username) {
-        return this.addUser(realm, KeycloakModelUtils.generateId(), username, true);
+        return this.addUser(realm, KeycloakModelUtils.generateId(), username.toLowerCase(), true);
     }
 
     @Override
@@ -387,4 +388,15 @@ public class FileUserProvider implements UserProvider {
     public boolean validCredentials(RealmModel realm, UserModel user, UserCredentialModel... input) {
         return CredentialValidation.validCredentials(realm, user, input);
     }
+
+    @Override
+    public void updateFederatedIdentity(RealmModel realm, UserModel federatedUser, FederatedIdentityModel federatedIdentityModel) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public CredentialValidationOutput validCredentials(RealmModel realm, UserCredentialModel... input) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
 }
diff --git a/model/file/src/main/java/org/keycloak/models/file/FileUserProviderFactory.java b/model/file/src/main/java/org/keycloak/models/file/FileUserProviderFactory.java
index 0192cda..95fac5a 100644
--- a/model/file/src/main/java/org/keycloak/models/file/FileUserProviderFactory.java
+++ b/model/file/src/main/java/org/keycloak/models/file/FileUserProviderFactory.java
@@ -18,12 +18,13 @@ package org.keycloak.models.file;
 
 import org.keycloak.Config;
 import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.KeycloakSessionFactory;
 import org.keycloak.models.UserProvider;
 import org.keycloak.models.UserProviderFactory;
 
 /**
  * UserProviderFactory for JSON persistence.
- * 
+ *
  * @author Stan Silvert ssilvert@redhat.com (C) 2015 Red Hat Inc.
  */
 public class FileUserProviderFactory implements UserProviderFactory {
@@ -46,4 +47,8 @@ public class FileUserProviderFactory implements UserProviderFactory {
     public void close() {
     }
 
+    @Override
+    public void postInit(KeycloakSessionFactory factory) {
+    }
+
 }