mirror of
https://github.com/keycloak/keycloak.git
synced 2026-01-10 15:32:05 -03:30
Check whether realm has store enabled for immediately sent events
Closes #21698 Signed-off-by: Michal Hajas <mhajas@redhat.com> (cherry picked from commit 07c27336aa71a6a39e9df42bc8e18cfa1d2bb154)
This commit is contained in:
parent
5489ab8f58
commit
6d28c31c93
@ -50,6 +50,7 @@ public class EventBuilder {
|
||||
private RealmModel realm;
|
||||
private Event event;
|
||||
private Boolean storeImmediately;
|
||||
private final boolean isEventsEnabled;
|
||||
|
||||
public EventBuilder(RealmModel realm, KeycloakSession session, ClientConnection clientConnection) {
|
||||
this(realm, session);
|
||||
@ -59,19 +60,25 @@ public class EventBuilder {
|
||||
public EventBuilder(RealmModel realm, KeycloakSession session) {
|
||||
this.session = session;
|
||||
this.realm = realm;
|
||||
this.isEventsEnabled = realm.isEventsEnabled();
|
||||
|
||||
event = new Event();
|
||||
|
||||
this.store = realm.isEventsEnabled() ? session.getProvider(EventStoreProvider.class) : null;
|
||||
if (realm.isEventsEnabled() && this.store == null) {
|
||||
log.error("Events enabled, but no event store provider configured");
|
||||
}
|
||||
|
||||
this.store = this.isEventsEnabled ? getEventStoreProvider(session) : null;
|
||||
this.listeners = getEventListeners(session, realm);
|
||||
|
||||
realm(realm);
|
||||
}
|
||||
|
||||
private static EventStoreProvider getEventStoreProvider(KeycloakSession session) {
|
||||
EventStoreProvider store = session.getProvider(EventStoreProvider.class);
|
||||
if (store == null) {
|
||||
log.error("Events enabled, but no event store provider configured");
|
||||
}
|
||||
|
||||
return store;
|
||||
}
|
||||
|
||||
private static List<EventListenerProvider> getEventListeners(KeycloakSession session, RealmModel realm) {
|
||||
return realm.getEventsListenersStream().map(id -> {
|
||||
EventListenerProvider listener = session.getProvider(EventListenerProvider.class, id);
|
||||
@ -92,6 +99,7 @@ public class EventBuilder {
|
||||
this.event = event;
|
||||
this.session = session;
|
||||
this.store = store;
|
||||
this.isEventsEnabled = realm.isEventsEnabled();
|
||||
}
|
||||
|
||||
public EventBuilder realm(RealmModel realm) {
|
||||
@ -235,9 +243,9 @@ public class EventBuilder {
|
||||
|
||||
Set<String> eventTypes = realm.getEnabledEventTypesStream().collect(Collectors.toSet());
|
||||
if (sendImmediately) {
|
||||
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), session -> {
|
||||
EventStoreProvider store = session.getProvider(EventStoreProvider.class);
|
||||
List<EventListenerProvider> listeners = getEventListeners(session, realm);
|
||||
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), innerSession -> {
|
||||
EventStoreProvider store = this.isEventsEnabled ? getEventStoreProvider(innerSession) : null;
|
||||
List<EventListenerProvider> listeners = getEventListeners(innerSession, realm);
|
||||
|
||||
sendNow(store, eventTypes, listeners);
|
||||
});
|
||||
|
||||
@ -53,7 +53,7 @@ public class LoginEventsTest extends AbstractEventTest {
|
||||
}
|
||||
|
||||
private void badLogin() {
|
||||
driver.navigate().to(oauth.getLoginFormUrl());
|
||||
oauth.openLoginForm();
|
||||
loginPage.form().login("bad", "user");
|
||||
}
|
||||
|
||||
@ -166,6 +166,15 @@ public class LoginEventsTest extends AbstractEventTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testErrorEventsAreNotStoredWhenDisabled() {
|
||||
configRep.setEventsEnabled(false);
|
||||
saveConfig();
|
||||
|
||||
badLogin();
|
||||
assertEquals(0, events().size());
|
||||
}
|
||||
|
||||
/*
|
||||
Removed this test because it takes too long. The default interval for
|
||||
event cleanup is 15 minutes (900 seconds). I don't have time to figure out
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user