Fix Double token generation in SSO

This commit is contained in:
2021-01-15 23:35:31 +01:00
parent 128510fe88
commit b421b03575
2 changed files with 15 additions and 15 deletions

View File

@@ -6,6 +6,8 @@ import com.sendgrid.helpers.mail.objects.Email
import fr.dcproject.JwtConfig import fr.dcproject.JwtConfig
import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenBasicI
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenRepository
import fr.dcproject.component.citizen.CitizenWithEmail
import fr.dcproject.component.citizen.CitizenWithUserI
import fr.dcproject.messages.Mailer import fr.dcproject.messages.Mailer
import io.ktor.http.* import io.ktor.http.*
@@ -22,34 +24,29 @@ class SsoManager(
sendEmail(citizen, url) sendEmail(citizen, url)
} }
fun sendEmail(citizen: CitizenBasicI, url: String) { fun <C> sendEmail(citizen: C, url: String) where C : CitizenWithEmail, C : CitizenWithUserI {
mailer.sendEmail { mailer.sendEmail {
val token = JwtConfig.makeToken(citizen.user)
Mail( Mail(
Email("sso@$domain"), Email("sso@$domain"),
"Connection", "Connection",
Email(citizen.email), Email(citizen.email),
Content("text/plain", generateContent(citizen, url)) Content("text/plain", generateContent(token, url))
).apply { ).apply {
addContent(Content("text/html", generateHtmlContent(citizen, url))) addContent(Content("text/html", generateHtmlContent(token, url)))
} }
} }
} }
/** private fun generateHtmlContent(token: String, url: String): String? {
* TODO pass token to the function to avoid double generations
*/
private fun generateHtmlContent(citizen: CitizenBasicI, url: String): String? {
val urlObject = URLBuilder(url) val urlObject = URLBuilder(url)
urlObject.parameters.append("token", JwtConfig.makeToken(citizen.user)) urlObject.parameters.append("token", token)
return "Click <a href=\"${urlObject.buildString()}\">here</a> for connect to $domain" return "Click <a href=\"${urlObject.buildString()}\">here</a> for connect to $domain"
} }
/** private fun generateContent(token: String, url: String): String {
* TODO pass token to the function to avoid double generations
*/
private fun generateContent(citizen: CitizenBasicI, url: String): String {
val urlObject = URLBuilder(url) 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()}" return "Copy this link into your browser for connect to $domain: \n${urlObject.buildString()}"
} }

View File

@@ -91,9 +91,8 @@ interface CitizenI : UuidEntityI {
} }
@Deprecated("") @Deprecated("")
interface CitizenBasicI : CitizenWithUserI, EntityDeletedAt { interface CitizenBasicI : CitizenWithUserI, CitizenWithEmail, EntityDeletedAt {
val name: Name val name: Name
val email: String
val birthday: DateTime val birthday: DateTime
val voteAnonymous: Boolean val voteAnonymous: Boolean
val followAnonymous: Boolean val followAnonymous: Boolean
@@ -107,3 +106,7 @@ interface CitizenFull : CitizenBasicI {
interface CitizenWithUserI : CitizenI { interface CitizenWithUserI : CitizenI {
val user: UserI val user: UserI
} }
interface CitizenWithEmail : CitizenI {
val email: String
}