@@ -37,6 +37,7 @@ let
3737 };
3838 plugins = with config.services.keycloak.package.plugins; [
3939 keycloak-discord
40+ keycloak-metrics-spi
4041 ];
4142 };
4243
@@ -104,8 +105,21 @@ let
104105 ### Realm Setup ###
105106
106107 # Get an admin interface access token
108+ keycloak.succeed("""
109+ curl -sSf -d 'client_id=admin-cli' \
110+ -d 'username=admin' \
111+ -d 'password=${initialAdminPassword}' \
112+ -d 'grant_type=password' \
113+ '${frontendUrl}/realms/master/protocol/openid-connect/token' \
114+ | jq -r '"Authorization: bearer " + .access_token' >admin_auth_header
115+ """)
116+
117+ # Register the metrics SPI
107118 keycloak.succeed(
108− "curl -sSf -d 'client_id=admin-cli' -d 'username=admin' -d 'password=${initialAdminPassword}' -d 'grant_type=password' '${frontendUrl}/realms/master/protocol/openid-connect/token' | jq -r '\"Authorization: bearer \" + .access_token' >admin_auth_header"
119+ "${pkgs.jre}/bin/keytool -import -alias snakeoil -file ${certs.ca.cert} -storepass aaaaaa -keystore cacert.jks -noprompt",
120+ "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' ${pkgs.keycloak}/bin/kcadm.sh config credentials --server '${frontendUrl}' --realm master --user admin --password '${initialAdminPassword}'",
121+ "KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' ${pkgs.keycloak}/bin/kcadm.sh update events/config -s 'eventsEnabled=true' -s 'adminEventsEnabled=true' -s 'eventsListeners+=metrics-listener'",
122+ "curl -sSf '${frontendUrl}/realms/master/metrics' | grep '^keycloak_admin_event_UPDATE'"
109123 )
110124
111125 # Publish the realm, including a test OIDC client and user