From b421b03575aaf6609e580716561c7a8794a46b15 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Fri, 15 Jan 2021 23:35:31 +0100 Subject: [PATCH] Fix Double token generation in SSO --- src/main/kotlin/component/auth/SsoManager.kt | 23 +++++++++----------- src/main/kotlin/component/citizen/Citizen.kt | 7 ++++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/component/auth/SsoManager.kt b/src/main/kotlin/component/auth/SsoManager.kt index 0ec9aeb..6a8aa45 100644 --- a/src/main/kotlin/component/auth/SsoManager.kt +++ b/src/main/kotlin/component/auth/SsoManager.kt @@ -6,6 +6,8 @@ import com.sendgrid.helpers.mail.objects.Email import fr.dcproject.JwtConfig import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenRepository +import fr.dcproject.component.citizen.CitizenWithEmail +import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.messages.Mailer import io.ktor.http.* @@ -22,34 +24,29 @@ class SsoManager( sendEmail(citizen, url) } - fun sendEmail(citizen: CitizenBasicI, url: String) { + fun sendEmail(citizen: C, url: String) where C : CitizenWithEmail, C : CitizenWithUserI { mailer.sendEmail { + val token = JwtConfig.makeToken(citizen.user) Mail( Email("sso@$domain"), "Connection", Email(citizen.email), - Content("text/plain", generateContent(citizen, url)) + Content("text/plain", generateContent(token, url)) ).apply { - addContent(Content("text/html", generateHtmlContent(citizen, url))) + addContent(Content("text/html", generateHtmlContent(token, url))) } } } - /** - * TODO pass token to the function to avoid double generations - */ - private fun generateHtmlContent(citizen: CitizenBasicI, url: String): String? { + private fun generateHtmlContent(token: String, url: String): String? { val urlObject = URLBuilder(url) - urlObject.parameters.append("token", JwtConfig.makeToken(citizen.user)) + urlObject.parameters.append("token", token) return "Click here for connect to $domain" } - /** - * TODO pass token to the function to avoid double generations - */ - private fun generateContent(citizen: CitizenBasicI, url: String): String { + private fun generateContent(token: String, url: String): String { val urlObject = URLBuilder(url) - urlObject.parameters.append("token", JwtConfig.makeToken(citizen.user)) + urlObject.parameters.append("token", token) return "Copy this link into your browser for connect to $domain: \n${urlObject.buildString()}" } diff --git a/src/main/kotlin/component/citizen/Citizen.kt b/src/main/kotlin/component/citizen/Citizen.kt index 5f3ccc3..0ba626e 100644 --- a/src/main/kotlin/component/citizen/Citizen.kt +++ b/src/main/kotlin/component/citizen/Citizen.kt @@ -91,9 +91,8 @@ interface CitizenI : UuidEntityI { } @Deprecated("") -interface CitizenBasicI : CitizenWithUserI, EntityDeletedAt { +interface CitizenBasicI : CitizenWithUserI, CitizenWithEmail, EntityDeletedAt { val name: Name - val email: String val birthday: DateTime val voteAnonymous: Boolean val followAnonymous: Boolean @@ -107,3 +106,7 @@ interface CitizenFull : CitizenBasicI { interface CitizenWithUserI : CitizenI { val user: UserI } + +interface CitizenWithEmail : CitizenI { + val email: String +}