Skip to content

Instantly share code, notes, and snippets.

@sharpedavid
Created April 16, 2024 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sharpedavid/b6f1446ce7996d2765b14a562d659000 to your computer and use it in GitHub Desktop.
Save sharpedavid/b6f1446ce7996d2765b14a562d659000 to your computer and use it in GitHub Desktop.
A script for generating Terraform config for Keycloak event configuration.
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.*;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Scratch {
public static void main(String[] args) {
var jsonInput = "[{\"id\":\"IDIR_AAD\",\"realm\":\"idir_aad\",\"displayName\":\"Ministry of Health - IDIR Azure AD IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"bceid_basic\",\"realm\":\"bceid_basic\",\"displayName\":\"Ministry of Health - Basic BCeID IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"bceid_business\",\"realm\":\"bceid_business\",\"displayName\":\"Ministry of Health - Business BCeID IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"bcerd\",\"realm\":\"bcerd\",\"displayName\":\"BC E-substance Reporting (Flagging for possible deletion)\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"bcprovider_aad\",\"realm\":\"bcprovider_aad\",\"displayName\":\"Ministry of Health - BC Provider Azure AD IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"bcproviderlab_aad\",\"realm\":\"bcproviderlab_aad\",\"enabled\":false},{\"id\":\"bcsc\",\"realm\":\"bcsc\",\"displayName\":\"Ministry of Health - BC Services Card IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"davidscoolnewrealm\",\"realm\":\"moh_citizen\",\"displayName\":\"Ministry of Health - Citizen Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"fnha_aad\",\"realm\":\"fnha_aad\",\"displayName\":\"Ministry of Health - First Nations Health Authority Azure AD IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"idir\",\"realm\":\"idir\",\"displayName\":\"Ministry of Health - IDIR IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"lra\",\"realm\":\"lra\",\"displayName\":\"Longitudinal Record Access\",\"displayNameHtml\":\"<b>Longitudinal Record Access</b>\",\"enabled\":true},{\"id\":\"master\",\"realm\":\"master\",\"displayName\":\"Keycloak\",\"displayNameHtml\":\"<div class=\\\"kc-logo-text\\\"><span>Keycloak</span></div>\",\"enabled\":true},{\"id\":\"mhsu_ehs\",\"realm\":\"mhsu_ehs\",\"displayName\":\"Mental Health and Substance Use - Emergency Health Services Realm\",\"enabled\":true},{\"id\":\"mhsu_foundry\",\"realm\":\"mhsu_foundry\",\"displayName\":\"Mental Health and Substance Use - Foundry Realm\",\"enabled\":true},{\"id\":\"moh_applications\",\"realm\":\"moh_applications\",\"displayName\":\"Ministry of Health - Applications Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"moh_idp\",\"realm\":\"moh_idp\",\"displayName\":\"Ministry of Health - Keycloak IDP Realm\",\"displayNameHtml\":\"Ministry of Health\",\"enabled\":true},{\"id\":\"phsa\",\"realm\":\"phsa\",\"displayName\":\"Health Authority IDP Realm\",\"enabled\":true},{\"id\":\"phsa_aad\",\"realm\":\"phsa_aad\",\"enabled\":true},{\"id\":\"pidp_sandbox\",\"realm\":\"pidp_sandbox\",\"enabled\":true},{\"id\":\"v2_pos\",\"realm\":\"v2_pos\",\"enabled\":true}]";
List<String> realms = new ArrayList<>();
final Pattern pattern = Pattern.compile("\"realm\":\"([^\"]+)\"");
final Matcher matcher = pattern.matcher(jsonInput);
while (matcher.find()) {
realms.add(matcher.group(1));
}
Collections.sort(realms);
System.out.println("Realms: " + realms);
var appRealm = """
resource "keycloak_realm_events" "realm_events_%s" {
realm_id = "%s"
events_enabled = true
# There are 31,536,000 seconds in a year.
events_expiration = 31536000
admin_events_enabled = true
admin_events_details_enabled = true
# When omitted or left empty, keycloak will enable all event types
enabled_event_types = [
]
events_listeners = [
"jboss-logging", # keycloak enables the 'jboss-logging' event listener by default.
]
}
""";
var idpRealm = """
resource "keycloak_realm_events" "realm_events_%s" {
realm_id = "%s"
events_enabled = false
# There are 31,536,000 seconds in a year.
events_expiration = 31536000
admin_events_enabled = true
admin_events_details_enabled = true
# When omitted or left empty, keycloak will enable all event types
enabled_event_types = [
]
events_listeners = [
"jboss-logging", # keycloak enables the 'jboss-logging' event listener by default.
]
}
""";
var appRealms = Set.of("bcerd", "moh_citizen", "moh_applications", "lra", "master", "mhsu_foundry", "pidp_sandbox", "v2_pos");
var terraformResult = "";
terraformResult += """
######################
# APPLICATION REALMS #
######################
""";
for (String realm : realms) {
String event = "";
if (appRealms.contains(realm)) {
event = String.format(appRealm, realm, realm);
}
System.out.println(event);
terraformResult += event;
}
terraformResult += """
##############
# IDP REALMS #
##############
""";
for (String realm : realms) {
String event = "";
if (!appRealms.contains(realm)) {
event = String.format(idpRealm, realm, realm);
}
System.out.println(event);
terraformResult += event;
}
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection stringSelection = new StringSelection(terraformResult);
clipboard.setContents(stringSelection, null);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment