diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java index 41a94de2970cbaab05befaabbacd6e11f7ceaf2d..37ead81fe9fe65ffa642d2afd6604d879af12e46 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java @@ -23,6 +23,8 @@ */ package de.ozgcloud.operator.keycloak.realm; +import java.util.HashMap; +import java.util.Map; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -51,6 +53,7 @@ interface KeycloakRealmMapper { @Mapping(target = "internationalizationEnabled", constant = "true") @Mapping(target = "passwordPolicy", constant = "upperCase(1) and lowerCase(1) and length(8) and notUsername") @Mapping(target = "actionTokenGeneratedByUserLifespan", constant = "900") + @Mapping(target = "smtpServer", source = "smtpServer", qualifiedByName = "smtpServer") @Mapping(target = "roles", source = "realmRoles", qualifiedByName = "roles") public RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); @@ -59,6 +62,25 @@ interface KeycloakRealmMapper { return Set.of("de"); } + @Named("smtpServer") + default Map<String, String> mapSmtpServer(OzgCloudKeycloakRealmSpec.KeycloakRealmSMTPServer server) { + + Map<String, String> smtpServer = new HashMap<>(); + if (server != null) { + smtpServer.put("host", server.getHost()); + smtpServer.put("port", server.getPort()); + smtpServer.put("user", server.getUser()); + smtpServer.put("password", server.getPassword()); + smtpServer.put("starttls", server.getStarttls()); + smtpServer.put("auth", server.getAuth()); + smtpServer.put("from", server.getFrom()); + smtpServer.put("fromDisplayName", server.getFromDisplayName()); + } + return smtpServer; + + } + + @Named("roles") default RolesRepresentation maprealmRoles(List<OzgCloudKeycloakRealmSpec.RealmRole> realmRoles) { RolesRepresentation roles = new RolesRepresentation(); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java index c6b4130eb94c0a14a6f134573f59afeeca17113f..4154b4df7ae41c1510a7a2a067ed491558251082 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java @@ -48,6 +48,31 @@ class OzgCloudKeycloakRealmSpec { private String displayName; + private KeycloakRealmSMTPServer smtpServer; + + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + static class KeycloakRealmSMTPServer { + + private String user; + private String password; + + private String host; + private String port; + + private String starttls; + + private String auth; + + private String from; + + private String fromDisplayName; + } + + @Builder.Default private List<RealmRole> realmRoles = new ArrayList<>(); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java index beb114c4ba8420c218742d57876032ea07ee6888..287ded8992f18c436a27ac9318d0fc4cc9beff8b 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java @@ -90,6 +90,35 @@ class KeycloakRealmMapperTest { assertThat(mapped.getActionTokenGeneratedByUserLifespan()).isEqualTo(900); } + @Test + void shouldMapSmtpServer() { + var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create()); + + assertThat(mapped.getSmtpServer().size()).isEqualTo(8); + } + + @Test + void shouldContainSmtpServerKeysValues() { + var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create()); + + assertThat(mapped.getSmtpServer()) + .containsEntry("user", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_USER) + .containsEntry("password", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_PASSWORD) + .containsEntry("host", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_HOST) + .containsEntry("port", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_PORT) + .containsEntry("starttls", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_STARTTLS) + .containsEntry("auth", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_AUTH) + .containsEntry("from", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_FROM) + .containsEntry("fromDisplayName", KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_FROM_DISPLAY_NAME); + } + + @Test + void shouldMapWhenSmtpServerIsNull() { + var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.createBuilder().smtpServer(null).build()); + + assertThat(mapped.getSmtpServer()).isEmpty(); + } + @Test void shouldMapRealmRoles() { var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create()); diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmSmtpServerTestFactory.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmSmtpServerTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..66c03cbb20964ae3053b2745d36ac370fcdfc235 --- /dev/null +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmSmtpServerTestFactory.java @@ -0,0 +1,31 @@ +package de.ozgcloud.operator.keycloak.realm; + +import de.ozgcloud.operator.keycloak.realm.OzgCloudKeycloakRealmSpec.KeycloakRealmSMTPServer; + +public class KeycloakRealmSmtpServerTestFactory { + + public final static String SMTP_SERVER_PORT = "432"; + public final static String SMTP_SERVER_HOST = "host"; + public final static String SMTP_SERVER_FROM = "test@test.de"; + public final static String SMTP_SERVER_FROM_DISPLAY_NAME = "displayed name"; + public final static String SMTP_SERVER_USER = "user"; + public final static String SMTP_SERVER_PASSWORD = "psw"; + public final static String SMTP_SERVER_AUTH = "true"; + public final static String SMTP_SERVER_STARTTLS = "true"; + + public static OzgCloudKeycloakRealmSpec.KeycloakRealmSMTPServer create() { + return createBuilder().build(); + } + + public static OzgCloudKeycloakRealmSpec.KeycloakRealmSMTPServer.KeycloakRealmSMTPServerBuilder createBuilder() { + return KeycloakRealmSMTPServer.builder() + .host(SMTP_SERVER_HOST) + .user(SMTP_SERVER_USER) + .password(SMTP_SERVER_PASSWORD) + .port(SMTP_SERVER_PORT) + .starttls(SMTP_SERVER_STARTTLS) + .auth(SMTP_SERVER_AUTH) + .from(SMTP_SERVER_FROM) + .fromDisplayName(SMTP_SERVER_FROM_DISPLAY_NAME); + } +} diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java index d6e18669ec464498fe808c2237978090d271eaca..5c27b298f4f21487701334bbd9f0be3c1ccfd7d1 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java @@ -46,6 +46,7 @@ public class OzgCloudKeycloakRealmSpecTestFactory { return OzgCloudKeycloakRealmSpec.builder() .keepAfterDelete(KEEP_AFTER_DELETE) .displayName(DISPLAY_NAME) + .smtpServer(KeycloakRealmSmtpServerTestFactory.create()) .realmRoles(ROLES); } }