From f8a78d556503ca331cfa82ff627e2876bd83aec1 Mon Sep 17 00:00:00 2001 From: Bill Burke Date: Tue, 25 Oct 2016 16:13:22 -0400 Subject: [PATCH] finish cache policy --- .../keycloak/component/ComponentFactory.java | 15 +++++++ .../keycloak/models/utils/ComponentUtil.java | 8 +++- .../models/utils/ModelToRepresentation.java | 4 ++ .../models/utils/StripSecretsUtils.java | 1 + .../storage/UserStorageProviderFactory.java | 13 ++++++ .../storage/UserStorageProviderSpi.java | 40 +++++++++++++++++++ .../federation/storage/UserStorageTest.java | 2 +- .../messages/admin-messages_en.properties | 2 +- .../partials/user-storage-generic.html | 1 + 9 files changed, 83 insertions(+), 3 deletions(-) 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 cda4a342c8..c38875636b 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 Bill Burke * @version $Revision: 1 $ @@ -41,4 +45,15 @@ public interface ComponentFactory ex } + /** + * These are config properties that are common across all implementation of this component type + * + * @return + */ + default + List 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 6f8757f072..fc4616b24d 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 getComponentConfigProperties(KeycloakSession session, String providerType, String providerId) { try { - List l = getComponentFactory(session, providerType, providerId).getConfigProperties(); + ComponentFactory componentFactory = getComponentFactory(session, providerType, providerId); + List l = componentFactory.getConfigProperties(); Map properties = new HashMap<>(); for (ProviderConfigProperty p : l) { properties.put(p.getName(), p); } + List 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 82bd50a169..ef8828c352 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 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 306d367f58..26f5adc5a9 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 dd4df811c2..121a5ea367 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 exten default void onCreate(KeycloakSession session, RealmModel realm, ComponentModel model) { } + + /** + * configuration properties that are common across all UserStorageProvider implementations + * + * @return + */ + @Override + default + List 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 4027ea3942..625adeb23a 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 Stian Thorgersen */ @@ -46,4 +51,39 @@ public class UserStorageProviderSpi implements Spi { return UserStorageProviderFactory.class; } + private static final List commonConfig; + + static { + List 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 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 a2b2636c1c..6e79d69aa1 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 4943c38469..313db82a31 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 e9d7202215..0108cdeb69 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 @@ + {{:: 'userStorage.cachePolicy.evictionMinute.tooltip' | translate}}