From 797534bd63e339e3726a7bd41ef928a5800f69fa Mon Sep 17 00:00:00 2001 From: Peyman Date: Wed, 12 Oct 2022 19:31:51 +0330 Subject: [PATCH 1/6] Start email template --- docker-compose.yml | 2 + user-management/keycloak-gateway/pom.xml | 5 + .../providers/CustomEmailTemplateProvider.kt | 104 +++++++++ .../CustomEmailTemplateProviderFactory.kt | 30 +++ ...eycloak.email.EmailTemplateProviderFactory | 1 + .../email-templates/verify-email.html | 219 ++++++++++++++++++ 6 files changed, 361 insertions(+) create mode 100644 user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt create mode 100644 user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProviderFactory.kt create mode 100644 user-management/keycloak-gateway/src/main/resources/META-INF/services/org.keycloak.email.EmailTemplateProviderFactory create mode 100644 user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html diff --git a/docker-compose.yml b/docker-compose.yml index f5955b9dc..5802590f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -282,6 +282,8 @@ services: - VAULT_URL=http://vault:8200 - VAULT_HOST=vault - PREFERENCES=$PREFERENCES + - APP_NAME=$APP_NAME + - APP_BASE_URL=$APP_BASE_URL depends_on: - captcha - kafka-1 diff --git a/user-management/keycloak-gateway/pom.xml b/user-management/keycloak-gateway/pom.xml index 2cb252f8b..eae08a7a1 100644 --- a/user-management/keycloak-gateway/pom.xml +++ b/user-management/keycloak-gateway/pom.xml @@ -96,6 +96,11 @@ org.springframework.cloud spring-cloud-starter-vault-config + + org.jsoup + jsoup + 1.15.3 + org.springframework.kafka spring-kafka-test diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt new file mode 100644 index 000000000..3b8e2e1cf --- /dev/null +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt @@ -0,0 +1,104 @@ +package co.nilin.opex.auth.gateway.providers + +import co.nilin.opex.auth.gateway.ApplicationContextHolder +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.keycloak.email.EmailTemplateProvider +import org.keycloak.events.Event +import org.keycloak.models.KeycloakSession +import org.keycloak.models.RealmModel +import org.keycloak.models.UserModel +import org.keycloak.sessions.AuthenticationSessionModel +import org.springframework.util.ResourceUtils +import java.io.File + +class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailTemplateProvider { + + private var authenticationSession: AuthenticationSessionModel? = null + private var realm: RealmModel? = null + private var user: UserModel? = null + private var attributes = HashMap() + private val appName by lazy { + ApplicationContextHolder.getCurrentContext()!!.environment.resolvePlaceholders("\${APP_NAME}") + } + private val baseUrl by lazy { + ApplicationContextHolder.getCurrentContext()!!.environment.resolvePlaceholders("\${APP_BASE_URL}") + } + + override fun setAuthenticationSession(authenticationSession: AuthenticationSessionModel?): EmailTemplateProvider { + this.authenticationSession = authenticationSession + return this + } + + override fun setRealm(realm: RealmModel?): EmailTemplateProvider { + this.realm = realm + return this + } + + override fun setUser(user: UserModel?): EmailTemplateProvider { + this.user = user + return this + } + + override fun setAttribute(name: String?, value: Any?): EmailTemplateProvider { + if (name != null && value != null) + attributes[name] = value + return this + } + + override fun sendEvent(event: Event?) { + TODO("Not yet implemented") + } + + override fun sendPasswordReset(link: String?, expirationInMinutes: Long) { + val template = getTemplateAsDocument("verify-email.html").apply { + getElementById("name")?.attr("value", appName) + getElementById("baseUrl")?.attr("value", baseUrl) + } + } + + override fun sendSmtpTestEmail(config: MutableMap?, user: UserModel?) { + TODO("Not yet implemented") + } + + override fun sendConfirmIdentityBrokerLink(link: String?, expirationInMinutes: Long) { + TODO("Not yet implemented") + } + + override fun sendExecuteActions(link: String?, expirationInMinutes: Long) { + val template = getTemplateAsDocument("verify-email.html").apply { + getElementById("name")?.attr("value", appName) + getElementById("baseUrl")?.attr("value", baseUrl) + } + } + + override fun sendVerifyEmail(link: String?, expirationInMinutes: Long) { + val template = getTemplateAsDocument("verify-email.html").apply { + getElementById("name")?.attr("value", appName) + getElementById("baseUrl")?.attr("value", baseUrl) + } + } + + override fun send(subjectFormatKey: String?, bodyTemplate: String?, bodyAttributes: MutableMap?) { + TODO("Not yet implemented") + } + + override fun send( + subjectFormatKey: String?, + subjectAttributes: MutableList?, + bodyTemplate: String?, + bodyAttributes: MutableMap? + ) { + TODO("Not yet implemented") + } + + override fun close() {} + + private fun getTemplate(fileName: String): File { + return ResourceUtils.getFile("email-templates/$fileName") + } + + private fun getTemplateAsDocument(fileName: String): Document { + return Jsoup.parse(getTemplate(fileName)) + } +} \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProviderFactory.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProviderFactory.kt new file mode 100644 index 000000000..f28414bc0 --- /dev/null +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProviderFactory.kt @@ -0,0 +1,30 @@ +package co.nilin.opex.auth.gateway.providers + +import org.keycloak.Config +import org.keycloak.email.EmailTemplateProvider +import org.keycloak.email.EmailTemplateProviderFactory +import org.keycloak.models.KeycloakSession +import org.keycloak.models.KeycloakSessionFactory + +class CustomEmailTemplateProviderFactory : EmailTemplateProviderFactory { + + override fun create(session: KeycloakSession): EmailTemplateProvider { + return CustomEmailTemplateProvider(session) + } + + override fun init(config: Config.Scope?) { + + } + + override fun postInit(factory: KeycloakSessionFactory?) { + + } + + override fun close() { + + } + + override fun getId(): String { + return "custom-email-template" + } +} \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/META-INF/services/org.keycloak.email.EmailTemplateProviderFactory b/user-management/keycloak-gateway/src/main/resources/META-INF/services/org.keycloak.email.EmailTemplateProviderFactory new file mode 100644 index 000000000..e280b2467 --- /dev/null +++ b/user-management/keycloak-gateway/src/main/resources/META-INF/services/org.keycloak.email.EmailTemplateProviderFactory @@ -0,0 +1 @@ +co.nilin.opex.auth.gateway.providers.CustomEmailTemplateProviderFactory \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html b/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html new file mode 100644 index 000000000..9cfd4270c --- /dev/null +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html @@ -0,0 +1,219 @@ + + + + + + Email Verification + + + + + + + + + + + + + + + + + \ No newline at end of file From e20bce9a0e168767cafb3e93991d62e0e8784711 Mon Sep 17 00:00:00 2001 From: Peyman Date: Sat, 15 Oct 2022 16:46:32 +0330 Subject: [PATCH 2/6] Add templates --- .../extension/UserManagementResource.kt | 6 +- .../providers/CustomEmailTemplateProvider.kt | 50 ++-- .../email-templates/execute-action.html | 219 ++++++++++++++++++ .../email-templates/password-reset.html | 219 ++++++++++++++++++ .../resources/email-templates/test-smtp.html | 215 +++++++++++++++++ 5 files changed, 691 insertions(+), 18 deletions(-) create mode 100644 user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html create mode 100644 user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html create mode 100644 user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/extension/UserManagementResource.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/extension/UserManagementResource.kt index 38623607f..0ec1108c9 100644 --- a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/extension/UserManagementResource.kt +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/extension/UserManagementResource.kt @@ -5,6 +5,7 @@ import co.nilin.opex.auth.gateway.data.* import co.nilin.opex.auth.gateway.model.ActionTokenResult import co.nilin.opex.auth.gateway.model.AuthEvent import co.nilin.opex.auth.gateway.model.UserCreatedEvent +import co.nilin.opex.auth.gateway.providers.CustomEmailTemplateProvider import co.nilin.opex.auth.gateway.utils.* import co.nilin.opex.utility.error.data.OpexError import co.nilin.opex.utility.error.data.OpexException @@ -377,13 +378,14 @@ class UserManagementResource(private val session: KeycloakSession) : RealmResour private fun sendEmail(user: UserModel, sendAction: (EmailTemplateProvider) -> Unit) { if (!user.isEnabled) throw OpexException(OpexError.BadRequest, "User is disabled") - val clientId = Constants.ACCOUNT_MANAGEMENT_CLIENT_ID val client = session.clients().getClientByClientId(opexRealm, clientId) if (client == null || !client.isEnabled) throw OpexException(OpexError.BadRequest, "Client error") try { - val provider = session.getProvider(EmailTemplateProvider::class.java) + val provider = session.getAllProviders(EmailTemplateProvider::class.java) + .find { it is CustomEmailTemplateProvider }!! + //val provider = session.getProvider(CustomEmailTemplateProvider::class.java) sendAction(provider.setRealm(opexRealm).setUser(user)) } catch (e: Exception) { logger.error("Unable to send verification email") diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt index 3b8e2e1cf..f49d27896 100644 --- a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt @@ -3,14 +3,14 @@ package co.nilin.opex.auth.gateway.providers import co.nilin.opex.auth.gateway.ApplicationContextHolder import org.jsoup.Jsoup import org.jsoup.nodes.Document +import org.keycloak.email.EmailSenderProvider import org.keycloak.email.EmailTemplateProvider import org.keycloak.events.Event import org.keycloak.models.KeycloakSession import org.keycloak.models.RealmModel import org.keycloak.models.UserModel import org.keycloak.sessions.AuthenticationSessionModel -import org.springframework.util.ResourceUtils -import java.io.File +import org.springframework.core.io.ClassPathResource class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailTemplateProvider { @@ -51,14 +51,17 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT } override fun sendPasswordReset(link: String?, expirationInMinutes: Long) { - val template = getTemplateAsDocument("verify-email.html").apply { - getElementById("name")?.attr("value", appName) - getElementById("baseUrl")?.attr("value", baseUrl) + val template = processTemplate("password-reset.html") { + getElementById("action-button")?.attr("href", link ?: "") } + send("Reset password", template.html(), "Please click on the link below to reset password\n $link") } override fun sendSmtpTestEmail(config: MutableMap?, user: UserModel?) { - TODO("Not yet implemented") + val template = processTemplate("execute-action.html") { + getElementById("action-button")?.attr("href", "/where-link-goes") + } + send("SMTP test email", template.html(), "This is a test email") } override fun sendConfirmIdentityBrokerLink(link: String?, expirationInMinutes: Long) { @@ -66,21 +69,21 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT } override fun sendExecuteActions(link: String?, expirationInMinutes: Long) { - val template = getTemplateAsDocument("verify-email.html").apply { - getElementById("name")?.attr("value", appName) - getElementById("baseUrl")?.attr("value", baseUrl) + val template = processTemplate("execute-action.html") { + getElementById("action-button")?.attr("href", link ?: "") } + send("Execute actions", template.html(), "Please click on the link below to execute actions\n $link") } override fun sendVerifyEmail(link: String?, expirationInMinutes: Long) { - val template = getTemplateAsDocument("verify-email.html").apply { - getElementById("name")?.attr("value", appName) - getElementById("baseUrl")?.attr("value", baseUrl) + val template = processTemplate("verify-email.html") { + getElementById("action-button")?.attr("href", link ?: "") } + send("Verify email", template.html(), "Please click on the link below to verify email\n $link") } override fun send(subjectFormatKey: String?, bodyTemplate: String?, bodyAttributes: MutableMap?) { - TODO("Not yet implemented") + send(subjectFormatKey, mutableListOf(), bodyTemplate, bodyAttributes) } override fun send( @@ -89,13 +92,28 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT bodyTemplate: String?, bodyAttributes: MutableMap? ) { - TODO("Not yet implemented") + + } + + private fun send(subject: String, body: String, textBody: String) { + val emailSender = session.getProvider(EmailSenderProvider::class.java) + emailSender.send(realm?.smtpConfig, user, subject, textBody, body) + } + + private fun processTemplate(fileName: String, docBuilder: Document.() -> Unit): Document { + return getTemplateAsDocument(fileName).apply { + getElementById("name")?.attr("value", appName) + getElementById("baseUrl")?.attr("value", baseUrl) + docBuilder(this) + } } override fun close() {} - private fun getTemplate(fileName: String): File { - return ResourceUtils.getFile("email-templates/$fileName") + private fun getTemplate(fileName: String): String { + return ClassPathResource("email-templates/$fileName").inputStream + .bufferedReader() + .use { it.readText() } } private fun getTemplateAsDocument(fileName: String): Document { diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html b/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html new file mode 100644 index 000000000..73afd1780 --- /dev/null +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html @@ -0,0 +1,219 @@ + + + + + + Email Verification + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html b/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html new file mode 100644 index 000000000..00224aae3 --- /dev/null +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html @@ -0,0 +1,219 @@ + + + + + + Email Verification + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html b/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html new file mode 100644 index 000000000..3d69e47ff --- /dev/null +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html @@ -0,0 +1,215 @@ + + + + + + Email Verification + + + + + + + + + + + + + + + + + \ No newline at end of file From 26ab272be9b0da7f7b332bff70c914b44d93aae8 Mon Sep 17 00:00:00 2001 From: Peyman Date: Sat, 15 Oct 2022 17:48:13 +0330 Subject: [PATCH 3/6] Fix whitelist config --- .../opex/auth/gateway/config/WhitelistConfig.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/config/WhitelistConfig.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/config/WhitelistConfig.kt index abd3742f3..5c0701945 100644 --- a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/config/WhitelistConfig.kt +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/config/WhitelistConfig.kt @@ -14,25 +14,25 @@ class WhitelistConfig(private val preferences: Preferences) { @Bean("whitelist") fun whitelist(): Whitelist { - val whitelist = with(preferences.auth.whitelist) { + with(preferences.auth.whitelist) { val file = File(file) if (!enabled) { logger.info("whitelist disabled by preferences") - Whitelist() + return Whitelist() } if (!file.exists()) { logger.info("whitelist file doesn't exists") - Whitelist() + return Whitelist() } val list = file.readLines().onEach { it.trim().toLowerCase() } - Whitelist(list.isNotEmpty(), list) - } - logger.info("whitelist enabled: ${whitelist.isEnabled}") - logger.info("whitelist emails: ${whitelist.emails}") - return whitelist + logger.info("whitelist enabled: ${list.isNotEmpty()}") + logger.info("whitelist emails: $list") + + return Whitelist(list.isNotEmpty(), list) + } } } \ No newline at end of file From 722d77250632f37117fbed2ab4f94dacd0a23abe Mon Sep 17 00:00:00 2001 From: Peyman Date: Sat, 15 Oct 2022 18:33:37 +0330 Subject: [PATCH 4/6] Set logo and app name in email HTMLs --- .../auth/gateway/providers/CustomEmailTemplateProvider.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt index f49d27896..b2897bad3 100644 --- a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt @@ -102,8 +102,12 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT private fun processTemplate(fileName: String, docBuilder: Document.() -> Unit): Document { return getTemplateAsDocument(fileName).apply { - getElementById("name")?.attr("value", appName) - getElementById("baseUrl")?.attr("value", baseUrl) + getElementById("site")?.attr("href", baseUrl) + getElementById("logo")?.attr("src", "$baseUrl/assets/logo/logo.svg") + getElementById("link")?.apply { + attr("href", baseUrl) + text(appName) + } docBuilder(this) } } From 13c2a343068ab412813def5fea198a0ac62e185d Mon Sep 17 00:00:00 2001 From: Peyman Date: Sun, 16 Oct 2022 12:55:46 +0330 Subject: [PATCH 5/6] Removed scripts in html templates --- .../resources/email-templates/execute-action.html | 12 ------------ .../resources/email-templates/password-reset.html | 12 ------------ .../main/resources/email-templates/test-smtp.html | 12 ------------ .../main/resources/email-templates/verify-email.html | 12 ------------ 4 files changed, 48 deletions(-) diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html b/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html index 73afd1780..034eda9cc 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html @@ -203,17 +203,5 @@   - \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html b/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html index 00224aae3..349323157 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html @@ -203,17 +203,5 @@   - \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html b/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html index 3d69e47ff..11079f1ab 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html @@ -199,17 +199,5 @@   - \ No newline at end of file diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html b/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html index 9cfd4270c..05642d2be 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html @@ -203,17 +203,5 @@   - \ No newline at end of file From 38bd81e7b5550108ffe52c192b26c5f1f7dddc28 Mon Sep 17 00:00:00 2001 From: Peyman Date: Sun, 16 Oct 2022 15:12:34 +0330 Subject: [PATCH 6/6] Update email subjects --- .../providers/CustomEmailTemplateProvider.kt | 14 ++++++++------ .../resources/email-templates/execute-action.html | 5 +---- .../resources/email-templates/password-reset.html | 5 +---- .../main/resources/email-templates/test-smtp.html | 5 +---- .../resources/email-templates/verify-email.html | 5 +---- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt index b2897bad3..36a8ac2a9 100644 --- a/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt +++ b/user-management/keycloak-gateway/src/main/kotlin/co/nilin/opex/auth/gateway/providers/CustomEmailTemplateProvider.kt @@ -54,14 +54,14 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT val template = processTemplate("password-reset.html") { getElementById("action-button")?.attr("href", link ?: "") } - send("Reset password", template.html(), "Please click on the link below to reset password\n $link") + send("$appName reset password", template.html(), "Please click on the link below to reset password\n $link") } override fun sendSmtpTestEmail(config: MutableMap?, user: UserModel?) { val template = processTemplate("execute-action.html") { getElementById("action-button")?.attr("href", "/where-link-goes") } - send("SMTP test email", template.html(), "This is a test email") + send("$appName SMTP test email", template.html(), "This is a test email") } override fun sendConfirmIdentityBrokerLink(link: String?, expirationInMinutes: Long) { @@ -72,14 +72,14 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT val template = processTemplate("execute-action.html") { getElementById("action-button")?.attr("href", link ?: "") } - send("Execute actions", template.html(), "Please click on the link below to execute actions\n $link") + send("$appName execute actions", template.html(), "Please click on the link below to execute actions\n $link") } override fun sendVerifyEmail(link: String?, expirationInMinutes: Long) { val template = processTemplate("verify-email.html") { getElementById("action-button")?.attr("href", link ?: "") } - send("Verify email", template.html(), "Please click on the link below to verify email\n $link") + send("$appName verify email", template.html(), "Please click on the link below to verify email\n $link") } override fun send(subjectFormatKey: String?, bodyTemplate: String?, bodyAttributes: MutableMap?) { @@ -102,8 +102,10 @@ class CustomEmailTemplateProvider(private val session: KeycloakSession) : EmailT private fun processTemplate(fileName: String, docBuilder: Document.() -> Unit): Document { return getTemplateAsDocument(fileName).apply { - getElementById("site")?.attr("href", baseUrl) - getElementById("logo")?.attr("src", "$baseUrl/assets/logo/logo.svg") + getElementById("site")?.apply { + attr("href", baseUrl) + text(appName) + } getElementById("link")?.apply { attr("href", baseUrl) text(appName) diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html b/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html index 034eda9cc..939b8a962 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/execute-action.html @@ -112,10 +112,7 @@ - - + diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html b/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html index 349323157..3b3718179 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/password-reset.html @@ -112,10 +112,7 @@ - - + diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html b/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html index 11079f1ab..a53a36aab 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/test-smtp.html @@ -112,10 +112,7 @@ - - + diff --git a/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html b/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html index 05642d2be..51d4453b1 100644 --- a/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html +++ b/user-management/keycloak-gateway/src/main/resources/email-templates/verify-email.html @@ -112,10 +112,7 @@ - - +