Map Store Removal: Rename Legacy* classes (#26273)

Closes #24105

Signed-off-by: Martin Kanis <mkanis@redhat.com>
This commit is contained in:
Martin Kanis 2024-01-23 14:50:31 +01:00 committed by GitHub
parent 5bf2d4b6ec
commit 84603a9363
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
71 changed files with 209 additions and 245 deletions

View file

@ -251,8 +251,8 @@ jobs:
with:
job-id: jdk-integration-tests-${{ matrix.os }}-${{ matrix.dist }}-${{ matrix.version }}
legacy-store-integration-tests:
name: Legacy Store IT
store-integration-tests:
name: Store IT
needs: [build, conditional]
if: needs.conditional.outputs.ci-store == 'true'
runs-on: ubuntu-latest
@ -283,13 +283,13 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
with:
job-name: Legacy Store IT
job-name: Store IT
- name: Surefire reports
if: always()
uses: ./.github/actions/archive-surefire-reports
with:
job-id: legacy-store-integration-tests-${{ matrix.db }}
job-id: store-integration-tests-${{ matrix.db }}
store-model-tests:
name: Store Model Tests
@ -325,7 +325,7 @@ jobs:
job-id: store-model-tests
clustering-integration-tests:
name: Legacy Clustering IT
name: Clustering IT
needs: build
runs-on: ubuntu-latest
timeout-minutes: 35
@ -351,7 +351,7 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
with:
job-name: Legacy Clustering IT
job-name: Clustering IT
- name: Surefire reports
if: always()
@ -650,7 +650,7 @@ jobs:
- quarkus-unit-tests
- quarkus-integration-tests
- jdk-integration-tests
- legacy-store-integration-tests
- store-integration-tests
- store-model-tests
- clustering-integration-tests
- fips-unit-tests

View file

@ -224,3 +224,11 @@ PUT /admin/realms/{realm}/users/{id}/execute-actions-email
= Removal of the deprecated mode for SAML encryption
The compatibility mode for SAML encryption introduced in version 21 is now removed. The system property `keycloak.saml.deprecated.encryption` is not managed anymore by the server. The clients which still used the old signing key for encryption should update it from the new IDP configuration metadata.
= Renaming JPA provider configuration options for migration
After removal of the Map Store the following configuration options were renamed:
* `spi-connections-jpa-legacy-initialize-empty` to `spi-connections-jpa-quarkus-initialize-empty`
* `spi-connections-jpa-legacy-migration-export` to `spi-connections-jpa-quarkus-migration-export`
* `spi-connections-jpa-legacy-migration-strategy` to `spi-connections-jpa-quarkus-migration-strategy`

View file

@ -31,7 +31,7 @@ default `connections-jpa` provider:
[source,bash]
----
kc.[sh|bat] start --spi-connections-jpa-legacy-migration-strategy=manual
kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-strategy=manual
----
When you start the server with this configuration it checks if the database needs to be migrated.
@ -42,7 +42,7 @@ default `connections-jpa` provider:
[source,bash]
----
kc.[sh|bat] start --spi-connections-jpa-legacy-migration-export=<path>/<file.sql>
kc.[sh|bat] start --spi-connections-jpa-quarkus-migration-export=<path>/<file.sql>
----
For further details on how to apply this file to the database, see the documentation for the relational database you're using.

View file

@ -247,16 +247,16 @@ The maximum timeout for this lock is 900 seconds. If a node waits on this lock f
To setup the JPA migrationStrategy (manual/update/validate) you should setup JPA provider as follows:
.Setting the `migration-strategy` for the `quarkus` provider of the `connections-jpa` SPI
<@kc.start parameters="--spi-connections-jpa-legacy-migration-strategy=manual"/>
<@kc.start parameters="--spi-connections-jpa-quarkus-migration-strategy=manual"/>
If you want to get a SQL file for DB initialization, too, you have to add this additional SPI initializeEmpty (true/false):
.Setting the `initialize-empty` for the `quarkus` provider of the `connections-jpa` SPI
<@kc.start parameters="--spi-connections-jpa-legacy-initialize-empty=false"/>
<@kc.start parameters="--spi-connections-jpa-quarkus-initialize-empty=false"/>
In the same way the migrationExport to point to a specific file and location:
.Setting the `migration-export` for the `quarkus` provider of the `connections-jpa` SPI
<@kc.start parameters="--spi-connections-jpa-legacy-migration-export=<path>/<file.sql>"/>
<@kc.start parameters="--spi-connections-jpa-quarkus-migration-export=<path>/<file.sql>"/>
</@tmpl.guide>

View file

@ -24,7 +24,7 @@ import org.keycloak.credential.CredentialAuthentication;
import org.keycloak.credential.CredentialInput;
import org.keycloak.credential.CredentialInputUpdater;
import org.keycloak.credential.CredentialInputValidator;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator;
import org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator;
import org.keycloak.models.CredentialValidationOutput;
@ -168,7 +168,7 @@ public class KerberosFederationProvider implements UserStorageProvider,
@Override
public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
if (!(input instanceof UserCredentialModel)) return false;
if (input.getType().equals(PasswordCredentialModel.TYPE) && !((LegacyUserCredentialManager) user.credentialManager()).isConfiguredLocally(PasswordCredentialModel.TYPE)) {
if (input.getType().equals(PasswordCredentialModel.TYPE) && !((UserCredentialManager) user.credentialManager()).isConfiguredLocally(PasswordCredentialModel.TYPE)) {
return validPassword(user.getFirstAttribute(KERBEROS_PRINCIPAL), input.getChallengeResponse());
} else {
return false; // invalid cred type

View file

@ -45,7 +45,7 @@ import org.keycloak.credential.CredentialAuthentication;
import org.keycloak.credential.CredentialInput;
import org.keycloak.credential.CredentialInputUpdater;
import org.keycloak.credential.CredentialInputValidator;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.federation.kerberos.KerberosPrincipal;
import org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator;
import org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator;
@ -68,7 +68,7 @@ import org.keycloak.policy.PasswordPolicyManagerProvider;
import org.keycloak.policy.PolicyError;
import org.keycloak.models.cache.UserCache;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.LegacyStoreManagers;
import org.keycloak.storage.StoreManagers;
import org.keycloak.storage.ReadOnlyException;
import org.keycloak.storage.StorageId;
import org.keycloak.storage.UserStoragePrivateUtil;
@ -205,7 +205,7 @@ public class LDAPStorageProvider implements UserStorageProvider,
// We need to avoid having CachedUserModel as cache is upper-layer then LDAP. Hence having CachedUserModel here may cause StackOverflowError
if (local instanceof CachedUserModel) {
LegacyStoreManagers datastoreProvider = (LegacyStoreManagers) session.getProvider(DatastoreProvider.class);
StoreManagers datastoreProvider = (StoreManagers) session.getProvider(DatastoreProvider.class);
local = datastoreProvider.userStorageManager().getUserById(realm, local.getId());
existing = userManager.getManagedProxiedUser(local.getId());
@ -841,7 +841,7 @@ public class LDAPStorageProvider implements UserStorageProvider,
@Override
public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) {
if (!(input instanceof UserCredentialModel)) return false;
if (input.getType().equals(PasswordCredentialModel.TYPE) && !((LegacyUserCredentialManager) user.credentialManager()).isConfiguredLocally(PasswordCredentialModel.TYPE)) {
if (input.getType().equals(PasswordCredentialModel.TYPE) && !((UserCredentialManager) user.credentialManager()).isConfiguredLocally(PasswordCredentialModel.TYPE)) {
return validPassword(realm, user, input.getChallengeResponse());
} else {
return false; // invalid cred type

View file

@ -27,7 +27,7 @@ import org.keycloak.models.cache.infinispan.entities.*;
import org.keycloak.models.cache.infinispan.events.*;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.LegacyStoreManagers;
import org.keycloak.storage.StoreManagers;
import org.keycloak.storage.StorageId;
import org.keycloak.storage.client.ClientStorageProviderModel;
@ -121,13 +121,13 @@ public class RealmCacheSession implements CacheRealmProvider {
protected boolean clearAll;
protected final long startupRevision;
private final LegacyStoreManagers datastoreProvider;
private final StoreManagers datastoreProvider;
public RealmCacheSession(RealmCacheManager cache, KeycloakSession session) {
this.cache = cache;
this.session = session;
this.startupRevision = cache.getCurrentCounter();
this.datastoreProvider = (LegacyStoreManagers) session.getProvider(DatastoreProvider.class);
this.datastoreProvider = (StoreManagers) session.getProvider(DatastoreProvider.class);
session.getTransactionManager().enlistPrepare(getPrepareTransaction());
session.getTransactionManager().enlistAfterCompletion(getAfterTransaction());
}

View file

@ -19,7 +19,7 @@ package org.keycloak.models.cache.infinispan;
import org.keycloak.credential.CredentialInput;
import org.keycloak.credential.CredentialModel;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
@ -27,7 +27,7 @@ import org.keycloak.models.UserModel;
/**
* @author Alexander Schwartz
*/
public abstract class SubjectCredentialManagerCacheAdapter extends LegacyUserCredentialManager {
public abstract class SubjectCredentialManagerCacheAdapter extends UserCredentialManager {
public SubjectCredentialManagerCacheAdapter(KeycloakSession session, RealmModel realm, UserModel user) {
super(session, realm, user);

View file

@ -18,7 +18,6 @@
package org.keycloak.models.cache.infinispan;
import org.keycloak.credential.CredentialModel;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.models.ClientModel;
import org.keycloak.models.GroupModel;
import org.keycloak.models.KeycloakSession;

View file

@ -56,7 +56,7 @@ import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.models.utils.ReadOnlyUserModelDelegate;
import org.keycloak.storage.CacheableStorageProviderModel;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.LegacyStoreManagers;
import org.keycloak.storage.StoreManagers;
import org.keycloak.storage.OnCreateComponent;
import org.keycloak.storage.OnUpdateComponent;
import org.keycloak.storage.StorageId;
@ -94,13 +94,13 @@ public class UserCacheSession implements UserCache, OnCreateComponent, OnUpdateC
protected Set<String> realmInvalidations = new HashSet<>();
protected Set<InvalidationEvent> invalidationEvents = new HashSet<>(); // Events to be sent across cluster
protected Map<String, UserModel> managedUsers = new HashMap<>();
private LegacyStoreManagers datastoreProvider;
private StoreManagers datastoreProvider;
public UserCacheSession(UserCacheManager cache, KeycloakSession session) {
this.cache = cache;
this.session = session;
this.startupRevision = cache.getCurrentCounter();
this.datastoreProvider = (LegacyStoreManagers) session.getProvider(DatastoreProvider.class);
this.datastoreProvider = (StoreManagers) session.getProvider(DatastoreProvider.class);
session.getTransactionManager().enlistAfterCompletion(getTransaction());
}

View file

@ -57,7 +57,7 @@ import static org.keycloak.utils.StreamsUtil.closing;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class RealmAdapter implements LegacyRealmModel, JpaModel<RealmEntity> {
public class RealmAdapter implements StorageProviderRealmModel, JpaModel<RealmEntity> {
protected static final Logger logger = Logger.getLogger(RealmAdapter.class);
protected RealmEntity realm;
protected EntityManager em;

View file

@ -19,7 +19,7 @@ package org.keycloak.models.jpa;
import org.keycloak.common.util.MultivaluedHashMap;
import org.keycloak.common.util.ObjectUtil;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.models.ClientModel;
import org.keycloak.models.GroupModel;
import org.keycloak.models.KeycloakSession;
@ -519,7 +519,7 @@ public class UserAdapter implements UserModel, JpaModel<UserEntity> {
@Override
public SubjectCredentialManager credentialManager() {
return new LegacyUserCredentialManager(session, realm, this);
return new UserCredentialManager(session, realm, this);
}

View file

@ -21,7 +21,7 @@ import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.datastore.LegacyDatastoreProvider;
import org.keycloak.storage.datastore.DefaultDatastoreProvider;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@ -30,11 +30,11 @@ import org.keycloak.storage.datastore.LegacyDatastoreProvider;
public class MigrationModelManager {
public static void migrate(KeycloakSession session) {
((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).getMigrationManager().migrate();
((DefaultDatastoreProvider) session.getProvider(DatastoreProvider.class)).getMigrationManager().migrate();
}
public static void migrateImport(KeycloakSession session, RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).getMigrationManager().migrate(realm, rep, skipUserDependent);
((DefaultDatastoreProvider) session.getProvider(DatastoreProvider.class)).getMigrationManager().migrate(realm, rep, skipUserDependent);
}
}

View file

@ -22,7 +22,7 @@ import org.keycloak.component.ComponentFactory;
import org.keycloak.migration.ModelVersion;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LDAPConstants;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.provider.ProviderFactory;
import org.keycloak.representations.idm.RealmRepresentation;
@ -53,7 +53,7 @@ public class MigrateTo1_3_0 implements Migration {
}
private void migrateLDAPProviders(KeycloakSession session, RealmModel realm) {
((LegacyRealmModel) realm).getUserStorageProvidersStream().forEachOrdered(fedProvider -> {
((StorageProviderRealmModel) realm).getUserStorageProvidersStream().forEachOrdered(fedProvider -> {
if (fedProvider.getProviderId().equals(LDAPConstants.LDAP_PROVIDER)) {
fedProvider = new UserStorageProviderModel(fedProvider); // copy don't want to muck with cache
MultivaluedHashMap<String, String> config = fedProvider.getConfig();

View file

@ -22,7 +22,7 @@ import org.keycloak.migration.ModelVersion;
import org.keycloak.models.ImpersonationConstants;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LDAPConstants;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.models.cache.UserCache;
@ -72,7 +72,7 @@ public class MigrateTo1_4_0 implements Migration {
private void migrateLDAPMappers(KeycloakSession session, RealmModel realm) {
List<String> mandatoryInLdap = Arrays.asList("username", "username-cn", "first name", "last name");
((LegacyRealmModel) realm).getUserStorageProvidersStream()
((StorageProviderRealmModel) realm).getUserStorageProvidersStream()
.filter(providerModel -> Objects.equals(providerModel.getProviderId(), LDAPConstants.LDAP_PROVIDER))
.forEachOrdered(providerModel -> realm.getComponentsStream(providerModel.getId())
.filter(mapper -> mandatoryInLdap.contains(mapper.getName()))

View file

@ -21,7 +21,7 @@ import org.keycloak.component.ComponentModel;
import org.keycloak.migration.ModelVersion;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LDAPConstants;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.RealmRepresentation;
@ -51,7 +51,7 @@ public class MigrateTo1_8_0 implements Migration {
}
protected void migrateRealm(RealmModel realm) {
((LegacyRealmModel) realm).getUserStorageProvidersStream()
((StorageProviderRealmModel) realm).getUserStorageProvidersStream()
.filter(fedProvider -> Objects.equals(fedProvider.getProviderId(), LDAPConstants.LDAP_PROVIDER))
.filter(this::isActiveDirectory)
.filter(fedProvider -> Objects.isNull(getMapperByName(realm, fedProvider, "MSAD account controls")))

View file

@ -17,7 +17,7 @@
package org.keycloak.models.cache;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.provider.ProviderEvent;
@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public interface CachedRealmModel extends LegacyRealmModel {
public interface CachedRealmModel extends StorageProviderRealmModel {
interface RealmCachedEvent extends ProviderEvent {
CachedRealmModel getRealm();

View file

@ -23,7 +23,7 @@ import org.keycloak.component.ComponentModel;
import org.keycloak.models.ClientModel;
import org.keycloak.models.ClientProvider;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.ModelException;
import org.keycloak.models.RealmModel;
import org.keycloak.storage.client.ClientLookupProvider;
@ -79,7 +79,7 @@ public class ClientStorageManager implements ClientProvider {
private static <T> Stream<ClientStorageProviderModel> getStorageProviders(RealmModel realm, KeycloakSession session, Class<T> type) {
return ((LegacyRealmModel) realm).getClientStorageProvidersStream()
return ((StorageProviderRealmModel) realm).getClientStorageProvidersStream()
.filter(model -> {
ClientStorageProviderFactory factory = getClientStorageProviderFactory(model, session);
if (factory == null) {

View file

@ -23,7 +23,7 @@ import org.keycloak.common.util.reflections.Types;
import org.keycloak.component.ComponentModel;
import org.keycloak.models.ClientModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.ModelException;
import org.keycloak.models.RealmModel;
import org.keycloak.models.RoleModel;
@ -73,7 +73,7 @@ public class RoleStorageManager implements RoleProvider {
}
public static <T> Stream<RoleStorageProviderModel> getStorageProviders(RealmModel realm, KeycloakSession session, Class<T> type) {
return ((LegacyRealmModel) realm).getRoleStorageProvidersStream()
return ((StorageProviderRealmModel) realm).getRoleStorageProvidersStream()
.filter(model -> {
RoleStorageProviderFactory factory = getRoleStorageProviderFactory(model, session);
if (factory == null) {

View file

@ -60,7 +60,7 @@ import org.keycloak.models.cache.UserCache;
import org.keycloak.models.utils.ComponentUtil;
import org.keycloak.models.utils.ReadOnlyUserModelDelegate;
import org.keycloak.storage.client.ClientStorageProvider;
import org.keycloak.storage.datastore.LegacyDatastoreProvider;
import org.keycloak.storage.datastore.DefaultDatastoreProvider;
import org.keycloak.storage.federated.UserFederatedStorageProvider;
import org.keycloak.storage.managers.UserStorageSyncManager;
import org.keycloak.storage.user.ImportedUserValidation;
@ -89,7 +89,7 @@ public class UserStorageManager extends AbstractStorageManager<UserStorageProvid
}
protected UserProvider localStorage() {
return ((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).userLocalStorage();
return ((DefaultDatastoreProvider) session.getProvider(DatastoreProvider.class)).userLocalStorage();
}
private UserFederatedStorageProvider getFederatedStorage() {

View file

@ -19,13 +19,13 @@ package org.keycloak.storage;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.UserProvider;
import org.keycloak.storage.datastore.LegacyDatastoreProvider;
import org.keycloak.storage.datastore.DefaultDatastoreProvider;
/**
* @author Alexander Schwartz
*/
public class UserStoragePrivateUtil {
public static UserProvider userLocalStorage(KeycloakSession session) {
return ((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).userLocalStorage();
return ((DefaultDatastoreProvider) session.getProvider(DatastoreProvider.class)).userLocalStorage();
}
}

View file

@ -16,7 +16,7 @@
*/
package org.keycloak.storage.adapter;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.SubjectCredentialManager;
@ -33,6 +33,6 @@ public class InMemoryUserAdapter extends AbstractInMemoryUserAdapter {
@Override
public SubjectCredentialManager credentialManager() {
return new LegacyUserCredentialManager(session, realm, this);
return new UserCredentialManager(session, realm, this);
}
}

View file

@ -35,14 +35,14 @@ import org.keycloak.storage.ClientStorageManager;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.ExportImportManager;
import org.keycloak.storage.GroupStorageManager;
import org.keycloak.storage.LegacyStoreManagers;
import org.keycloak.storage.StoreManagers;
import org.keycloak.storage.MigrationManager;
import org.keycloak.storage.RoleStorageManager;
import org.keycloak.storage.UserStorageManager;
import org.keycloak.storage.federated.UserFederatedStorageProvider;
public class LegacyDatastoreProvider implements DatastoreProvider, LegacyStoreManagers {
private final LegacyDatastoreProviderFactory factory;
public class DefaultDatastoreProvider implements DatastoreProvider, StoreManagers {
private final DefaultDatastoreProviderFactory factory;
private final KeycloakSession session;
private AuthenticationSessionProvider authenticationSessionProvider;
@ -63,7 +63,7 @@ public class LegacyDatastoreProvider implements DatastoreProvider, LegacyStoreMa
private UserProvider userStorageManager;
private UserFederatedStorageProvider userFederatedStorageProvider;
public LegacyDatastoreProvider(LegacyDatastoreProviderFactory factory, KeycloakSession session) {
public DefaultDatastoreProvider(DefaultDatastoreProviderFactory factory, KeycloakSession session) {
this.factory = factory;
this.session = session;
}
@ -260,11 +260,11 @@ public class LegacyDatastoreProvider implements DatastoreProvider, LegacyStoreMa
@Override
public ExportImportManager getExportImportManager() {
return new LegacyExportImportManager(session);
return new DefaultExportImportManager(session);
}
public MigrationManager getMigrationManager() {
return new LegacyMigrationManager(session);
return new DefaultMigrationManager(session);
}
}

View file

@ -32,12 +32,12 @@ import org.keycloak.services.scheduled.ClearExpiredUserSessions;
import org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.DatastoreProviderFactory;
import org.keycloak.storage.LegacyStoreMigrateRepresentationEvent;
import org.keycloak.storage.LegacyStoreSyncEvent;
import org.keycloak.storage.StoreMigrateRepresentationEvent;
import org.keycloak.storage.StoreSyncEvent;
import org.keycloak.storage.managers.UserStorageSyncManager;
import org.keycloak.timer.TimerProvider;
public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory, ProviderEventListener {
public class DefaultDatastoreProviderFactory implements DatastoreProviderFactory, ProviderEventListener {
private static final String PROVIDER_ID = "legacy";
private long clientStorageProviderTimeout;
@ -46,7 +46,7 @@ public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory,
@Override
public DatastoreProvider create(KeycloakSession session) {
return new LegacyDatastoreProvider(this, session);
return new DefaultDatastoreProvider(this, session);
}
@Override
@ -85,11 +85,11 @@ public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory,
public void onEvent(ProviderEvent event) {
if (event instanceof PostMigrationEvent) {
setupScheduledTasks(((PostMigrationEvent) event).getFactory());
} else if (event instanceof LegacyStoreSyncEvent) {
LegacyStoreSyncEvent ev = (LegacyStoreSyncEvent) event;
} else if (event instanceof StoreSyncEvent) {
StoreSyncEvent ev = (StoreSyncEvent) event;
UserStorageSyncManager.notifyToRefreshPeriodicSyncAll(ev.getSession(), ev.getRealm(), ev.getRemoved());
} else if (event instanceof LegacyStoreMigrateRepresentationEvent) {
LegacyStoreMigrateRepresentationEvent ev = (LegacyStoreMigrateRepresentationEvent) event;
} else if (event instanceof StoreMigrateRepresentationEvent) {
StoreMigrateRepresentationEvent ev = (StoreMigrateRepresentationEvent) event;
MigrationModelManager.migrateImport(ev.getSession(), ev.getRealm(), ev.getRep(), ev.isSkipUserDependent());
}
}

View file

@ -98,7 +98,6 @@ import org.keycloak.storage.UserStorageProviderModel;
import org.keycloak.storage.UserStorageUtil;
import org.keycloak.storage.federated.UserFederatedStorageProvider;
import org.keycloak.util.JsonSerialization;
import org.keycloak.utils.ReservedCharValidator;
import org.keycloak.utils.StringUtil;
import org.keycloak.validation.ValidationUtil;
@ -126,16 +125,15 @@ import static org.keycloak.models.utils.RepresentationToModel.importRoles;
import static org.keycloak.models.utils.StripSecretsUtils.stripForExport;
/**
* This wraps the functionality about export/import for legacy storage. This will be handled differently for the new map storage,
* therefore, it has been extracted.
* This wraps the functionality about export/import for the storage.
*
* @author Alexander Schwartz
*/
public class LegacyExportImportManager implements ExportImportManager {
public class DefaultExportImportManager implements ExportImportManager {
private final KeycloakSession session;
private static final Logger logger = Logger.getLogger(LegacyExportImportManager.class);
private static final Logger logger = Logger.getLogger(DefaultExportImportManager.class);
public LegacyExportImportManager(KeycloakSession session) {
public DefaultExportImportManager(KeycloakSession session) {
this.session = session;
}

View file

@ -70,13 +70,12 @@ import java.util.Map;
import java.util.regex.Pattern;
/**
* This wraps the functionality for migrations of the legacy storage. This will be handled differently for the new map storage,
* therefore, it has been extracted.
* This wraps the functionality for migrations of the storage.
*
* @author Alexander Schwartz
*/
public class LegacyMigrationManager implements MigrationManager {
private static final Logger logger = Logger.getLogger(LegacyMigrationManager.class);
public class DefaultMigrationManager implements MigrationManager {
private static final Logger logger = Logger.getLogger(DefaultMigrationManager.class);
private static final Migration[] migrations = {
new MigrateTo1_2_0(),
@ -119,7 +118,7 @@ public class LegacyMigrationManager implements MigrationManager {
private final KeycloakSession session;
public LegacyMigrationManager(KeycloakSession session) {
public DefaultMigrationManager(KeycloakSession session) {
this.session = session;
}

View file

@ -26,7 +26,7 @@ import org.keycloak.component.ComponentModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.KeycloakSessionTask;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.storage.UserStorageProvider;
@ -62,7 +62,7 @@ public class UserStorageSyncManager {
public void run(KeycloakSession session) {
Stream<RealmModel> realms = session.realms().getRealmsWithProviderTypeStream(UserStorageProvider.class);
realms.forEach(realm -> {
Stream<UserStorageProviderModel> providers = ((LegacyRealmModel) realm).getUserStorageProvidersStream();
Stream<UserStorageProviderModel> providers = ((StorageProviderRealmModel) realm).getUserStorageProvidersStream();
providers.forEachOrdered(provider -> {
UserStorageProviderFactory factory = (UserStorageProviderFactory) session.getKeycloakSessionFactory().getProviderFactory(UserStorageProvider.class, provider.getProviderId());
if (factory instanceof ImportSynchronization && provider.isImportEnabled()) {
@ -174,7 +174,7 @@ public class UserStorageSyncManager {
public static void notifyToRefreshPeriodicSyncAll(KeycloakSession session, RealmModel realm, boolean removed) {
((LegacyRealmModel) realm).getUserStorageProvidersStream().forEachOrdered(fedProvider ->
((StorageProviderRealmModel) realm).getUserStorageProvidersStream().forEachOrdered(fedProvider ->
notifyToRefreshPeriodicSync(session, realm, fedProvider, removed));
}
@ -276,7 +276,7 @@ public class UserStorageSyncManager {
@Override
public void run(KeycloakSession session) {
RealmModel persistentRealm = session.realms().getRealm(realmId);
((LegacyRealmModel) persistentRealm).getUserStorageProvidersStream()
((StorageProviderRealmModel) persistentRealm).getUserStorageProvidersStream()
.filter(persistentFedProvider -> Objects.equals(provider.getId(), persistentFedProvider.getId()))
.forEachOrdered(persistentFedProvider -> {
// Update persistent provider in DB

View file

@ -15,4 +15,4 @@
# limitations under the License.
#
org.keycloak.storage.datastore.LegacyDatastoreProviderFactory
org.keycloak.storage.datastore.DefaultDatastoreProviderFactory

View file

@ -17,17 +17,16 @@
package org.keycloak.models.datastore;
import org.junit.Assert;
import org.junit.Test;
import org.keycloak.migration.ModelVersion;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.keycloak.storage.datastore.LegacyMigrationManager.RHSSO_VERSION_7_0_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.LegacyMigrationManager.RHSSO_VERSION_7_1_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.LegacyMigrationManager.RHSSO_VERSION_7_2_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.LegacyMigrationManager.RHSSO_VERSION_7_3_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.LegacyMigrationManager.RHSSO_VERSION_7_4_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.LegacyMigrationManager.convertRHSSOVersionToKeycloakVersion;
import static org.keycloak.storage.datastore.DefaultMigrationManager.RHSSO_VERSION_7_0_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.DefaultMigrationManager.RHSSO_VERSION_7_1_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.DefaultMigrationManager.RHSSO_VERSION_7_2_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.DefaultMigrationManager.RHSSO_VERSION_7_3_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.DefaultMigrationManager.RHSSO_VERSION_7_4_KEYCLOAK_VERSION;
import static org.keycloak.storage.datastore.DefaultMigrationManager.convertRHSSOVersionToKeycloakVersion;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
@ -36,7 +35,7 @@ import static org.hamcrest.CoreMatchers.nullValue;
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class LegacyMigrationManagerTest {
public class MigrationManagerTest {
@Test
public void testRHSSOVersionToKeycloakVersionConversion() {

View file

@ -32,7 +32,7 @@ import org.keycloak.models.utils.RepresentationToModel;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.storage.datastore.LegacyExportImportManager;
import org.keycloak.storage.datastore.DefaultExportImportManager;
import java.io.IOException;
import java.io.InputStream;
@ -266,7 +266,7 @@ public class ImportUtils {
private static void importFederatedUsers(KeycloakSession session, RealmProvider model, String realmName, List<UserRepresentation> userReps) {
RealmModel realm = model.getRealmByName(realmName);
for (UserRepresentation user : userReps) {
LegacyExportImportManager.importFederatedUser(session, realm, user);
DefaultExportImportManager.importFederatedUser(session, realm, user);
}
}

View file

@ -24,7 +24,7 @@ import org.keycloak.models.SubjectCredentialManager;
import org.keycloak.models.UserModel;
import org.keycloak.storage.AbstractStorageManager;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.LegacyStoreManagers;
import org.keycloak.storage.StoreManagers;
import org.keycloak.storage.StorageId;
import org.keycloak.storage.UserStorageProvider;
import org.keycloak.storage.UserStorageProviderFactory;
@ -36,17 +36,17 @@ import java.util.Objects;
import java.util.stream.Stream;
/**
* Handling credentials for a given user for the legacy store.
* Handling credentials for a given user for the store.
*
* @author Alexander Schwartz
*/
public class LegacyUserCredentialManager extends AbstractStorageManager<UserStorageProvider, UserStorageProviderModel> implements SubjectCredentialManager {
public class UserCredentialManager extends AbstractStorageManager<UserStorageProvider, UserStorageProviderModel> implements SubjectCredentialManager {
private final UserModel user;
private final KeycloakSession session;
private final RealmModel realm;
public LegacyUserCredentialManager(KeycloakSession session, RealmModel realm, UserModel user) {
public UserCredentialManager(KeycloakSession session, RealmModel realm, UserModel user) {
super(session, UserStorageProviderFactory.class, UserStorageProvider.class, UserStorageProviderModel::new, "user");
this.user = user;
this.session = session;
@ -269,7 +269,7 @@ public class LegacyUserCredentialManager extends AbstractStorageManager<UserStor
}
private UserCredentialStore getStoreForUser(UserModel user) {
LegacyStoreManagers p = (LegacyStoreManagers) session.getProvider(DatastoreProvider.class);
StoreManagers p = (StoreManagers) session.getProvider(DatastoreProvider.class);
if (StorageId.isLocalStorage(user.getId())) {
return (UserCredentialStore) p.userLocalStorage();
} else {

View file

@ -17,7 +17,6 @@
package org.keycloak.models;
import org.keycloak.models.RealmModel;
import org.keycloak.storage.UserStorageProvider;
import org.keycloak.storage.UserStorageProviderModel;
import org.keycloak.storage.client.ClientStorageProvider;
@ -32,7 +31,7 @@ import java.util.stream.Stream;
/**
* @author Alexander Schwartz
*/
public interface LegacyRealmModel extends RealmModel {
public interface StorageProviderRealmModel extends RealmModel {
/**
* @deprecated Use {@link #getClientStorageProvidersStream() getClientStorageProvidersStream} instead.
*/

View file

@ -24,7 +24,7 @@ import org.keycloak.models.RoleProvider;
import org.keycloak.models.UserProvider;
import org.keycloak.storage.federated.UserFederatedStorageProvider;
public interface LegacyStoreManagers {
public interface StoreManagers {
ClientProvider clientStorageManager();

View file

@ -18,7 +18,7 @@ package org.keycloak.storage.adapter;
import org.keycloak.common.util.MultivaluedHashMap;
import org.keycloak.component.ComponentModel;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.models.ClientModel;
import org.keycloak.models.GroupModel;
import org.keycloak.models.KeycloakSession;
@ -400,7 +400,7 @@ public abstract class AbstractUserAdapterFederatedStorage extends UserModelDefau
@Override
public SubjectCredentialManager credentialManager() {
return new LegacyUserCredentialManager(session, realm, this);
return new UserCredentialManager(session, realm, this);
}
@Override

View file

@ -154,7 +154,7 @@ import static org.keycloak.quarkus.runtime.configuration.Configuration.getProper
import static org.keycloak.quarkus.runtime.configuration.MicroProfileConfigProvider.NS_KEYCLOAK_PREFIX;
import static org.keycloak.quarkus.runtime.configuration.MicroProfileConfigProvider.NS_QUARKUS;
import static org.keycloak.quarkus.runtime.configuration.QuarkusPropertiesConfigSource.QUARKUS_PROPERTY_ENABLED;
import static org.keycloak.quarkus.runtime.storage.legacy.database.LegacyJpaConnectionProviderFactory.QUERY_PROPERTY_PREFIX;
import static org.keycloak.quarkus.runtime.storage.legacy.database.QuarkusJpaConnectionProviderFactory.QUERY_PROPERTY_PREFIX;
import static org.keycloak.representations.provider.ScriptProviderDescriptor.AUTHENTICATORS;
import static org.keycloak.representations.provider.ScriptProviderDescriptor.MAPPERS;
import static org.keycloak.representations.provider.ScriptProviderDescriptor.POLICIES;

View file

@ -60,10 +60,10 @@ import org.keycloak.quarkus.runtime.storage.database.jpa.AbstractJpaConnectionPr
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class LegacyJpaConnectionProviderFactory extends AbstractJpaConnectionProviderFactory implements ServerInfoAwareProviderFactory {
public class QuarkusJpaConnectionProviderFactory extends AbstractJpaConnectionProviderFactory implements ServerInfoAwareProviderFactory {
public static final String QUERY_PROPERTY_PREFIX = "kc.query.";
private static final Logger logger = Logger.getLogger(LegacyJpaConnectionProviderFactory.class);
private static final Logger logger = Logger.getLogger(QuarkusJpaConnectionProviderFactory.class);
private static final String SQL_GET_LATEST_VERSION = "SELECT ID, VERSION FROM %sMIGRATION_MODEL ORDER BY UPDATE_TIME DESC";
enum MigrationStrategy {
@ -80,7 +80,7 @@ public class LegacyJpaConnectionProviderFactory extends AbstractJpaConnectionPro
@Override
public String getId() {
return "legacy";
return "quarkus";
}
private void addSpecificNamedQueries(KeycloakSession session) {

View file

@ -23,7 +23,7 @@ import org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFa
/**
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
*/
public class LegacyInfinispanConnectionFactory extends DefaultInfinispanConnectionProviderFactory {
public class QuarkusInfinispanConnectionFactory extends DefaultInfinispanConnectionProviderFactory {
@Override
protected EmbeddedCacheManager initContainerManaged(EmbeddedCacheManager cacheManager) {

View file

@ -17,4 +17,4 @@
# */
#
org.keycloak.quarkus.runtime.storage.legacy.infinispan.LegacyInfinispanConnectionFactory
org.keycloak.quarkus.runtime.storage.legacy.infinispan.QuarkusInfinispanConnectionFactory

View file

@ -15,4 +15,4 @@
# limitations under the License.
#
org.keycloak.quarkus.runtime.storage.legacy.database.LegacyJpaConnectionProviderFactory
org.keycloak.quarkus.runtime.storage.legacy.database.QuarkusJpaConnectionProviderFactory

View file

@ -21,7 +21,7 @@ import java.util.Collections;
import java.util.Map;
import org.keycloak.it.TestProvider;
public class CustomLegacyJpaEntityProvider implements TestProvider {
public class CustomJpaEntityProvider implements TestProvider {
@Override
public Class[] getClasses() {

View file

@ -20,9 +20,8 @@ package com.acme.provider.legacy.jpa.user;
import java.util.Collections;
import java.util.Map;
import org.keycloak.it.TestProvider;
import com.acme.provider.legacy.jpa.entity.Realm;
public class CustomLegacyUserProvider implements TestProvider {
public class CustomUserProvider implements TestProvider {
@Override
public Class[] getClasses() {

View file

@ -30,7 +30,7 @@ import org.junit.jupiter.api.condition.OS;
import org.keycloak.it.junit5.extension.BeforeStartDistribution;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.Storage;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.utils.KeycloakDistribution;
@ -39,7 +39,7 @@ import io.quarkus.test.junit.main.LaunchResult;
@DistributionTest(reInstall = DistributionTest.ReInstall.BEFORE_TEST)
@RawDistOnly(reason = "Not possible to mount files using docker.")
@LegacyStore(defaultLocalCache = false)
@Storage(defaultLocalCache = false)
public class ClusterConfigDistTest {
@Test

View file

@ -20,21 +20,19 @@ package org.keycloak.it.cli.dist;
import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.junit5.extension.TestProvider;
import com.acme.provider.legacy.jpa.entity.CustomLegacyJpaEntityProvider;
import com.acme.provider.legacy.jpa.entity.CustomJpaEntityProvider;
import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;
@DistributionTest
@RawDistOnly(reason = "Containers are immutable")
@LegacyStore
public class CustomLegacyJpaEntityProviderDistTest {
public class CustomJpaEntityProviderDistTest {
@Test
@TestProvider(CustomLegacyJpaEntityProvider.class)
@TestProvider(CustomJpaEntityProvider.class)
@Launch({ "start-dev", "--log-level=org.hibernate.jpa.internal.util.LogHelper:debug" })
void testUserManagedEntityNotAddedToDefaultPU(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;

View file

@ -20,21 +20,19 @@ package org.keycloak.it.cli.dist;
import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.junit5.extension.TestProvider;
import com.acme.provider.legacy.jpa.user.CustomLegacyUserProvider;
import com.acme.provider.legacy.jpa.user.CustomUserProvider;
import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;
@DistributionTest
@RawDistOnly(reason = "Containers are immutable")
@LegacyStore
public class CustomLegacyUserProviderDistTest {
public class CustomUserProviderDistTest {
@Test
@TestProvider(CustomLegacyUserProvider.class)
@TestProvider(CustomUserProvider.class)
@Launch({ "start-dev", "--spi-user-provider=custom_jpa", "--spi-user-jpa-enabled=false" })
void testUserManagedEntityNotAddedToDefaultPU(LaunchResult result) {
CLIResult cliResult = (CLIResult) result;

View file

@ -10,7 +10,6 @@ import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.utils.KeycloakDistribution;
import org.keycloak.quarkus.runtime.cli.command.Build;
@ -25,7 +24,6 @@ import static org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.OPTI
@DistributionTest
@RawDistOnly(reason = "Containers are immutable")
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@LegacyStore
public class FeaturesDistTest {
private static final String PREVIEW_FEATURES_EXPECTED_LOG = "Preview features enabled: admin-fine-grained-authz:v1, client-secret-rotation:v1, dpop:v1, multi-site:v1, recovery-codes:v1, scripts:v1, token-exchange:v1, update-email:v1";

View file

@ -29,14 +29,12 @@ import java.util.function.Consumer;
import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.BeforeStartDistribution;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.utils.KeycloakDistribution;
import io.quarkus.test.junit.main.Launch;
@DistributionTest(keepAlive =true)
@LegacyStore
public class MetricsDistTest {
@Test

View file

@ -37,7 +37,6 @@ import org.keycloak.it.junit5.extension.BeforeStartDistribution;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.KeepServerAlive;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.RawDistOnly;
import org.keycloak.it.utils.KeycloakDistribution;
@ -47,7 +46,6 @@ import io.quarkus.test.junit.main.LaunchResult;
@DistributionTest(reInstall = DistributionTest.ReInstall.NEVER)
@RawDistOnly(reason = "Containers are immutable")
@TestMethodOrder(OrderAnnotation.class)
@LegacyStore
public class QuarkusPropertiesDistTest {
private static final String QUARKUS_BUILDTIME_HIBERNATE_METRICS_KEY = "quarkus.datasource.metrics.enabled";

View file

@ -22,13 +22,11 @@ import io.quarkus.test.junit.main.LaunchResult;
import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.WithDatabase;
import org.keycloak.it.junit5.extension.WithEnvVars;
@DistributionTest
@WithDatabase(alias = "postgres")
@LegacyStore
public class DatabaseOptionsDistTest {
@Test

View file

@ -17,15 +17,12 @@
package org.keycloak.it.storage.database.dist;
import org.keycloak.it.junit5.extension.CLITest;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.WithDatabase;
import org.keycloak.it.storage.database.MariaDBTest;
@DistributionTest(removeBuildOptionsAfterBuild = true)
@WithDatabase(alias = "mariadb")
@LegacyStore
public class MariaDBDistTest extends MariaDBTest {
}

View file

@ -1,12 +1,10 @@
package org.keycloak.it.storage.database.dist;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.WithDatabase;
import org.keycloak.it.storage.database.MySQLTest;
@DistributionTest(removeBuildOptionsAfterBuild = true)
@WithDatabase(alias = "mysql")
@LegacyStore
public class MySQLDistTest extends MySQLTest {
}

View file

@ -23,7 +23,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.WithDatabase;
import org.keycloak.it.storage.database.PostgreSQLTest;
@ -32,7 +31,6 @@ import io.quarkus.test.junit.main.LaunchResult;
@DistributionTest(removeBuildOptionsAfterBuild = true)
@WithDatabase(alias = "postgres")
@LegacyStore
public class PostgreSQLDistTest extends PostgreSQLTest {
@Test

View file

@ -5,12 +5,10 @@ import io.quarkus.test.junit.main.LaunchResult;
import org.junit.jupiter.api.Test;
import org.keycloak.it.junit5.extension.CLIResult;
import org.keycloak.it.junit5.extension.DistributionTest;
import org.keycloak.it.junit5.extension.LegacyStore;
import org.keycloak.it.junit5.extension.WithDatabase;
@DistributionTest
@WithDatabase(alias = "mssql")
@LegacyStore
public class TransactionConfigurationDistTest {
@Test

View file

@ -22,7 +22,6 @@ import io.quarkus.runtime.configuration.QuarkusConfigFactory;
import io.quarkus.test.junit.QuarkusMainTestExtension;
import io.quarkus.test.junit.main.Launch;
import io.quarkus.test.junit.main.LaunchResult;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
import org.junit.jupiter.api.extension.ExtensionContext.Store;
@ -46,7 +45,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -101,7 +99,7 @@ public class CLITestExtension extends QuarkusMainTestExtension {
onKeepServerAlive(context.getRequiredTestMethod().getAnnotation(KeepServerAlive.class));
if (dist == null) {
dist = createDistribution(distConfig, getLegacyStoreConfig(context), getDatabaseConfig(context));
dist = createDistribution(distConfig, getStoreConfig(context), getDatabaseConfig(context));
}
copyTestProvider(context.getRequiredTestClass().getAnnotation(TestProvider.class));
@ -125,8 +123,8 @@ public class CLITestExtension extends QuarkusMainTestExtension {
return context.getStore(Namespace.create(context.getRequiredTestClass(), context.getRequiredTestMethod()));
}
private static LegacyStore getLegacyStoreConfig(ExtensionContext context) {
return context.getTestClass().get().getDeclaredAnnotation(LegacyStore.class);
private static Storage getStoreConfig(ExtensionContext context) {
return context.getTestClass().get().getDeclaredAnnotation(Storage.class);
}
private void copyTestProvider(TestProvider provider) {
@ -227,7 +225,7 @@ public class CLITestExtension extends QuarkusMainTestExtension {
if (distConfig != null) {
if (BEFORE_ALL.equals(distConfig.reInstall())) {
dist = createDistribution(distConfig, getLegacyStoreConfig(context), getDatabaseConfig(context));
dist = createDistribution(distConfig, getStoreConfig(context), getDatabaseConfig(context));
}
} else {
forceTestLaunchMode();
@ -245,8 +243,8 @@ public class CLITestExtension extends QuarkusMainTestExtension {
super.afterAll(context);
}
private KeycloakDistribution createDistribution(DistributionTest config, LegacyStore legacyStoreConfig, WithDatabase databaseConfig) {
return new KeycloakDistributionDecorator(legacyStoreConfig, databaseConfig, config, DistributionType.getCurrent().orElse(RAW).newInstance(config));
private KeycloakDistribution createDistribution(DistributionTest config, Storage storeConfig, WithDatabase databaseConfig) {
return new KeycloakDistributionDecorator(storeConfig, databaseConfig, config, DistributionType.getCurrent().orElse(RAW).newInstance(config));
}
@Override

View file

@ -24,14 +24,14 @@ import org.keycloak.it.utils.KeycloakDistribution;
public class KeycloakDistributionDecorator implements KeycloakDistribution {
private LegacyStore legacyStoreConfig;
private Storage storageConfig;
private WithDatabase databaseConfig;
private DistributionTest config;
private KeycloakDistribution delegate;
public KeycloakDistributionDecorator(LegacyStore legacyStoreConfig, WithDatabase databaseConfig, DistributionTest config,
KeycloakDistribution delegate) {
this.legacyStoreConfig = legacyStoreConfig;
public KeycloakDistributionDecorator(Storage storageConfig, WithDatabase databaseConfig, DistributionTest config,
KeycloakDistribution delegate) {
this.storageConfig = storageConfig;
this.databaseConfig = databaseConfig;
this.config = config;
this.delegate = delegate;
@ -43,7 +43,7 @@ public class KeycloakDistributionDecorator implements KeycloakDistribution {
args.addAll(List.of(config.defaultOptions()));
return delegate.run(new ServerOptions(legacyStoreConfig, databaseConfig, args));
return delegate.run(new ServerOptions(storageConfig, databaseConfig, args));
}
@Override

View file

@ -39,12 +39,12 @@ final class ServerOptions extends ArrayList<String> {
.or("-h"::equals)
.or(ShowConfig.NAME::equals);
ServerOptions(LegacyStore legacyStoreConfig, WithDatabase withDatabase, List<String> rawOptions) {
ServerOptions(Storage storageConfig, WithDatabase withDatabase, List<String> rawOptions) {
if (rawOptions.isEmpty()) {
return;
}
for (Map.Entry<String, Predicate<String>> entry : getDefaultOptions(legacyStoreConfig, withDatabase).entrySet()) {
for (Map.Entry<String, Predicate<String>> entry : getDefaultOptions(storageConfig, withDatabase).entrySet()) {
if (contains(entry.getKey())) {
continue;
}
@ -57,28 +57,19 @@ final class ServerOptions extends ArrayList<String> {
addAll(0, rawOptions);
}
private Map<String, Predicate<String>> getDefaultOptions(LegacyStore legacyStoreConfig, WithDatabase withDatabase) {
private Map<String, Predicate<String>> getDefaultOptions(Storage storageConfig, WithDatabase withDatabase) {
Map<String, Predicate<String>> defaultOptions = new HashMap<>();
defaultOptions.put("--cache=local", ignoreCacheLocal(legacyStoreConfig));
defaultOptions.put("--cache=local", ignoreCacheLocal(storageConfig));
return defaultOptions;
}
private Predicate<String> ignoreCacheLocal(LegacyStore legacyStoreConfig) {
private Predicate<String> ignoreCacheLocal(Storage storageConfig) {
return new Predicate<String>() {
@Override
public boolean test(String arg) {
return arg.contains("--cache") || legacyStoreConfig == null || !legacyStoreConfig.defaultLocalCache();
}
}.or(IGNORED_ARGUMENTS);
}
private Predicate<String> ignoreStorageChm(LegacyStore legacyStoreConfig, WithDatabase withDatabase) {
return new Predicate<String>() {
@Override
public boolean test(String arg) {
return arg.contains("--storage") || legacyStoreConfig != null || withDatabase != null;
return arg.contains("--cache") || storageConfig == null || !storageConfig.defaultLocalCache();
}
}.or(IGNORED_ARGUMENTS);
}

View file

@ -24,12 +24,12 @@ import java.lang.annotation.Target;
import org.junit.jupiter.api.extension.ExtendWith;
/**
* Use this annotation to enable the legacy store when running a test.
* Use this annotation to change the default storage configuration when running a test.
*/
@Target(ElementType.TYPE)
@ExtendWith({ CLITestExtension.class })
@Retention(RetentionPolicy.RUNTIME)
public @interface LegacyStore {
public @interface Storage {
/**
* If {@code true}, the cache is set to local by default.

View file

@ -28,7 +28,7 @@ import org.keycloak.representations.idm.UserRepresentation;
import java.io.InputStream;
/**
* Manage importing and updating of realms for the legacy store.
* Manage importing and updating of realms for the store.
*
* @author Alexander Schwartz
*/

View file

@ -22,19 +22,18 @@ import org.keycloak.provider.ProviderEvent;
import org.keycloak.representations.idm.RealmRepresentation;
/**
* Event for notifying legacy store, so it can do migrations on the representation as needed.
* Event for notifying the store, so it can do migrations on the representation as needed.
*
* CAUTION: This event is exceptional as it performs any necessary modificaton of the representation.
* This will be removed once the legacy store has been removed.
*/
public class LegacyStoreMigrateRepresentationEvent implements ProviderEvent {
public class StoreMigrateRepresentationEvent implements ProviderEvent {
private final KeycloakSession session;
private final RealmModel realm;
private final RealmRepresentation rep;
private final boolean skipUserDependent;
public LegacyStoreMigrateRepresentationEvent(KeycloakSession session, RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
public StoreMigrateRepresentationEvent(KeycloakSession session, RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
this.session = session;
this.realm = realm;
this.rep = rep;
@ -42,7 +41,7 @@ public class LegacyStoreMigrateRepresentationEvent implements ProviderEvent {
}
public static void fire(KeycloakSession session, RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
session.getKeycloakSessionFactory().publish(new LegacyStoreMigrateRepresentationEvent(session, realm, rep, skipUserDependent));
session.getKeycloakSessionFactory().publish(new StoreMigrateRepresentationEvent(session, realm, rep, skipUserDependent));
}
public KeycloakSession getSession() {

View file

@ -21,23 +21,23 @@ import org.keycloak.models.RealmModel;
import org.keycloak.provider.ProviderEvent;
/**
* Event for notifying legacy store about the need to reconfigure user providers
* sychronization.
* Event for notifying the store about the need to reconfigure user providers
* synchronization.
*/
public class LegacyStoreSyncEvent implements ProviderEvent {
public class StoreSyncEvent implements ProviderEvent {
private final KeycloakSession session;
private final RealmModel realm;
private final boolean removed;
public LegacyStoreSyncEvent(KeycloakSession session, RealmModel realm, boolean removed) {
public StoreSyncEvent(KeycloakSession session, RealmModel realm, boolean removed) {
this.session = session;
this.realm = realm;
this.removed = removed;
}
public static void fire(KeycloakSession session, RealmModel realm, boolean removed) {
session.getKeycloakSessionFactory().publish(new LegacyStoreSyncEvent(session, realm, removed));
session.getKeycloakSessionFactory().publish(new StoreSyncEvent(session, realm, removed));
}
public KeycloakSession getSession() {

View file

@ -53,8 +53,8 @@ import org.keycloak.representations.idm.RealmEventsConfigRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.sessions.AuthenticationSessionProvider;
import org.keycloak.storage.LegacyStoreMigrateRepresentationEvent;
import org.keycloak.storage.LegacyStoreSyncEvent;
import org.keycloak.storage.StoreMigrateRepresentationEvent;
import org.keycloak.storage.StoreSyncEvent;
import org.keycloak.services.clientregistration.policy.DefaultClientRegistrationPolicies;
import java.util.Collections;
@ -280,7 +280,7 @@ public class RealmManager {
}
// Refresh periodic sync tasks for configured storageProviders
LegacyStoreSyncEvent.fire(session, realm, true);
StoreSyncEvent.fire(session, realm, true);
}
return removed;
}
@ -607,13 +607,13 @@ public class RealmManager {
}
// Refresh periodic sync tasks for configured storageProviders
LegacyStoreSyncEvent.fire(session, realm, false);
StoreSyncEvent.fire(session, realm, false);
setupAuthorizationServices(realm);
setupClientRegistrations(realm);
if (rep.getKeycloakVersion() != null) {
LegacyStoreMigrateRepresentationEvent.fire(session, realm, rep, skipUserDependent);
StoreMigrateRepresentationEvent.fire(session, realm, rep, skipUserDependent);
}
session.clientPolicy().updateRealmModelFromRepresentation(realm, rep);

View file

@ -27,7 +27,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -117,8 +116,7 @@ import org.keycloak.services.resources.admin.permissions.AdminPermissionManageme
import org.keycloak.services.resources.admin.permissions.AdminPermissions;
import org.keycloak.storage.DatastoreProvider;
import org.keycloak.storage.ExportImportManager;
import org.keycloak.storage.LegacyStoreSyncEvent;
import org.keycloak.userprofile.DeclarativeUserProfileProvider;
import org.keycloak.storage.StoreSyncEvent;
import org.keycloak.utils.ProfileHelper;
import org.keycloak.utils.ReservedCharValidator;
@ -447,7 +445,7 @@ public class RealmAdminResource {
RepresentationToModel.updateRealm(rep, realm, session);
// Refresh periodic sync tasks for configured federationProviders
LegacyStoreSyncEvent.fire(session, realm, false);
StoreSyncEvent.fire(session, realm, false);
// This populates the map in DefaultKeycloakContext to be used when treating the event
session.getContext().getUri();

View file

@ -19,7 +19,7 @@ package org.keycloak.testsuite.federation;
import org.keycloak.component.ComponentModel;
import org.keycloak.credential.CredentialInput;
import org.keycloak.credential.CredentialInputValidator;
import org.keycloak.credential.LegacyUserCredentialManager;
import org.keycloak.credential.UserCredentialManager;
import org.keycloak.models.GroupModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
@ -144,7 +144,7 @@ public class UserPropertyFileStorage implements UserLookupProvider, UserStorageP
@Override
public SubjectCredentialManager credentialManager() {
return new LegacyUserCredentialManager(session, realm, this);
return new UserCredentialManager(session, realm, this);
}
};
}

View file

@ -33,7 +33,7 @@ import org.keycloak.component.ComponentModel;
import org.keycloak.models.GroupModel;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.LDAPConstants;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.models.UserProvider;
@ -151,7 +151,7 @@ public class LDAPSyncTest extends AbstractLDAPTest {
// Assert lastSync time updated
Assert.assertTrue(ctx.getLdapModel().getLastSync() > 0);
((LegacyRealmModel) testRealm).getUserStorageProvidersStream().forEachOrdered(persistentFedModel -> {
((StorageProviderRealmModel) testRealm).getUserStorageProvidersStream().forEachOrdered(persistentFedModel -> {
if (LDAPStorageProviderFactory.PROVIDER_NAME.equals(persistentFedModel.getProviderId())) {
Assert.assertTrue(persistentFedModel.getLastSync() > 0);
} else {

View file

@ -29,7 +29,7 @@ import org.keycloak.events.Details;
import org.keycloak.models.ClientModel;
import org.keycloak.models.Constants;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.models.cache.infinispan.ClientAdapter;
import org.keycloak.representations.AccessToken;
@ -328,7 +328,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
testingClient.server().run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
ClientStorageProviderModel model = ((LegacyRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
ClientStorageProviderModel model = ((StorageProviderRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
Calendar eviction = Calendar.getInstance();
eviction.add(Calendar.HOUR, 1);
model.setCachePolicy(CacheableStorageProviderModel.CachePolicy.EVICT_DAILY);
@ -352,7 +352,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
testingClient.server().run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
ClientStorageProviderModel model = ((LegacyRealmModel) realm).getClientStorageProvidersStream().findAny().get();
ClientStorageProviderModel model = ((StorageProviderRealmModel) realm).getClientStorageProvidersStream().findAny().get();
Calendar eviction = Calendar.getInstance();
eviction.add(Calendar.HOUR, 4 * 24);
model.setCachePolicy(CacheableStorageProviderModel.CachePolicy.EVICT_WEEKLY);
@ -379,7 +379,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
testingClient.server().run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
ClientStorageProviderModel model = ((LegacyRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
ClientStorageProviderModel model = ((StorageProviderRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
model.setCachePolicy(CacheableStorageProviderModel.CachePolicy.MAX_LIFESPAN);
model.setMaxLifespan(1 * 60 * 60 * 1000);
realm.updateComponent(model);
@ -427,7 +427,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
testingClient.server().run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
ClientStorageProviderModel model = ((LegacyRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
ClientStorageProviderModel model = ((StorageProviderRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
model.setCachePolicy(CacheableStorageProviderModel.CachePolicy.NO_CACHE);
realm.updateComponent(model);
});
@ -447,7 +447,7 @@ public class ClientStorageTest extends AbstractTestRealmKeycloakTest {
private void setDefaultCachePolicy() {
testingClient.server().run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
ClientStorageProviderModel model = ((LegacyRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
ClientStorageProviderModel model = ((StorageProviderRealmModel) realm).getClientStorageProvidersStream().findFirst().get();
model.setCachePolicy(CacheableStorageProviderModel.CachePolicy.DEFAULT);
realm.updateComponent(model);
});

View file

@ -4,7 +4,7 @@ import org.jboss.logging.Logger;
import org.keycloak.common.util.reflections.Types;
import org.keycloak.component.ComponentModel;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.ModelException;
import org.keycloak.models.RealmModel;
import org.keycloak.storage.UserStorageProvider;
@ -47,7 +47,7 @@ public class UserStorageProvidersTestUtils {
}
public static <T> Stream<UserStorageProviderModel> getStorageProviders(RealmModel realm, KeycloakSession session, Class<T> type) {
return ((LegacyRealmModel) realm).getUserStorageProvidersStream()
return ((StorageProviderRealmModel) realm).getUserStorageProvidersStream()
.filter(model -> {
UserStorageProviderFactory factory = getUserStorageProviderFactory(model, session);
if (factory == null) {

View file

@ -6,8 +6,7 @@ initialized only with those providers that are explicitly enabled
in a used profile via `keycloak.model.parameters` system property.
This allows writing tests and running those in different
configurations quickly, e.g. once with legacy JPA storage,
second time with purely new Hot Rod implementation.
configurations quickly.
The valid parameters are names of classes in `org.keycloak.testsuite.model.parameters`
package, and it is possible to combine those by providing multiple class names

View file

@ -197,104 +197,104 @@
<profiles>
<profile>
<id>legacy-jpa</id>
<id>jpa</id>
<properties>
<keycloak.model.parameters>LegacyJpa</keycloak.model.parameters>
<keycloak.model.parameters>Jpa</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa+infinispan</id>
<id>jpa+infinispan</id>
<properties>
<keycloak.model.parameters>Infinispan,LegacyJpa</keycloak.model.parameters>
<keycloak.model.parameters>Infinispan,Jpa</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa+infinispan+client-storage</id>
<id>jpa+infinispan+client-storage</id>
<properties>
<keycloak.model.parameters>LegacyJpa,Infinispan,HardcodedClientStorage</keycloak.model.parameters>
<keycloak.model.parameters>Jpa,Infinispan,HardcodedClientStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa+cross-dc-infinispan</id>
<id>jpa+cross-dc-infinispan</id>
<properties>
<keycloak.model.parameters>CrossDCInfinispan,LegacyJpa</keycloak.model.parameters>
<keycloak.model.parameters>CrossDCInfinispan,Jpa</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa+cross-dc-infinispan-offline-sessions-preloading</id>
<id>jpa+cross-dc-infinispan-offline-sessions-preloading</id>
<properties>
<keycloak.model.parameters>CrossDCInfinispan,LegacyJpa</keycloak.model.parameters>
<keycloak.model.parameters>CrossDCInfinispan,Jpa</keycloak.model.parameters>
<keycloak.profile.feature.offline_session_preloading>enabled</keycloak.profile.feature.offline_session_preloading>
<keycloak.userSessions.infinispan.preloadOfflineSessionsFromDatabase>true</keycloak.userSessions.infinispan.preloadOfflineSessionsFromDatabase>
</properties>
</profile>
<profile>
<id>legacy-jpa+infinispan-offline-sessions-preloading</id>
<id>jpa+infinispan-offline-sessions-preloading</id>
<properties>
<keycloak.model.parameters>Infinispan,LegacyJpa</keycloak.model.parameters>
<keycloak.model.parameters>Infinispan,Jpa</keycloak.model.parameters>
<keycloak.profile.feature.offline_session_preloading>enabled</keycloak.profile.feature.offline_session_preloading>
<keycloak.userSessions.infinispan.preloadOfflineSessionsFromDatabase>true</keycloak.userSessions.infinispan.preloadOfflineSessionsFromDatabase>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation+infinispan</id>
<id>jpa-federation+infinispan</id>
<properties>
<keycloak.model.parameters>Infinispan,LegacyJpaFederation,TestsuiteUserMapStorage</keycloak.model.parameters>
<keycloak.model.parameters>Infinispan,JpaFederation,TestsuiteUserMapStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation-backward+infinispan</id>
<id>jpa-federation-backward+infinispan</id>
<properties>
<keycloak.model.parameters>Infinispan,LegacyJpaFederation,BackwardsCompatibilityUserStorage</keycloak.model.parameters>
<keycloak.model.parameters>Infinispan,JpaFederation,BackwardsCompatibilityUserStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation</id>
<id>jpa-federation</id>
<properties>
<keycloak.model.parameters>LegacyJpaFederation,TestsuiteUserMapStorage</keycloak.model.parameters>
<keycloak.model.parameters>JpaFederation,TestsuiteUserMapStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation-backward</id>
<id>jpa-federation-backward</id>
<properties>
<keycloak.model.parameters>LegacyJpaFederation,BackwardsCompatibilityUserStorage</keycloak.model.parameters>
<keycloak.model.parameters>JpaFederation,BackwardsCompatibilityUserStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation-file-storage</id>
<id>jpa-federation-file-storage</id>
<properties>
<keycloak.model.parameters>LegacyJpaFederation,TestsuiteUserFileStorage</keycloak.model.parameters>
<keycloak.model.parameters>JpaFederation,TestsuiteUserFileStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation-file-storage+infinispan</id>
<id>jpa-federation-file-storage+infinispan</id>
<properties>
<keycloak.model.parameters>LegacyJpaFederation,TestsuiteUserFileStorage,Infinispan</keycloak.model.parameters>
<keycloak.model.parameters>JpaFederation,TestsuiteUserFileStorage,Infinispan</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation+ldap</id>
<id>jpa-federation+ldap</id>
<properties>
<keycloak.model.parameters>LegacyJpaFederation,LdapUserStorage</keycloak.model.parameters>
<keycloak.model.parameters>JpaFederation,LdapUserStorage</keycloak.model.parameters>
</properties>
</profile>
<profile>
<id>legacy-jpa-federation+ldap+infinispan</id>
<id>jpa-federation+ldap+infinispan</id>
<properties>
<keycloak.model.parameters>LegacyJpaFederation,LdapUserStorage,Infinispan</keycloak.model.parameters>
<keycloak.model.parameters>JpaFederation,LdapUserStorage,Infinispan</keycloak.model.parameters>
</properties>
</profile>

View file

@ -65,7 +65,7 @@ public class TimeOffsetTest extends KeycloakModelTest {
setTimeOffset(5);
// legacy store requires explicit expiration of expired events
// store requires explicit expiration of expired events
ProviderFactory<EventStoreProvider> providerFactory = session.getKeycloakSessionFactory().getProviderFactory(EventStoreProvider.class);
if ("jpa".equals(providerFactory.getId())) {
provider.clearExpiredEvents();

View file

@ -17,7 +17,6 @@
package org.keycloak.testsuite.model.parameters;
import org.keycloak.authorization.jpa.store.JPAAuthorizationStoreFactory;
import org.keycloak.broker.provider.IdentityProvider;
import org.keycloak.broker.provider.IdentityProviderFactory;
import org.keycloak.broker.provider.IdentityProviderSpi;
import org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory;
@ -43,7 +42,7 @@ import org.keycloak.models.jpa.JpaUserProviderFactory;
import org.keycloak.provider.ProviderFactory;
import org.keycloak.provider.Spi;
import org.keycloak.storage.DatastoreSpi;
import org.keycloak.storage.datastore.LegacyDatastoreProviderFactory;
import org.keycloak.storage.datastore.DefaultDatastoreProviderFactory;
import org.keycloak.testsuite.model.Config;
import com.google.common.collect.ImmutableSet;
import java.util.Set;
@ -54,7 +53,7 @@ import org.keycloak.protocol.LoginProtocolSpi;
*
* @author hmlnarik
*/
public class LegacyJpa extends KeycloakModelParameters {
public class Jpa extends KeycloakModelParameters {
static final Set<Class<? extends Spi>> ALLOWED_SPIS = ImmutableSet.<Class<? extends Spi>>builder()
// jpa-specific
@ -78,7 +77,7 @@ public class LegacyJpa extends KeycloakModelParameters {
static final Set<Class<? extends ProviderFactory>> ALLOWED_FACTORIES = ImmutableSet.<Class<? extends ProviderFactory>>builder()
// jpa-specific
.add(LegacyDatastoreProviderFactory.class)
.add(DefaultDatastoreProviderFactory.class)
.add(DefaultJpaConnectionProviderFactory.class)
.add(JPAAuthorizationStoreFactory.class)
@ -103,7 +102,7 @@ public class LegacyJpa extends KeycloakModelParameters {
.build();
public LegacyJpa() {
public Jpa() {
super(ALLOWED_SPIS, ALLOWED_FACTORIES);
}

View file

@ -37,12 +37,12 @@ import org.keycloak.testsuite.model.Config;
*
* @author hmlnarik
*/
public class LegacyJpaFederation extends KeycloakModelParameters {
public class JpaFederation extends KeycloakModelParameters {
private final AtomicInteger counter = new AtomicInteger();
static final Set<Class<? extends Spi>> ALLOWED_SPIS = ImmutableSet.<Class<? extends Spi>>builder()
.addAll(LegacyJpa.ALLOWED_SPIS)
.addAll(Jpa.ALLOWED_SPIS)
.add(UserStorageProviderSpi.class)
.add(UserFederatedStorageProviderSpi.class)
.add(ClientScopeStorageProviderSpi.class)
@ -50,12 +50,12 @@ public class LegacyJpaFederation extends KeycloakModelParameters {
.build();
static final Set<Class<? extends ProviderFactory>> ALLOWED_FACTORIES = ImmutableSet.<Class<? extends ProviderFactory>>builder()
.addAll(LegacyJpa.ALLOWED_FACTORIES)
.addAll(Jpa.ALLOWED_FACTORIES)
.add(JpaUserFederatedStorageProviderFactory.class)
.add(ClientScopeStorageProviderFactory.class)
.build();
public LegacyJpaFederation() {
public JpaFederation() {
super(ALLOWED_SPIS, ALLOWED_FACTORIES);
}
@ -74,6 +74,6 @@ public class LegacyJpaFederation extends KeycloakModelParameters {
@Override
public void updateConfig(Config cf) {
LegacyJpa.updateConfigForJpa(cf);
Jpa.updateConfigForJpa(cf);
}
}

View file

@ -19,7 +19,7 @@ package org.keycloak.testsuite.util.cli;
import org.keycloak.common.util.MultivaluedHashMap;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.LegacyRealmModel;
import org.keycloak.models.StorageProviderRealmModel;
import org.keycloak.models.RealmModel;
import org.keycloak.storage.managers.UserStorageSyncManager;
import org.keycloak.storage.UserStorageProviderModel;
@ -71,7 +71,7 @@ public class SyncDummyFederationProviderCommand extends AbstractCommand {
return null;
}
return ((LegacyRealmModel) realm).getUserStorageProvidersStream()
return ((StorageProviderRealmModel) realm).getUserStorageProvidersStream()
.filter(fedProvider -> Objects.equals(fedProvider.getName(), displayName))
.findFirst()
.orElse(null);