Skip to content

Commit

Permalink
jacoco und mailing
Browse files Browse the repository at this point in the history
  • Loading branch information
gorzala committed Feb 21, 2022
1 parent 86ad5e7 commit e2613bf
Show file tree
Hide file tree
Showing 26 changed files with 577 additions and 44 deletions.
1 change: 1 addition & 0 deletions lombok.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lombok.addLombokGeneratedAnnotation = true
32 changes: 32 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@
<testcontainers.version>1.15.1</testcontainers.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
Expand All @@ -38,6 +46,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
Expand Down Expand Up @@ -106,6 +119,25 @@
<build>
<finalName>dancer</finalName>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/net/dancier/dancer/DancerApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.scheduling.annotation.EnableScheduling;

import javax.annotation.PostConstruct;
import java.util.TimeZone;

@SpringBootApplication
@EnableScheduling
@EntityScan(basePackageClasses = {
DancerApplication.class,
Jsr310JpaConverters.class
})
public class DancerApplication {

//https://www.callicoder.com/spring-boot-spring-security-jwt-mysql-react-app-part-1/
@PostConstruct
void init() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import net.dancier.dancer.core.exception.AppliationException;
import net.dancier.dancer.core.exception.BusinessException;
import net.dancier.dancer.core.exception.NotFoundException;
import net.dancier.dancer.mail.service.MailCreationService;
import net.dancier.dancer.mail.service.MailEnqueueService;
import net.dancier.dancer.security.JwtTokenProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -25,6 +27,7 @@
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;

Expand All @@ -48,6 +51,10 @@ public class AuthenticationService {

private final JwtTokenProvider tokenProvider;

private final MailEnqueueService mailEnqueueService;

private final MailCreationService mailCreationService;

public Authentication authenticate(Authentication authentication) {
return this.authenticationManager.authenticate(authentication);
}
Expand All @@ -63,6 +70,7 @@ public User getUser(UUID userId) {
}
}

@Transactional
public User registerUser(RegisterRequestDto signUpRequest) {
log.info("Attempting to register user: " + signUpRequest.getEmail());
if(userRepository.findByEmail(signUpRequest.getEmail()).isPresent()) {
Expand All @@ -79,15 +87,11 @@ public User registerUser(RegisterRequestDto signUpRequest) {
user.setRoles(Collections.singleton(userRole));

User savedUser = userRepository.save(user);
EmailValidationCode emailValidationCode = new EmailValidationCode();
emailValidationCode.setExpiresAt(Instant.now().plus(3, ChronoUnit.HOURS));
emailValidationCode.setUserId(savedUser.getId());
emailValidationCode.setCode(UUID.randomUUID().toString());
log.debug("Validation code: " + emailValidationCode.getCode());
emailValidationCodeRepository.save(emailValidationCode);
createEmailValidationCode(savedUser);
return savedUser;
}

@Transactional
public void createEmailValidationCode(User user) {
Objects.requireNonNull(user.getId());
EmailValidationCode emailValidationCode = emailValidationCodeRepository
Expand All @@ -99,6 +103,7 @@ public void createEmailValidationCode(User user) {
emailValidationCode.setUserId(user.getId());
emailValidationCode.setCode(UUID.randomUUID().toString());
emailValidationCodeRepository.save(emailValidationCode);
enqueueValidationCodeMail(user, emailValidationCode.getCode());
log.debug("Created validation code: " + emailValidationCode.getCode() + " for user: " + user);
}

Expand Down Expand Up @@ -152,4 +157,15 @@ public String checkPasswortCodeRequestAndCreateNew(String code) {
public boolean existsByEmail(String email) {
return this.userRepository.existsByEmail(email);
}

private void enqueueValidationCodeMail(User user, String validationCode) {
mailEnqueueService.enqueueMail(
mailCreationService.createDancierMessageFromTemplate(
user.getEmail(),
MailCreationService.NO_REPLY_FROM,
"Dancier - bestätige Deine E-Mail-Adresse!",
MailCreationService.NEW_USER_VALIDATE_EMAIL,
Map.of( "validationLink", validationCode)
));
}
}
8 changes: 0 additions & 8 deletions src/main/java/net/dancier/dancer/mail/MailException.java

This file was deleted.

5 changes: 0 additions & 5 deletions src/main/java/net/dancier/dancer/mail/MailService.java

This file was deleted.

16 changes: 0 additions & 16 deletions src/main/java/net/dancier/dancer/mail/MailServiceImp.java

This file was deleted.

40 changes: 40 additions & 0 deletions src/main/java/net/dancier/dancer/mail/OutgoingMailProcessor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package net.dancier.dancer.mail;

import lombok.RequiredArgsConstructor;
import net.dancier.dancer.mail.model.OutgoingMail;
import net.dancier.dancer.mail.repository.OutgoingMailRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Profile;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Collection;

@Profile("!test")
@Component
@RequiredArgsConstructor
public class OutgoingMailProcessor {

private final Logger log = LoggerFactory.getLogger(OutgoingMailProcessor.class);

private final OutgoingMailRepository outgoingMailRepository;

private final JavaMailSender javaMailSender;

@Scheduled(fixedRate = 10000)
public void process() {
log.debug("Processing outgoing mails...");
Collection<OutgoingMail> outgoingMailList = outgoingMailRepository.selectToProcess();
for(OutgoingMail outgoingMail: outgoingMailList) {
log.debug("About to send this mail...");
outgoingMail.setRetry(outgoingMail.getRetry()+1);
try {
this.javaMailSender.send(outgoingMail.getMail());
} catch (MailException mailException) {
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package net.dancier.dancer.mail.configuration;

import org.hibernate.cfg.NotYetImplementedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessagePreparator;

import javax.mail.internet.MimeMessage;
import java.io.InputStream;
import java.util.Properties;

public class AllForOneMailSender implements JavaMailSender {

private static final Logger log = LoggerFactory.getLogger(AllForOneMailSender.class);

private final JavaMailSenderImpl springJavaMailSenderImpl;

private final String allForOneAddress = "[email protected]";

public AllForOneMailSender(String hostname, Integer port, String user, String pass) {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(hostname);
javaMailSender.setPort(Integer.valueOf(port));

javaMailSender.setUsername(user);
javaMailSender.setPassword(pass);

Properties props = javaMailSender.getJavaMailProperties();
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.debug", "true");
this.springJavaMailSenderImpl = javaMailSender;
}

@Override
public void send(SimpleMailMessage simpleMessage) throws MailException {
simpleMessage.setBcc();
simpleMessage.setCc();
simpleMessage.setReplyTo(allForOneAddress);
simpleMessage.setTo(allForOneAddress);
this.springJavaMailSenderImpl.send(simpleMessage);
}

@Override
public MimeMessage createMimeMessage() {
throw new NotYetImplementedException();
}

@Override
public MimeMessage createMimeMessage(InputStream contentStream) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessage mimeMessage) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessage... mimeMessages) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessagePreparator mimeMessagePreparator) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessagePreparator... mimeMessagePreparators) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(SimpleMailMessage... simpleMessages) throws MailException {
throw new NotYetImplementedException();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package net.dancier.dancer.mail.configuration;

import org.hibernate.cfg.NotYetImplementedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessagePreparator;

import javax.mail.internet.MimeMessage;
import java.io.InputStream;
import java.util.Properties;

public class DumpingMailSender implements JavaMailSender {

private static final Logger log = LoggerFactory.getLogger(DumpingMailSender.class);

@Override
public MimeMessage createMimeMessage() {
throw new NotYetImplementedException();
}

@Override
public void send(SimpleMailMessage simpleMessage) throws MailException {
log.debug("Sending Mail: " + simpleMessage);
}

@Override
public MimeMessage createMimeMessage(InputStream contentStream) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessage mimeMessage) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessage... mimeMessages) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessagePreparator mimeMessagePreparator) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(MimeMessagePreparator... mimeMessagePreparators) throws MailException {
throw new NotYetImplementedException();
}

@Override
public void send(SimpleMailMessage... simpleMessages) throws MailException {
throw new NotYetImplementedException();
}
}
Loading

0 comments on commit e2613bf

Please sign in to comment.