keycloak-uncached

finish cache policy

10/25/2016 6:13:22 PM

Details

diff --git a/server-spi/src/main/java/org/keycloak/component/ComponentFactory.java b/server-spi/src/main/java/org/keycloak/component/ComponentFactory.java
index cda4a34..c388756 100644
--- a/server-spi/src/main/java/org/keycloak/component/ComponentFactory.java
+++ b/server-spi/src/main/java/org/keycloak/component/ComponentFactory.java
@@ -20,8 +20,12 @@ import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.RealmModel;
 import org.keycloak.provider.ConfiguredProvider;
 import org.keycloak.provider.Provider;
+import org.keycloak.provider.ProviderConfigProperty;
 import org.keycloak.provider.ProviderFactory;
 
+import java.util.Collections;
+import java.util.List;
+
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
@@ -41,4 +45,15 @@ public interface ComponentFactory<CreatedType, ProviderType extends Provider> ex
 
     }
 
+    /**
+     * These are config properties that are common across all implementation of this component type
+     *
+     * @return
+     */
+    default
+    List<ProviderConfigProperty> getCommonProviderConfigProperties() {
+        return Collections.EMPTY_LIST;
+    }
+
+
 }
diff --git a/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java b/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java
index 6f8757f..fc4616b 100644
--- a/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java
+++ b/server-spi/src/main/java/org/keycloak/models/utils/ComponentUtil.java
@@ -53,11 +53,17 @@ public class ComponentUtil {
 
     private static Map<String, ProviderConfigProperty> getComponentConfigProperties(KeycloakSession session, String providerType, String providerId) {
         try {
-            List<ProviderConfigProperty> l = getComponentFactory(session, providerType, providerId).getConfigProperties();
+            ComponentFactory componentFactory = getComponentFactory(session, providerType, providerId);
+            List<ProviderConfigProperty> l = componentFactory.getConfigProperties();
             Map<String, ProviderConfigProperty> properties = new HashMap<>();
             for (ProviderConfigProperty p : l) {
                 properties.put(p.getName(), p);
             }
+            List<ProviderConfigProperty> common = componentFactory.getCommonProviderConfigProperties();
+            for (ProviderConfigProperty p : common) {
+                properties.put(p.getName(), p);
+            }
+
             return properties;
         } catch (Exception e) {
             throw new RuntimeException(e);
diff --git a/server-spi/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java b/server-spi/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
index 82bd50a..ef8828c 100755
--- a/server-spi/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
+++ b/server-spi/src/main/java/org/keycloak/models/utils/ModelToRepresentation.java
@@ -385,6 +385,10 @@ public class ModelToRepresentation {
         Map<String, String> attributes = realm.getAttributes();
         rep.setAttributes(attributes);
 
+        if (!internal) {
+            rep = StripSecretsUtils.strip(rep);
+        }
+
         return rep;
     }
 
diff --git a/server-spi/src/main/java/org/keycloak/models/utils/StripSecretsUtils.java b/server-spi/src/main/java/org/keycloak/models/utils/StripSecretsUtils.java
index 306d367..26f5adc 100644
--- a/server-spi/src/main/java/org/keycloak/models/utils/StripSecretsUtils.java
+++ b/server-spi/src/main/java/org/keycloak/models/utils/StripSecretsUtils.java
@@ -50,6 +50,7 @@ public class StripSecretsUtils {
                     next.setValue(Collections.singletonList(ComponentRepresentation.SECRET_VALUE));
                 }
             } else {
+                itr.remove();
             }
         }
         return rep;
diff --git a/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderFactory.java b/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderFactory.java
index dd4df81..121a5ea 100755
--- a/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderFactory.java
+++ b/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderFactory.java
@@ -25,8 +25,10 @@ import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.KeycloakSessionFactory;
 import org.keycloak.models.RealmModel;
 import org.keycloak.provider.ProviderConfigProperty;
+import org.keycloak.provider.ProviderConfigurationBuilder;
 
 import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 
 /**
@@ -95,4 +97,15 @@ public interface UserStorageProviderFactory<T extends UserStorageProvider> exten
     default void onCreate(KeycloakSession session, RealmModel realm, ComponentModel model) {
 
     }
+
+    /**
+     * configuration properties that are common across all UserStorageProvider implementations
+     *
+     * @return
+     */
+    @Override
+    default
+    List<ProviderConfigProperty> getCommonProviderConfigProperties() {
+        return UserStorageProviderSpi.commonConfig();
+    }
 }
diff --git a/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderSpi.java b/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderSpi.java
index 4027ea3..625adeb 100755
--- a/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderSpi.java
+++ b/server-spi/src/main/java/org/keycloak/storage/UserStorageProviderSpi.java
@@ -18,9 +18,14 @@
 package org.keycloak.storage;
 
 import org.keycloak.provider.Provider;
+import org.keycloak.provider.ProviderConfigProperty;
+import org.keycloak.provider.ProviderConfigurationBuilder;
 import org.keycloak.provider.ProviderFactory;
 import org.keycloak.provider.Spi;
 
+import java.util.Collections;
+import java.util.List;
+
 /**
  * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
  */
@@ -46,4 +51,39 @@ public class UserStorageProviderSpi implements Spi {
         return UserStorageProviderFactory.class;
     }
 
+    private static final List<ProviderConfigProperty> commonConfig;
+
+    static {
+        List<ProviderConfigProperty> config = ProviderConfigurationBuilder.create()
+                .property()
+                .name("priority").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("fullSyncPeriod").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("changedSyncPeriod").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("lastSync").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("importEnabled").type(ProviderConfigProperty.BOOLEAN_TYPE).add()
+                .property()
+                .name("cachePolicy").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("maxLifespan").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("evictionHour").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("evictionMinute").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("evictionDay").type(ProviderConfigProperty.STRING_TYPE).add()
+                .property()
+                .name("cacheInvalidBefore").type(ProviderConfigProperty.STRING_TYPE).add()
+                .build();
+        commonConfig = Collections.unmodifiableList(config);
+    }
+
+    public static List<ProviderConfigProperty> commonConfig() {
+        return commonConfig;
+
+    }
+
 }
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java
index a2b2636..6e79d69 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java
@@ -132,7 +132,7 @@ public class UserStorageTest {
 
     }
 
-    //@Test
+    @Test
     public void testIDE() throws Exception {
         Thread.sleep(100000000);
     }
diff --git a/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties b/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
index 4943c38..313db82 100644
--- a/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
+++ b/themes/src/main/resources/theme/base/admin/messages/admin-messages_en.properties
@@ -1188,7 +1188,7 @@ Thursday=Thursday
 Friday=Friday
 Saturday=Saturday
 
-user-strage-cache=Cache Settings
+user-storage-cache-policy=Cache Settings
 userStorage.cachePolicy=Cache Policy
 userStorage.cachePolicy.option.DEFAULT=DEFAULT
 userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-generic.html b/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-generic.html
index e9d7202..0108cde 100755
--- a/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-generic.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-generic.html
@@ -203,6 +203,7 @@
                             <option value="59">59</option>
                         </select>
                     </div>
+                    </div>
                     <kc-tooltip>{{:: 'userStorage.cachePolicy.evictionMinute.tooltip' | translate}}</kc-tooltip>
             </div>
             <div class="form-group clearfix" data-ng-show="instance.config['cachePolicy'][0] == 'MAX_LIFESPAN'">