diff --git a/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java b/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java index 4e2b52a3cf3..0dd4aa70191 100644 --- a/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java +++ b/services/src/main/java/org/keycloak/credential/UserCredentialStoreManager.java @@ -125,7 +125,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser if (toValidate.isEmpty()) return true; - List credentialProviders = getCredentialProviders(realm, CredentialInputValidator.class); + List credentialProviders = getCredentialProviders(session, realm, CredentialInputValidator.class); for (CredentialInputValidator validator : credentialProviders) { validate(realm, user, toValidate, validator); @@ -143,7 +143,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser } } - protected List getCredentialProviders(RealmModel realm, Class type) { + public static List getCredentialProviders(KeycloakSession session, RealmModel realm, Class type) { List list = new LinkedList(); for (ProviderFactory f : session.getKeycloakSessionFactory().getProviderFactories(CredentialProvider.class)) { if (!Types.supports(type, f, CredentialProviderFactory.class)) continue; @@ -173,7 +173,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser } } - List credentialProviders = getCredentialProviders(realm, CredentialInputUpdater.class); + List credentialProviders = getCredentialProviders(session, realm, CredentialInputUpdater.class); for (CredentialInputUpdater updater : credentialProviders) { if (!updater.supportsCredentialType(input.getType())) continue; if (updater.updateCredential(realm, user, input)) return; @@ -201,7 +201,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser } - List credentialProviders = getCredentialProviders(realm, CredentialInputUpdater.class); + List credentialProviders = getCredentialProviders(session, realm, CredentialInputUpdater.class); for (CredentialInputUpdater updater : credentialProviders) { if (!updater.supportsCredentialType(credentialType)) continue; updater.disableCredentialType(realm, user, credentialType); @@ -231,7 +231,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser } - List credentialProviders = getCredentialProviders(realm, CredentialInputUpdater.class); + List credentialProviders = getCredentialProviders(session, realm, CredentialInputUpdater.class); for (CredentialInputUpdater updater : credentialProviders) { types.addAll(updater.getDisableableCredentialTypes(realm, user)); } @@ -264,7 +264,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser @Override public boolean isConfiguredLocally(RealmModel realm, UserModel user, String type) { - List credentialProviders = getCredentialProviders(realm, CredentialInputValidator.class); + List credentialProviders = getCredentialProviders(session, realm, CredentialInputValidator.class); for (CredentialInputValidator validator : credentialProviders) { if (validator.supportsCredentialType(type) && validator.isConfiguredFor(realm, user, type)) { return true; @@ -284,7 +284,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser } } - list = getCredentialProviders(realm, CredentialAuthentication.class); + list = getCredentialProviders(session, realm, CredentialAuthentication.class); for (CredentialAuthentication auth : list) { if (auth.supportsCredentialAuthenticationFor(input.getType())) { CredentialValidationOutput output = auth.authenticate(realm, input); @@ -297,7 +297,7 @@ public class UserCredentialStoreManager implements UserCredentialManager, OnUser @Override public void onCache(RealmModel realm, CachedUserModel user, UserModel delegate) { - List credentialProviders = getCredentialProviders(realm, OnUserCache.class); + List credentialProviders = getCredentialProviders(session, realm, OnUserCache.class); for (OnUserCache validator : credentialProviders) { validator.onCache(realm, user, delegate); } 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 a2b2636c1c6..abd41f39422 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 @@ -24,6 +24,8 @@ import org.junit.Test; import org.keycloak.OAuth2Constants; import org.keycloak.common.util.Time; import org.keycloak.component.ComponentModel; +import org.keycloak.credential.CredentialAuthentication; +import org.keycloak.credential.UserCredentialStoreManager; import org.keycloak.models.GroupModel; import org.keycloak.models.KeycloakSession; import org.keycloak.models.RealmModel; @@ -137,6 +139,19 @@ public class UserStorageTest { Thread.sleep(100000000); } + /** + * KEYCLOAK-4013 + * + * @throws Exception + */ + @Test + public void testCast() throws Exception { + KeycloakSession session = keycloakRule.startSession(); + List list = UserCredentialStoreManager.getCredentialProviders(session, null, CredentialAuthentication.class); + keycloakRule.stopSession(session, true); + + } + @Test public void testDailyEviction() { Calendar cal = Calendar.getInstance();