keycloak-aplcache
Changes
examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationFactory.java 10(+4 -6)
examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationProvider.java 19(+12 -7)
examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/ClasspathPropertiesFederationFactory.java 10(+10 -0)
examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/FilePropertiesFederationFactory.java 12(+12 -0)
examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/WritableUserModelProxy.java 7(+3 -4)
testsuite/integration/pom.xml 5(+5 -0)
Details
diff --git a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationFactory.java b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationFactory.java
index 4548c67..057ce50 100755
--- a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationFactory.java
+++ b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationFactory.java
@@ -36,21 +36,19 @@ public abstract class BasePropertiesFederationFactory implements UserFederationP
 
 
         props = new Properties();
-        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
-        if (is == null) {
-            throw new IllegalStateException("Path attribute not configured for provider");
-
-        }
+        InputStream is = getPropertiesFileStream(path);
         try {
             props.load(is);
             is.close();
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-        props.put(path, props);
+        files.put(path, props);
         return createProvider(session, model, props);
     }
 
+    protected abstract InputStream getPropertiesFileStream(String path);
+
     protected abstract BasePropertiesFederationProvider createProvider(KeycloakSession session, UserFederationProviderModel model, Properties props);
 
 
                diff --git a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationProvider.java b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationProvider.java
index 39b4d2c..6a8460e 100755
--- a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationProvider.java
+++ b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/BasePropertiesFederationProvider.java
@@ -59,7 +59,8 @@ public abstract class BasePropertiesFederationProvider implements UserFederation
         String password = properties.getProperty(username);
         if (password != null) {
             UserModel userModel = session.userStorage().addUser(realm, username);
-            userModel.updateCredential(UserCredentialModel.password(password));
+            userModel.setEnabled(true);
+            userModel.setFederationLink(model.getId());
             return userModel;
         }
         return null;
@@ -72,12 +73,16 @@ public abstract class BasePropertiesFederationProvider implements UserFederation
 
     @Override
     public List<UserModel> searchByAttributes(Map<String, String> attributes, RealmModel realm, int maxResults) {
-        if (attributes.containsKey(USERNAME)) {
-            UserModel user = getUserByUsername(realm, attributes.get(USERNAME));
-            if (user != null) {
-                List<UserModel> list = new ArrayList<UserModel>(1);
-                list.add(user);
-                return list;
+        String username = attributes.get(USERNAME);
+        if (username != null) {
+            // make sure user isn't already in storage
+            if (session.userStorage().getUserByUsername(username, realm) == null) {
+                UserModel user = getUserByUsername(realm, username);
+                if (user != null) {
+                    List<UserModel> list = new ArrayList<UserModel>(1);
+                    list.add(user);
+                    return list;
+                }
             }
         }
         return Collections.emptyList();
                diff --git a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/ClasspathPropertiesFederationFactory.java b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/ClasspathPropertiesFederationFactory.java
index 4b65685..3144c33 100755
--- a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/ClasspathPropertiesFederationFactory.java
+++ b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/ClasspathPropertiesFederationFactory.java
@@ -26,6 +26,16 @@ public class ClasspathPropertiesFederationFactory extends BasePropertiesFederati
         return new ClasspathPropertiesFederationProvider(session, model, props);
     }
 
+    protected InputStream getPropertiesFileStream(String path) {
+        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
+        if (is == null) {
+            throw new IllegalStateException("Path not found for properties file");
+
+        }
+        return is;
+    }
+
+
 
     @Override
     public String getId() {
                diff --git a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/FilePropertiesFederationFactory.java b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/FilePropertiesFederationFactory.java
index ae39ce6..80906a3 100755
--- a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/FilePropertiesFederationFactory.java
+++ b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/FilePropertiesFederationFactory.java
@@ -3,6 +3,9 @@ package org.keycloak.examples.federation.properties;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.UserFederationProviderModel;
 
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
 import java.util.Properties;
 
 /**
@@ -15,6 +18,15 @@ public class FilePropertiesFederationFactory extends BasePropertiesFederationFac
     protected BasePropertiesFederationProvider createProvider(KeycloakSession session, UserFederationProviderModel model, Properties props) {
         return new FilePropertiesFederationProvider(session, props, model);
     }
+    protected InputStream getPropertiesFileStream(String path) {
+        try {
+            return new FileInputStream(path);
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
 
 
     @Override
                diff --git a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/WritableUserModelProxy.java b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/WritableUserModelProxy.java
index 5230c18..300f292 100755
--- a/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/WritableUserModelProxy.java
+++ b/examples/providers/federation-provider/src/main/java/org/keycloak/examples/federation/properties/WritableUserModelProxy.java
@@ -51,16 +51,15 @@ public class WritableUserModelProxy extends UserModelDelegate {
     @Override
     public void updateCredential(UserCredentialModel cred) {
         if (cred.getType().equals(UserCredentialModel.PASSWORD)) {
-
-        } else {
-            super.updateCredential(cred);
             synchronized (provider.getProperties()) {
                 if (!provider.getProperties().containsKey(delegate.getUsername())) {
                     throw new IllegalStateException("no user of that in properties file");
                 }
-                provider.getProperties().put(delegate.getUsername(), cred.getValue());
+                provider.getProperties().setProperty(delegate.getUsername(), cred.getValue());
                 provider.save();
             }
+        } else {
+            super.updateCredential(cred);
         }
     }
 }
                diff --git a/examples/providers/federation-provider/src/main/resources/test2-users.properties b/examples/providers/federation-provider/src/main/resources/test2-users.properties
new file mode 100755
index 0000000..6623bcc
--- /dev/null
+++ b/examples/providers/federation-provider/src/main/resources/test2-users.properties
@@ -0,0 +1,3 @@
+#
+#Sun Aug 03 10:52:57 EDT 2014
+belichick=superbowl
                diff --git a/examples/providers/federation-provider/src/main/resources/test-users.properties b/examples/providers/federation-provider/src/main/resources/test-users.properties
new file mode 100755
index 0000000..aea1071
--- /dev/null
+++ b/examples/providers/federation-provider/src/main/resources/test-users.properties
@@ -0,0 +1 @@
+tbrady=superbowl
\ No newline at end of file
                diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js
index 66441dd..02ecbb7 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/users.js
@@ -164,8 +164,8 @@ module.controller('UserListCtrl', function($scope, realm, User) {
     }
 
     $scope.searchQuery = function() {
+        console.log("query.search: " + $scope.query.search);
         $scope.searchLoaded = false;
-        $scope.currentSearch = $scope.search;
 
         $scope.users = User.query($scope.query, function() {
             $scope.searchLoaded = true;
                diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html
index 8f1a5d0..aa1356e 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-list.html
@@ -24,7 +24,7 @@
                             Icon: search
                         </button>
                     </div>
-                    <span><span>or</span><button class="kc-link" ng-click="search = null; searchQuery()">View all users</button></span>
+                    <span><span>or</span><button class="kc-link" ng-click="query.search = null; searchQuery()">View all users</button></span>
                     <div class="pull-right">
                         <a class="btn btn-primary" href="#/create/user/{{realm.realm}}">Add User</a>
                     </div>
                diff --git a/services/src/main/java/org/keycloak/services/resources/AccountService.java b/services/src/main/java/org/keycloak/services/resources/AccountService.java
index b02ff59..17147fb 100755
--- a/services/src/main/java/org/keycloak/services/resources/AccountService.java
+++ b/services/src/main/java/org/keycloak/services/resources/AccountService.java
@@ -473,6 +473,7 @@ public class AccountService {
         try {
             session.users().updateCredential(realm, user, UserCredentialModel.password(passwordNew));
          } catch (Exception ape) {
+            logger.error("Failed to update password", ape);
             return account.setError(ape.getMessage()).createResponse(AccountPages.PASSWORD);
         }
 
                testsuite/integration/pom.xml 5(+5 -0)
diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml
index 5ca079e..8b3e58c 100755
--- a/testsuite/integration/pom.xml
+++ b/testsuite/integration/pom.xml
@@ -125,6 +125,11 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>federation-properties-example</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>org.jboss.logging</groupId>
             <artifactId>jboss-logging</artifactId>
         </dependency>