Skip to content

Commit

Permalink
905: fix sending email with local config
Browse files Browse the repository at this point in the history
  • Loading branch information
sarahsporck committed May 8, 2023
1 parent a6055b1 commit 3146a1a
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const NotificationSettings = ({ projectId }: NotificationSettingsProps) => {
<Checkbox
checked={receiveEmailForVerification}
onChange={e => setReceiveEmailForVerification(e.currentTarget.checked)}
label='Antragverifizierungen'
label='Antragsverifizierungen'
/>
<div style={{ textAlign: 'right', padding: '10px 0' }}>
<Button text={'Speichern'} intent={'primary'} type='submit' loading={loading} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ import app.ehrenamtskarte.backend.regions.database.repos.RegionsRepository
import com.expediagroup.graphql.generator.annotations.GraphQLDescription
import graphql.schema.DataFetchingEnvironment
import org.jetbrains.exposed.sql.transactions.transaction
import java.net.URLEncoder
import java.nio.charset.StandardCharsets

@Suppress("unused")
class ManageUsersMutationService {
Expand All @@ -34,7 +32,8 @@ class ManageUsersMutationService {
): Boolean {
val context = dfe.getContext<GraphQLContext>()
val jwtPayload = context.enforceSignedIn()
val projectConfig = context.backendConfiguration.projects.first { it.id == project }
val backendConfig = context.backendConfiguration
val projectConfig = backendConfig.projects.first { it.id == project }

transaction {
val actingAdmin = AdministratorEntity.findById(jwtPayload.adminId) ?: throw UnauthorizedException()
Expand All @@ -54,18 +53,11 @@ class ManageUsersMutationService {

if (sendWelcomeMail) {
val key = AdministratorsRepository.setNewPasswordResetKey(newUser)
Mailer.sendMail(
context.backendConfiguration,
projectConfig.smtp,
projectConfig.administrationName,
email,
"Kontoerstellung",
generateWelcomeMailMessage(
key,
projectConfig.administrationName,
projectConfig.administrationBaseUrl,
email
)
Mailer.sendWelcomeMail(
backendConfig,
projectConfig,
key,
email
)
}
}
Expand Down Expand Up @@ -134,25 +126,4 @@ class ManageUsersMutationService {
}
return true
}

private fun generateWelcomeMailMessage(
key: String,
administrationName: String,
administrationBaseUrl: String,
email: String
): String {
return """
Guten Tag,
für Sie wurde ein Account für $administrationName erstellt.
Sie können Ihr Passwort unter dem folgenden Link setzen:
$administrationBaseUrl/reset-password?email=${URLEncoder.encode(email, StandardCharsets.UTF_8)}&token=${URLEncoder.encode(key, StandardCharsets.UTF_8)}
Dieser Link ist 24 Stunden gültig.
Dies ist eine automatisierte Nachricht. Antworten Sie nicht auf diese Email.
- $administrationName
""".trimIndent()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.select
import org.jetbrains.exposed.sql.transactions.transaction
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
import java.time.Instant

@Suppress("unused")
Expand All @@ -31,39 +29,11 @@ class ResetPasswordMutationService {
.single().let { AdministratorEntity.wrapRow(it) }

val key = AdministratorsRepository.setNewPasswordResetKey(user)
Mailer.sendMail(
backendConfig,
projectConfig.smtp,
projectConfig.administrationName,
email,
"Passwort Zurücksetzen",
generateResetMailMessage(key, projectConfig.administrationName, projectConfig.administrationBaseUrl, email)
)
Mailer.sendResetPasswodMail(backendConfig, projectConfig, key, email)
}
return true
}

private fun generateResetMailMessage(
key: String,
administrationName: String,
administrationBaseUrl: String,
email: String
): String {
return """
Guten Tag,
Sie haben angefragt, Ihr Passwort für $administrationName zurückzusetzen.
Sie können Ihr Passwort unter dem folgenden Link zurücksetzen:
$administrationBaseUrl/reset-password?email=${URLEncoder.encode(email, StandardCharsets.UTF_8)}&token=${URLEncoder.encode(key, StandardCharsets.UTF_8)}
Dieser Link ist 24 Stunden gültig.
Dies ist eine automatisierte Nachricht. Antworten Sie nicht auf diese Email.
- $administrationName
""".trimIndent()
}

@GraphQLDescription("Reset the administrator's password")
fun resetPassword(project: String, email: String, passwordResetKey: String, newPassword: String): Boolean {
transaction {
Expand Down
76 changes: 64 additions & 12 deletions backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ import java.net.URLEncoder
import java.nio.charset.StandardCharsets

object Mailer {
val DO_NOT_ANSWER_MESSAGE = "Dies ist eine automatisierte Nachricht. Bitte antworten Sie nicht auf diese Email."

fun sendMail(
private fun sendMail(
backendConfig: BackendConfiguration,
smtpConfig: SmtpConfig,
fromName: String,
Expand All @@ -40,7 +41,7 @@ object Mailer {
""".trimIndent() + message
)

if (!JMail.isValid(fromName)) {
if (!JMail.isValid(smtpConfig.username)) {
return
}
}
Expand Down Expand Up @@ -72,13 +73,13 @@ object Mailer {
val message = """
Guten Tag,
Ein neuer Antrag liegt in ${projectConfig.administrationName} vor.
ein neuer Antrag liegt in ${projectConfig.administrationName} vor.
Sie können neue Anträge direkt unter ${projectConfig.administrationBaseUrl}/applications einsehen und bearbeiten.
Falls Sie keine weiteren Benachrichtigungen zu neuen Anträgen erhalten möchten können Sie dies unter ${projectConfig.administrationBaseUrl}/user-settings deaktivieren.
Falls Sie keine weiteren Benachrichtigungen zu neuen Anträgen erhalten möchten, können Sie dies unter ${projectConfig.administrationBaseUrl}/user-settings deaktivieren.
$DO_NOT_ANSWER_MESSAGE
Dies ist eine automatisierte Nachricht. Antworten Sie nicht auf diese Email.
- ${projectConfig.administrationName}
""".trimIndent()
for (recipient: AdministratorEntity in recipients) {
Expand All @@ -104,12 +105,12 @@ object Mailer {
val message = """
Guten Tag,
Ein ein Antrag ist Verifiziert worden.
ein Antrag ist verifiziert worden.
Sie können Anträge direkt unter ${projectConfig.administrationBaseUrl}/applications einsehen und bearbeiten.
Falls Sie keine weiteren Benachrichtigungen zu neuen Anträgen erhalten möchten können Sie dies unter ${projectConfig.administrationBaseUrl}/user-settings deaktivieren.
Dies ist eine automatisierte Nachricht. Antworten Sie nicht auf diese Email.
$DO_NOT_ANSWER_MESSAGE
- ${projectConfig.administrationName}
""".trimIndent()
Expand All @@ -120,7 +121,7 @@ object Mailer {
projectConfig.smtp,
projectConfig.administrationName,
recipient.email,
"Ein neuer Antrag ist eingegangen",
"Ein Antrag ist verifiziert worden",
message
)
} catch (_: MailException) {}
Expand All @@ -136,7 +137,7 @@ object Mailer {
Sie können den Antrag unter folgendem Link einsehen und die Angaben bestätigen oder ihnen widersprechen:
${projectConfig.administrationBaseUrl}/antrag-verifizieren/${URLEncoder.encode(applicationVerification.accessKey, StandardCharsets.UTF_8)}
Dies ist eine automatisierte Nachricht. Antworten Sie nicht auf diese Email.
$DO_NOT_ANSWER_MESSAGE
- ${projectConfig.administrationName}
""".trimIndent()
Expand All @@ -145,7 +146,7 @@ object Mailer {
projectConfig.smtp,
projectConfig.administrationName,
applicationVerification.contactEmailAddress,
"Antrag Verifizieren",
"Bestätigung notwendig: Antrag auf Bayerische Ehrenamtskarte",
message
)
}
Expand All @@ -164,7 +165,7 @@ object Mailer {
Sie können den Status Ihres Antrags unter folgendem Link einsehen. Falls gewünscht, können Sie Ihren Antrag dort auch zurückziehen:
${projectConfig.administrationBaseUrl}/antrag-einsehen/${URLEncoder.encode(accessKey, StandardCharsets.UTF_8)}
Dies ist eine automatisierte Nachricht. Antworten Sie nicht auf diese Email.
$DO_NOT_ANSWER_MESSAGE
- ${projectConfig.administrationName}
""".trimIndent()
Expand All @@ -177,4 +178,55 @@ object Mailer {
message
)
}

fun sendResetPasswodMail(
backendConfig: BackendConfiguration,
projectConfig: ProjectConfig,
passwortResetKey: String,
recipient: String
) {
val message = """
Guten Tag,
Sie haben angefragt, Ihr Passwort für ${projectConfig.administrationName} zurückzusetzen.
Sie können Ihr Passwort unter dem folgenden Link zurücksetzen:
${projectConfig.administrationBaseUrl}/reset-password?email=${URLEncoder.encode(recipient, StandardCharsets.UTF_8)}&token=${URLEncoder.encode(passwortResetKey, StandardCharsets.UTF_8)}
Dieser Link ist 24 Stunden gültig.
$DO_NOT_ANSWER_MESSAGE
- ${projectConfig.administrationName}
""".trimIndent()
sendMail(
backendConfig,
projectConfig.smtp,
projectConfig.administrationName,
recipient,
"Passwort Zurücksetzen",
message
)
}

fun sendWelcomeMail(
backendConfig: BackendConfiguration,
projectConfig: ProjectConfig,
passwordResetKey: String,
recipient: String
) {
val message = """
Guten Tag,
für Sie wurde ein Account für ${projectConfig.administrationName} erstellt.
Sie können Ihr Passwort unter dem folgenden Link setzen:
${projectConfig.administrationBaseUrl}/reset-password?email=${URLEncoder.encode(recipient, StandardCharsets.UTF_8)}&token=${URLEncoder.encode(passwordResetKey, StandardCharsets.UTF_8)}
Dieser Link ist 24 Stunden gültig.
$DO_NOT_ANSWER_MESSAGE
- ${projectConfig.administrationName}
""".trimIndent()
sendMail(backendConfig, projectConfig.smtp, projectConfig.administrationName, recipient, "Kontoerstellung", message)
}
}

0 comments on commit 3146a1a

Please sign in to comment.