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

Added ecent listener

parent 088e0405
Branches
Tags
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