From bb0bccc3c0b01cdcdc102017a0f3f63f19c70681 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira da Silva Date: Mon, 2 Oct 2017 08:14:50 -0300 Subject: [PATCH] [KEYCLOAK-5486] Test email connection feature does not work the second time (#4517) --- .../resources/admin/RealmAdminResource.java | 3 ++ .../testsuite/admin/SMTPConnectionTest.java | 28 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java index ebc89bea62..3d09f93b8c 100644 --- a/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/RealmAdminResource.java @@ -833,6 +833,9 @@ public class RealmAdminResource { if (user.getEmail() == null) { return ErrorResponse.error("Logged in user does not have an e-mail.", Response.Status.INTERNAL_SERVER_ERROR); } + if (ComponentRepresentation.SECRET_VALUE.equals(settings.get("password"))) { + settings.put("password", realm.getSmtpConfig().get("password")); + } session.getProvider(EmailTemplateProvider.class).sendSmtpTestEmail(settings, user); } catch (Exception e) { e.printStackTrace(); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/SMTPConnectionTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/SMTPConnectionTest.java index 303cfd65ad..ac7a947fab 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/SMTPConnectionTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/SMTPConnectionTest.java @@ -35,6 +35,7 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import static org.keycloak.representations.idm.ComponentRepresentation.SECRET_VALUE; import static org.keycloak.util.JsonSerialization.writeValueAsPrettyString; /** @@ -60,6 +61,11 @@ public class SMTPConnectionTest extends AbstractKeycloakTest { private String settings(String host, String port, String from, String auth, String ssl, String starttls, String username, String password) throws Exception { + Map config = smtpMap(host, port, from, auth, ssl, starttls, username, password); + return writeValueAsPrettyString(config); + } + + private Map smtpMap(String host, String port, String from, String auth, String ssl, String starttls, String username, String password) { Map config = new HashMap<>(); config.put("host", host); config.put("port", port); @@ -69,7 +75,7 @@ public class SMTPConnectionTest extends AbstractKeycloakTest { config.put("starttls", starttls); config.put("user", username); config.put("password", password); - return writeValueAsPrettyString(config); + return config; } @Test @@ -102,6 +108,26 @@ public class SMTPConnectionTest extends AbstractKeycloakTest { assertStatus(response, 204); } + @Test + public void testAuthEnabledAndSavedCredentials() throws Exception { + RealmRepresentation realmRep = realm.toRepresentation(); + Map oldSmtp = realmRep.getSmtpServer(); + try { + realmRep.setSmtpServer(smtpMap("127.0.0.1", "3025", "auto@keycloak.org", "true", null, null, + "admin@localhost", "admin")); + realm.update(realmRep); + + greenMailRule.credentials("admin@localhost", "admin"); + Response response = realm.testSMTPConnection(settings("127.0.0.1", "3025", "auto@keycloak.org", "true", null, null, + "admin@localhost", SECRET_VALUE)); + assertStatus(response, 204); + } finally { + // Revert SMTP back + realmRep.setSmtpServer(oldSmtp); + realm.update(realmRep); + } + } + private void assertStatus(Response response, int status) { assertEquals(status, response.getStatus()); response.close();