Skip to content
Snippets Groups Projects
Unverified Commit f55f2535 authored by Martin Weise's avatar Martin Weise
Browse files

Added ecent listener

parent 088e0405
No related branches found
No related tags found
2 merge requests!163Relase 1.3.0,!155Added readme to authentication service and added eureka service
###### FIRST STAGE ###### ###### FIRST STAGE ######
FROM maven:slim as build
MAINTAINER Martin Weise <martin.weise@tuwien.ac.at>
WORKDIR /app
COPY ./rabbitmq-event-listener/pom.xml ./pom.xml
RUN mvn -fn -B dependency:go-offline > /dev/null
COPY ./rabbitmq-event-listener ./
# Make sure it compiles
RUN mvn -q clean package -DskipTests > /dev/null
RUN mv ./target/rabbitmq-event-listener-*.jar ./target/rabbitmq-event-listener.jar
###### SECOND STAGE ######
FROM keycloak/keycloak:21.0 as config FROM keycloak/keycloak:21.0 as config
COPY --from=build /app/target/rabbitmq-event-listener.jar /opt/keycloak/providers/rabbitmq-event-listener.jar
# Enable health and metrics support # Enable health and metrics support
ENV KC_HEALTH_ENABLED=true ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true ENV KC_METRICS_ENABLED=true
...@@ -13,18 +32,21 @@ WORKDIR /opt/keycloak ...@@ -13,18 +32,21 @@ WORKDIR /opt/keycloak
# for demonstration purposes only, please make sure to use proper certificates in production instead # for demonstration purposes only, please make sure to use proper certificates in production instead
RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore
RUN /opt/keycloak/bin/kc.sh build RUN /opt/keycloak/bin/kc.sh build --spi-event-listener-rabbitmqeventlistener-enabled=true
RUN /opt/keycloak/bin/kc.sh show-config
###### SECOND STAGE ###### ###### THIRD STAGE ######
FROM redhat/ubi9-minimal as binary FROM redhat/ubi9-minimal as binary
RUN microdnf update -y && microdnf install -y curl-minimal libcurl-minimal RUN microdnf update -y && microdnf install -y curl-minimal libcurl-minimal
###### THIRD STAGE ###### ###### FOURTH STAGE ######
FROM keycloak/keycloak:21.0 as runtime FROM keycloak/keycloak:21.0 as runtime
COPY --from=config /opt/keycloak/ /opt/keycloak/ COPY --from=config /opt/keycloak/ /opt/keycloak/
COPY --from=binary /usr/lib64 /usr/lib64 COPY --from=binary /usr/lib64 /usr/lib64
COPY --from=binary /usr/bin/curl /usr/bin/curl COPY --from=binary /usr/bin/curl /usr/bin/curl
COPY --from=build /app/target/rabbitmq-event-listener.jar /opt/keycloak/providers/rabbitmq-event-listener.jar
USER root USER root
......
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>rabbitmq-event-listener</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Keycloak - Custom Event Listener</name>
<description>This event listener will notify an admin about new registrations via Email.</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-parent -->
<keycloak.version>21.0.1</keycloak.version>
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<!-- https://mvnrepository.com/artifact/org.wildfly.plugins/wildfly-maven-plugin -->
<maven-wildfly-plugin.version>2.0.2.Final</maven-wildfly-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi-private</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${maven-wildfly-plugin.version}</version>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package at.tuwien;
import org.jboss.logging.Logger;
import org.keycloak.email.DefaultEmailSenderProvider;
import org.keycloak.email.EmailException;
import org.keycloak.events.Event;
import org.keycloak.events.EventListenerProvider;
import org.keycloak.events.EventType;
import org.keycloak.events.admin.AdminEvent;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.RealmProvider;
import org.keycloak.models.UserModel;
public class CustomEventListenerProvider implements EventListenerProvider {
private static final Logger log = Logger.getLogger(CustomEventListenerProvider.class);
private final KeycloakSession session;
private final RealmProvider model;
public CustomEventListenerProvider(KeycloakSession session) {
this.session = session;
this.model = session.realms();
}
@Override
public void onEvent(Event event) {
if (EventType.REGISTER.equals(event.getType())) {
log.infof("## NEW %s EVENT", event.getType());
log.info("-----------------------------------------------------------");
RealmModel realm = this.model.getRealm(event.getRealmId());
UserModel newRegisteredUser = this.session.users().getUserById(realm, event.getUserId());
String emailPlainContent = "New user registration\n\n" +
"Email: " + newRegisteredUser.getEmail() + "\n" +
"Username: " + newRegisteredUser.getUsername() + "\n" +
"Client: " + event.getClientId();
String emailHtmlContent = "<h1>New user registration</h1>" +
"<ul>" +
"<li>Email: " + newRegisteredUser.getEmail() + "</li>" +
"<li>Username: " + newRegisteredUser.getUsername() + "</li>" +
"<li>Client: " + event.getClientId() + "</li>" +
"</ul>";
DefaultEmailSenderProvider senderProvider = new DefaultEmailSenderProvider(session);
try {
senderProvider.send(session.getContext().getRealm().getSmtpConfig(), "admin@example.com", "Keycloak - New Registration", emailPlainContent, emailHtmlContent);
} catch (EmailException e) {
log.error("Failed to send email", e);
}
log.info("-----------------------------------------------------------");
}
}
@Override
public void onEvent(AdminEvent adminEvent, boolean b) {
}
@Override
public void close() {
}
}
\ No newline at end of file
package at.tuwien;
import org.keycloak.Config;
import org.keycloak.events.EventListenerProvider;
import org.keycloak.events.EventListenerProviderFactory;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
public class CustomEventListenerProviderFactory implements EventListenerProviderFactory {
@Override
public EventListenerProvider create(KeycloakSession keycloakSession) {
return new CustomEventListenerProvider(keycloakSession);
}
@Override
public void init(Config.Scope scope) {
}
@Override
public void postInit(KeycloakSessionFactory keycloakSessionFactory) {
}
@Override
public void close() {
}
@Override
public String getId() {
return "rabbitmq-event-listener";
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services" />
</dependencies>
</deployment>
</jboss-deployment-structure>
\ No newline at end of file
at.tuwien.CustomEventListenerProviderFactory
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment