Add map datastore provider
This commit is contained in:
parent
64b1e976af
commit
f1ca325b6b
6 changed files with 1440 additions and 2 deletions
|
@ -2,12 +2,13 @@ package org.keycloak.storage.datastore;
|
|||
|
||||
import org.keycloak.Config;
|
||||
import org.keycloak.Config.Scope;
|
||||
import org.keycloak.common.Profile;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
import org.keycloak.models.utils.PostMigrationEvent;
|
||||
import org.keycloak.provider.EnvironmentDependentProviderFactory;
|
||||
import org.keycloak.provider.ProviderEvent;
|
||||
import org.keycloak.provider.ProviderEventListener;
|
||||
import org.keycloak.services.managers.UserStorageSyncManager;
|
||||
import org.keycloak.services.scheduled.ClearExpiredClientInitialAccessTokens;
|
||||
import org.keycloak.services.scheduled.ClearExpiredEvents;
|
||||
import org.keycloak.services.scheduled.ClearExpiredUserSessions;
|
||||
|
@ -16,9 +17,10 @@ import org.keycloak.services.scheduled.ScheduledTaskRunner;
|
|||
import org.keycloak.storage.DatastoreProvider;
|
||||
import org.keycloak.storage.DatastoreProviderFactory;
|
||||
import org.keycloak.storage.LegacyStoreSyncEvent;
|
||||
import org.keycloak.storage.managers.UserStorageSyncManager;
|
||||
import org.keycloak.timer.TimerProvider;
|
||||
|
||||
public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory, ProviderEventListener {
|
||||
public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory, ProviderEventListener, EnvironmentDependentProviderFactory {
|
||||
|
||||
private static final String PROVIDER_ID = "legacy";
|
||||
private long clientStorageProviderTimeout;
|
||||
|
@ -87,4 +89,9 @@ public class LegacyDatastoreProviderFactory implements DatastoreProviderFactory,
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSupported() {
|
||||
return ! Profile.isFeatureEnabled(Profile.Feature.MAP_STORAGE);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -60,6 +60,13 @@
|
|||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-server-spi-private</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!-- needed for MapExportImportManager that is calling ValidationUtil.validateClient (which is in server-spi-private) might throw a BadRequestException -->
|
||||
<!-- see: https://github.com/hmlnarik/keycloak/pull/23#discussion_r862293798 -->
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-jaxrs</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jdk8</artifactId>
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
package org.keycloak.models.map.datastore;
|
||||
|
||||
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 {
|
||||
|
||||
private final KeycloakSession session;
|
||||
|
||||
public MapDatastoreProvider(KeycloakSession session) {
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientScopeProvider clientScopes() {
|
||||
return session.getProvider(ClientScopeProvider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientProvider clients() {
|
||||
return session.getProvider(ClientProvider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupProvider groups() {
|
||||
return session.getProvider(GroupProvider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RealmProvider realms() {
|
||||
return session.getProvider(RealmProvider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RoleProvider roles() {
|
||||
return session.getProvider(RoleProvider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserProvider users() {
|
||||
return session.getProvider(UserProvider.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExportImportManager getExportImportManager() {
|
||||
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
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package org.keycloak.models.map.datastore;
|
||||
|
||||
import org.keycloak.Config.Scope;
|
||||
import org.keycloak.common.Profile;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.KeycloakSessionFactory;
|
||||
import org.keycloak.provider.EnvironmentDependentProviderFactory;
|
||||
import org.keycloak.storage.DatastoreProvider;
|
||||
import org.keycloak.storage.DatastoreProviderFactory;
|
||||
|
||||
public class MapDatastoreProviderFactory implements DatastoreProviderFactory, EnvironmentDependentProviderFactory {
|
||||
|
||||
private static final String PROVIDER_ID = "map";
|
||||
|
||||
@Override
|
||||
public DatastoreProvider create(KeycloakSession session) {
|
||||
return new MapDatastoreProvider(session);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Scope config) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit(KeycloakSessionFactory factory) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return PROVIDER_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSupported() {
|
||||
return Profile.isFeatureEnabled(Profile.Feature.MAP_STORAGE);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,18 @@
|
|||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
org.keycloak.models.map.datastore.MapDatastoreProviderFactory
|
Loading…
Reference in a new issue