Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -59,19 +60,25 @@ public EventBuilder(RealmModel realm, KeycloakSession session, ClientConnection
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);
Expand All @@ -92,6 +99,7 @@ private EventBuilder(KeycloakSession session, EventStoreProvider store, List<Eve
this.event = event;
this.session = session;
this.store = store;
this.isEventsEnabled = realm.isEventsEnabled();
}

public EventBuilder realm(RealmModel realm) {
Expand Down Expand Up @@ -235,9 +243,9 @@ private void send(boolean sendImmediately) {

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);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ private List<EventRepresentation> events() {
}

private void badLogin() {
driver.navigate().to(oauth.getLoginFormUrl());
oauth.openLoginForm();
loginPage.form().login("bad", "user");
}

Expand Down Expand Up @@ -166,6 +166,15 @@ public void orderResultsTest() {

}

@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
Expand Down