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'">