parent
99ca37bd27
commit
4b499c869c
11 changed files with 79 additions and 30 deletions
|
@ -31,6 +31,7 @@
|
|||
<module name="org.keycloak.keycloak-server-spi"/>
|
||||
<module name="org.keycloak.keycloak-server-spi-private"/>
|
||||
<module name="org.keycloak.keycloak-model-legacy"/>
|
||||
<module name="org.keycloak.keycloak-model-legacy-private"/>
|
||||
<module name="javax.persistence.api"/>
|
||||
<module name="org.jboss.logging"/>
|
||||
<module name="org.liquibase" services="import"/>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<module name="org.keycloak.keycloak-server-spi"/>
|
||||
<module name="org.keycloak.keycloak-server-spi-private"/>
|
||||
<module name="org.keycloak.keycloak-model-legacy"/>
|
||||
<module name="org.keycloak.keycloak-model-legacy-private"/>
|
||||
<module name="javax.persistence.api"/>
|
||||
<module name="org.jboss.logging"/>
|
||||
<module name="org.liquibase" services="import"/>
|
||||
|
|
|
@ -66,6 +66,10 @@
|
|||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-model-legacy</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-model-legacy-private</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.liquibase</groupId>
|
||||
<artifactId>liquibase-core</artifactId>
|
||||
|
|
|
@ -21,21 +21,20 @@ 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;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
||||
* @version $Revision: 1 $
|
||||
*/
|
||||
@Deprecated // as this will be moved to a legacy module
|
||||
public class MigrationModelManager {
|
||||
|
||||
|
||||
public static void migrate(KeycloakSession session) {
|
||||
session.getProvider(DatastoreProvider.class).getMigrationManager().migrate();
|
||||
((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).getMigrationManager().migrate();
|
||||
}
|
||||
|
||||
public static void migrateImport(KeycloakSession session, RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
|
||||
session.getProvider(DatastoreProvider.class).getMigrationManager().migrate(realm, rep, skipUserDependent);
|
||||
((LegacyDatastoreProvider) session.getProvider(DatastoreProvider.class)).getMigrationManager().migrate(realm, rep, skipUserDependent);
|
||||
}
|
||||
|
||||
}
|
|
@ -26,7 +26,6 @@ import org.keycloak.representations.idm.RealmRepresentation;
|
|||
*
|
||||
* @author Alexander Schwartz
|
||||
*/
|
||||
@Deprecated
|
||||
public interface MigrationManager {
|
||||
|
||||
void migrate();
|
|
@ -223,8 +223,6 @@ public class LegacyDatastoreProvider implements DatastoreProvider, LegacyStoreMa
|
|||
return new LegacyExportImportManager(session);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public MigrationManager getMigrationManager() {
|
||||
return new LegacyMigrationManager(session);
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.keycloak.storage.datastore;
|
|||
import org.keycloak.Config;
|
||||
import org.keycloak.Config.Scope;
|
||||
import org.keycloak.common.Profile;
|
||||
import org.keycloak.migration.MigrationModelManager;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
import org.keycloak.models.utils.PostMigrationEvent;
|
||||
|
@ -33,6 +34,7 @@ import org.keycloak.services.scheduled.ClusterAwareScheduledTaskRunner;
|
|||
import org.keycloak.services.scheduled.ScheduledTaskRunner;
|
||||
import org.keycloak.storage.DatastoreProvider;
|
||||
import org.keycloak.storage.DatastoreProviderFactory;
|
||||
import org.keycloak.storage.LegacyStoreMigrateRepresentationEvent;
|
||||
import org.keycloak.storage.LegacyStoreSyncEvent;
|
||||
import org.keycloak.storage.managers.UserStorageSyncManager;
|
||||
import org.keycloak.timer.TimerProvider;
|
||||
|
@ -86,6 +88,9 @@ public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory,
|
|||
} else if (event instanceof LegacyStoreSyncEvent) {
|
||||
LegacyStoreSyncEvent ev = (LegacyStoreSyncEvent) event;
|
||||
UserStorageSyncManager.notifyToRefreshPeriodicSyncAll(ev.getSession(), ev.getRealm(), ev.getRemoved());
|
||||
} else if (event instanceof LegacyStoreMigrateRepresentationEvent) {
|
||||
LegacyStoreMigrateRepresentationEvent ev = (LegacyStoreMigrateRepresentationEvent) event;
|
||||
MigrationModelManager.migrateImport(ev.getSession(), ev.getRealm(), ev.getRep(), ev.isSkipUserDependent());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,14 +21,11 @@ import org.keycloak.models.ClientProvider;
|
|||
import org.keycloak.models.ClientScopeProvider;
|
||||
import org.keycloak.models.GroupProvider;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.models.RealmProvider;
|
||||
import org.keycloak.models.RoleProvider;
|
||||
import org.keycloak.models.UserProvider;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.storage.DatastoreProvider;
|
||||
import org.keycloak.storage.ExportImportManager;
|
||||
import org.keycloak.storage.MigrationManager;
|
||||
|
||||
public class MapDatastoreProvider implements DatastoreProvider {
|
||||
|
||||
|
@ -77,19 +74,4 @@ public class MapDatastoreProvider implements DatastoreProvider {
|
|||
return new MapExportImportManager(session);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MigrationManager getMigrationManager() {
|
||||
return new MigrationManager() {
|
||||
@Override
|
||||
public void migrate() {
|
||||
// Do not migrate the datasources
|
||||
}
|
||||
|
||||
@Override
|
||||
public void migrate(RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
|
||||
// Do not migrate the representation: assume it is the latest
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,7 +41,4 @@ public interface DatastoreProvider extends Provider {
|
|||
UserProvider users();
|
||||
|
||||
ExportImportManager getExportImportManager();
|
||||
|
||||
MigrationManager getMigrationManager();
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright 2022 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.keycloak.storage;
|
||||
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.RealmModel;
|
||||
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.
|
||||
*
|
||||
* 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 {
|
||||
|
||||
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) {
|
||||
this.session = session;
|
||||
this.realm = realm;
|
||||
this.rep = rep;
|
||||
this.skipUserDependent = skipUserDependent;
|
||||
}
|
||||
|
||||
public static void fire(KeycloakSession session, RealmModel realm, RealmRepresentation rep, boolean skipUserDependent) {
|
||||
session.getKeycloakSessionFactory().publish(new LegacyStoreMigrateRepresentationEvent(session, realm, rep, skipUserDependent));
|
||||
}
|
||||
|
||||
public KeycloakSession getSession() {
|
||||
return session;
|
||||
}
|
||||
|
||||
public RealmModel getRealm() {
|
||||
return realm;
|
||||
}
|
||||
|
||||
public RealmRepresentation getRep() {
|
||||
return rep;
|
||||
}
|
||||
|
||||
public boolean isSkipUserDependent() {
|
||||
return skipUserDependent;
|
||||
}
|
||||
}
|
|
@ -19,7 +19,6 @@ package org.keycloak.services.managers;
|
|||
import org.keycloak.Config;
|
||||
import org.keycloak.common.Profile;
|
||||
import org.keycloak.common.enums.SslRequired;
|
||||
import org.keycloak.migration.MigrationModelManager;
|
||||
import org.keycloak.models.AccountRoles;
|
||||
import org.keycloak.models.AdminRoles;
|
||||
import org.keycloak.models.BrowserSecurityHeaders;
|
||||
|
@ -52,6 +51,7 @@ 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.services.clientregistration.policy.DefaultClientRegistrationPolicies;
|
||||
|
||||
|
@ -592,7 +592,7 @@ public class RealmManager {
|
|||
setupClientRegistrations(realm);
|
||||
|
||||
if (rep.getKeycloakVersion() != null) {
|
||||
MigrationModelManager.migrateImport(session, realm, rep, skipUserDependent);
|
||||
LegacyStoreMigrateRepresentationEvent.fire(session, realm, rep, skipUserDependent);
|
||||
}
|
||||
|
||||
session.clientPolicy().updateRealmModelFromRepresentation(realm, rep);
|
||||
|
|
Loading…
Reference in a new issue