Skip to content

Commit

Permalink
Merge pull request #231 from VAuthenticator/uniform-mail-to-email-in-…
Browse files Browse the repository at this point in the history
…the-code

Uniform mail to email in the code
  • Loading branch information
mrFlick72 authored Jun 23, 2024
2 parents d9de019 + 71371b2 commit 8719164
Show file tree
Hide file tree
Showing 50 changed files with 315 additions and 318 deletions.
2 changes: 1 addition & 1 deletion application.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM alpine:latest as security_provider
FROM alpine:latest AS security_provider
RUN addgroup -S application \
&& adduser -S application -G application

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<body>

Hi {{ firstName }} {{ lastName }} your registration has been completed.</br>
Please click <a href="{{ verificationMailLink }}">hear to activate your user</a>
Please click <a href="{{ verificationEMailLink }}">hear to activate your user</a>

</body>
</html>
4 changes: 2 additions & 2 deletions local-environment/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ event:
enable:
logger-event-consumer: true

no-reply:
mail:
no-reply: #todo update helm chart too
email:
from: "[email protected]"
welcomeMailSubject: "welcome mail"
verificationMailSubject: "verification mail"
Expand Down
8 changes: 3 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.0</version>
<version>3.3.1</version>
<relativePath/>
</parent>

Expand All @@ -23,13 +23,11 @@

<vauthenticator-starters.version>0.7</vauthenticator-starters.version>
<io.mockk.version>1.13.11</io.mockk.version>
<aws.sdk.version>2.25.57</aws.sdk.version>
<aws.sdk.version>2.26.6</aws.sdk.version>
<greenmail.version>2.1.0-rc-1</greenmail.version>
<oauth2-authorization-server.version>1.3.0</oauth2-authorization-server.version>
<oauth2-authorization-server.version>1.3.1</oauth2-authorization-server.version>
<wiremock.version>3.0.1</wiremock.version>
<two-factor-auth.version>1.3</two-factor-auth.version>

<spring-security.version>6.3.0</spring-security.version>
</properties>

<dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ interface SuccessfulMailVerifyPagePageProps {
rawI18nMessages: string
}

const SuccessfulMailVerifyPage: React.FC<SuccessfulMailVerifyPagePageProps> = ({rawI18nMessages}) => {
const SuccessfulEMailVerifyPage: React.FC<SuccessfulMailVerifyPagePageProps> = ({rawI18nMessages}) => {
let i18nMessages = JSON.parse(rawI18nMessages);

return (
Expand All @@ -34,4 +34,4 @@ const SuccessfulMailVerifyPage: React.FC<SuccessfulMailVerifyPagePageProps> = ({

const i18nMessages = getDataFromDomUtils('i18nMessages')

ComponentInitializer(<SuccessfulMailVerifyPage rawI18nMessages={i18nMessages}/>)
ComponentInitializer(<SuccessfulEMailVerifyPage rawI18nMessages={i18nMessages}/>)
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ const ResetPasswordChallengeSender: React.FC<ResetPasswordChallengeSenderPagePro
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({"mail": email}),
body: JSON.stringify({"email": email}),
credentials: 'same-origin'
});
if (r.status === 204) {
window.location.href = "/reset-password/successful-reset-password-mail-challenge";
window.location.href = "/reset-password/successful-reset-password-email-challenge";
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/frontend/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ module.exports = {
changePassword: path.resolve(__dirname, './app/change-password/index.tsx'),
signup: path.resolve(__dirname, './app/signup/SignUpPage.tsx'),
successfulSignUp: path.resolve(__dirname, './app/signup/SuccessfulSignUpPage.tsx'),
successfulMailVerify: path.resolve(__dirname, './app/mail-verify/SuccessfulMailVerifyPage.tsx'),
successfulMailVerify: path.resolve(__dirname, './app/email-verify/SuccessfulEMailVerifyPage.tsx'),
resetPasswordChallengeSender: path.resolve(__dirname, './app/reset-password/ResetPasswordChallengeSenderPage.tsx'),
successfulResetPasswordMailChallenge: path.resolve(__dirname, './app/reset-password/SuccessfulResetPasswordMailChallengePage.tsx'),
successfulResetPasswordMailChallenge: path.resolve(__dirname, './app/reset-password/SuccessfulResetPasswordEMailChallengePage.tsx'),
resetPassword: path.resolve(__dirname, './app/reset-password/ResetPasswordPage.tsx'),
successfulPasswordReset: path.resolve(__dirname, './app/reset-password/SuccessfulPasswordReset.tsx')
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.vauthenticator.server

import com.vauthenticator.server.email.NoReplyEMailConfiguration
import com.vauthenticator.server.events.EventConsumerConfig
import com.vauthenticator.server.mail.NoReplyMailConfiguration
import com.vauthenticator.server.mfa.OtpConfigurationProperties
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.runApplication

@SpringBootApplication
@EnableConfigurationProperties(
NoReplyMailConfiguration::class,
NoReplyEMailConfiguration::class,
OtpConfigurationProperties::class,
EventConsumerConfig::class
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.vauthenticator.server.account.mailverification
package com.vauthenticator.server.account.emailverification

import com.vauthenticator.server.i18n.I18nMessageInjector
import com.vauthenticator.server.i18n.I18nScope
Expand All @@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*
@RestController
class MailVerificationEndPoint(
private val permissionValidator: PermissionValidator,
private val sendVerifyMailChallenge: SendVerifyMailChallenge
private val sendVerifyEMailChallenge: SendVerifyEMailChallenge
) {

@PutMapping("/api/verify-challenge")
Expand All @@ -26,8 +26,8 @@ class MailVerificationEndPoint(
principal: JwtAuthenticationToken
): ResponseEntity<Unit> {
permissionValidator.validate(principal, httpSession, Scopes.from(Scope.MAIL_VERIFY))
//todo validate mail field in body
sendVerifyMailChallenge.sendVerifyMail(request["mail"]!!)
//todo validate email field in body
sendVerifyEMailChallenge.sendVerifyMail(request["email"]!!)
return noContent().build()
}

Expand All @@ -37,12 +37,12 @@ class MailVerificationEndPoint(
@Controller
class MailVerificationController(
private val i18nMessageInjector: I18nMessageInjector,
private val verifyMailChallenge: VerifyMailChallenge
private val verifyEMailChallenge: VerifyEMailChallenge
) {

@GetMapping("/mail-verify/{ticket}")
@GetMapping("/email-verify/{ticket}")
fun verifyMail(@PathVariable ticket: String, model: Model): String {
verifyMailChallenge.verifyMail(ticket)
verifyEMailChallenge.verifyMail(ticket)

i18nMessageInjector.setMessagedFor(I18nScope.SUCCESSFUL_MAIL_VERIFY_PAGE, model)
model.addAttribute("assetBundle", "successfulMailVerify_bundle.js")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
package com.vauthenticator.server.account.mailverification
package com.vauthenticator.server.account.emailverification

import com.vauthenticator.server.account.AccountNotFoundException
import com.vauthenticator.server.account.repository.AccountRepository
import com.vauthenticator.server.account.ticket.VerificationTicket
import com.vauthenticator.server.account.ticket.VerificationTicketFactory
import com.vauthenticator.server.mail.MailSenderService
import com.vauthenticator.server.email.EMailSenderService
import com.vauthenticator.server.oauth2.clientapp.ClientAppId
import org.slf4j.LoggerFactory

private const val LINK_KEY = "verificationMailLink"
private const val LINK_KEY = "verificationEMailLink"

class SendVerifyMailChallenge(
class SendVerifyEMailChallenge(
private val accountRepository: AccountRepository,
private val verificationTicketFactory: VerificationTicketFactory,
private val mailVerificationMailSender: MailSenderService,
private val mailVerificationMailSender: EMailSenderService,
private val frontChannelBaseUrl: String
) {

private val logger = LoggerFactory.getLogger(SendVerifyMailChallenge::class.java)
private val logger = LoggerFactory.getLogger(SendVerifyEMailChallenge::class.java)

fun sendVerifyMail(mail: String) {
accountRepository.accountFor(mail)
fun sendVerifyMail(email: String) {
accountRepository.accountFor(email)
.map { account ->
val verificationTicket = verificationTicketFactory.createTicketFor(account, ClientAppId.empty())
val mailContext = mailContextFrom(verificationTicket)
Expand All @@ -32,7 +32,7 @@ class SendVerifyMailChallenge(
}

private fun mailContextFrom(verificationTicket: VerificationTicket): Map<String, String> {
val verificationLink = "$frontChannelBaseUrl/mail-verify/${verificationTicket.content}"
val verificationLink = "$frontChannelBaseUrl/email-verify/${verificationTicket.content}"
return mapOf(LINK_KEY to verificationLink)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.vauthenticator.server.account.mailverification
package com.vauthenticator.server.account.emailverification

import com.vauthenticator.server.events.EventConsumer
import com.vauthenticator.server.events.SignUpEvent
import com.vauthenticator.server.events.VAuthenticatorEvent

class SendVerifyMailChallengeUponSignUpEventConsumer(
private val mailChallenge: SendVerifyMailChallenge
class SendVerifyEMailChallengeUponSignUpEventConsumer(
private val mailChallenge: SendVerifyEMailChallenge
) : EventConsumer {
override fun accept(event: VAuthenticatorEvent) {
mailChallenge.sendVerifyMail(event.userName.content)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.vauthenticator.server.account.mailverification
package com.vauthenticator.server.account.emailverification

import com.vauthenticator.server.account.Account
import com.vauthenticator.server.account.repository.AccountRepository
Expand All @@ -9,7 +9,7 @@ import com.vauthenticator.server.account.ticket.VerificationTicket
import com.vauthenticator.server.mfa.domain.MfaMethod
import com.vauthenticator.server.mfa.domain.MfaMethodsEnrolmentAssociation

class VerifyMailChallenge(
class VerifyEMailChallenge(
private val accountRepository: AccountRepository,
private val ticketRepository: TicketRepository,
private val mfaMethodsEnrolmentAssociation: MfaMethodsEnrolmentAssociation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ package com.vauthenticator.server.account.welcome

import com.vauthenticator.server.account.AccountNotFoundException
import com.vauthenticator.server.account.repository.AccountRepository
import com.vauthenticator.server.mail.MailSenderService
import com.vauthenticator.server.email.EMailSenderService

class SayWelcome(
private val accountRepository: AccountRepository,
private val welcomeMailSender: MailSenderService
private val welcomeMailSender: EMailSenderService
) {

fun welcome(mail: String): Unit =
accountRepository.accountFor(mail)
.map { welcomeMailSender.sendFor(it) }
.orElseThrow { AccountNotFoundException("no account with mail $mail in the database") }
fun welcome(email: String): Unit =
accountRepository.accountFor(email)
.map { welcomeMailSender.sendFor(it, emptyMap()) }
.orElseThrow { AccountNotFoundException("no account with email $email in the database") }

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class WelcomeMailEndPoint(
session: HttpSession, principal: JwtAuthenticationToken
): ResponseEntity<Unit> {
permissionValidator.validate(principal, session, Scopes.from(Scope.WELCOME))
sayWelcome.welcome(request["mail"]!!)
sayWelcome.welcome(request["email"]!!)
return ResponseEntity.noContent().build()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package com.vauthenticator.server.config

import com.hubspot.jinjava.Jinjava
import com.vauthenticator.document.repository.DocumentRepository
import com.vauthenticator.server.account.mailverification.SendVerifyMailChallenge
import com.vauthenticator.server.account.mailverification.SendVerifyMailChallengeUponSignUpEventConsumer
import com.vauthenticator.server.account.mailverification.VerifyMailChallenge
import com.vauthenticator.server.account.emailverification.SendVerifyEMailChallenge
import com.vauthenticator.server.account.emailverification.SendVerifyEMailChallengeUponSignUpEventConsumer
import com.vauthenticator.server.account.emailverification.VerifyEMailChallenge
import com.vauthenticator.server.account.repository.AccountRepository
import com.vauthenticator.server.account.ticket.TicketRepository
import com.vauthenticator.server.account.ticket.VerificationTicketFactory
import com.vauthenticator.server.mail.*
import com.vauthenticator.server.email.*
import com.vauthenticator.server.mfa.domain.MfaMethodsEnrolmentAssociation
import com.vauthenticator.server.oauth2.clientapp.ClientApplicationRepository
import org.springframework.beans.factory.annotation.Value
Expand All @@ -17,17 +17,17 @@ import org.springframework.context.annotation.Configuration
import org.springframework.mail.javamail.JavaMailSender

@Configuration(proxyBeanMethods = false)
class MailVerificationConfig {
class EMailVerificationConfig {

@Bean
fun sendVerifyMailChallenge(
clientAccountRepository: ClientApplicationRepository,
accountRepository: AccountRepository,
verificationTicketFactory: VerificationTicketFactory,
verificationMailSender: MailSenderService,
verificationMailSender: EMailSenderService,
@Value("\${vauthenticator.host}") frontChannelBaseUrl: String
) =
SendVerifyMailChallenge(
SendVerifyEMailChallenge(
accountRepository,
verificationTicketFactory,
verificationMailSender,
Expand All @@ -40,7 +40,7 @@ class MailVerificationConfig {
ticketRepository: TicketRepository,
mfaMethodsEnrolmentAssociation: MfaMethodsEnrolmentAssociation
) =
VerifyMailChallenge(
VerifyEMailChallenge(
accountRepository,
ticketRepository,
mfaMethodsEnrolmentAssociation
Expand All @@ -50,20 +50,20 @@ class MailVerificationConfig {
fun verificationMailSender(
javaMailSender: JavaMailSender,
documentRepository: DocumentRepository,
noReplyMailConfiguration: NoReplyMailConfiguration
noReplyEMailConfiguration: NoReplyEMailConfiguration
) =
JavaMailSenderService(
JavaEMailSenderService(
documentRepository,
javaMailSender,
JinjavaMailTemplateResolver(Jinjava()),
SimpleMailMessageFactory(
noReplyMailConfiguration.from,
noReplyMailConfiguration.welcomeMailSubject,
MailType.EMAIL_VERIFICATION
SimpleEMailMessageFactory(
noReplyEMailConfiguration.from,
noReplyEMailConfiguration.welcomeMailSubject,
EMailType.EMAIL_VERIFICATION
)
)

@Bean
fun sendVerifyMailChallengeUponSignUpEventConsumer(mailChallenge: SendVerifyMailChallenge) =
SendVerifyMailChallengeUponSignUpEventConsumer(mailChallenge)
fun sendVerifyMailChallengeUponSignUpEventConsumer(mailChallenge: SendVerifyEMailChallenge) =
SendVerifyEMailChallengeUponSignUpEventConsumer(mailChallenge)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.vauthenticator.server.config

import com.vauthenticator.server.account.mailverification.SendVerifyMailChallengeUponSignUpEventConsumer
import com.vauthenticator.server.account.emailverification.SendVerifyEMailChallengeUponSignUpEventConsumer
import com.vauthenticator.server.account.signup.SignUpEventConsumer
import com.vauthenticator.server.account.welcome.SendWelcomeMailUponSignUpEventConsumer
import com.vauthenticator.server.events.*
Expand All @@ -27,14 +27,14 @@ class EventsConfig(private val eventConsumerConfig: EventConsumerConfig) {
resetPasswordEventConsumer: ResetPasswordEventConsumer,
signUpEventConsumer: SignUpEventConsumer,
sendWelcomeMailUponSignUpEventConsumer: SendWelcomeMailUponSignUpEventConsumer,
sendVerifyMailChallengeUponSignUpEventConsumer: SendVerifyMailChallengeUponSignUpEventConsumer,
sendVerifyEMailChallengeUponSignUpEventConsumer: SendVerifyEMailChallengeUponSignUpEventConsumer,
loggerEventConsumer: EventConsumer
) =
SpringEventsCollector(
listOf(
loggerEventConsumer,
sendWelcomeMailUponSignUpEventConsumer,
sendVerifyMailChallengeUponSignUpEventConsumer,
sendVerifyEMailChallengeUponSignUpEventConsumer,
signUpEventConsumer,
resetPasswordEventConsumer,
changePasswordEventConsumer
Expand Down
Loading

0 comments on commit 8719164

Please sign in to comment.