Initial Setup for email verification
This commit is contained in:
parent
88cb2bcf87
commit
990f1bd6d4
5 changed files with 171 additions and 0 deletions
|
@ -0,0 +1,23 @@
|
|||
package ch.usi.inf.sa4.sanmarinoes.smarthut.Service;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.mail.SimpleMailMessage;
|
||||
import org.springframework.mail.javamail.JavaMailSender;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service("emailSenderService")
|
||||
public class EmailSenderService {
|
||||
|
||||
private JavaMailSender javaMailSender;
|
||||
|
||||
@Autowired
|
||||
public EmailSenderService(JavaMailSender javaMailSender) {
|
||||
this.javaMailSender = javaMailSender;
|
||||
}
|
||||
|
||||
@Async
|
||||
public void sendEmail(SimpleMailMessage email) {
|
||||
javaMailSender.send(email);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
|
||||
|
||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.Service.EmailSenderService;
|
||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.ConfirmationToken;
|
||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.ConfirmationTokenRepository;
|
||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.User;
|
||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.UserRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.mail.SimpleMailMessage;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@RestController
|
||||
@EnableAutoConfiguration
|
||||
@RequestMapping("/register")
|
||||
public class UserAccountController {
|
||||
|
||||
@Autowired private UserRepository userRepository;
|
||||
|
||||
@Autowired private ConfirmationTokenRepository confirmationTokenRepository;
|
||||
|
||||
@Autowired private EmailSenderService emailSenderService;
|
||||
|
||||
@GetMapping
|
||||
public ModelAndView displayRegistration(ModelAndView modelAndView, User user) {
|
||||
modelAndView.addObject("user", user);
|
||||
modelAndView.setViewName("register");
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public ModelAndView registerUser(ModelAndView modelAndView, User user) {
|
||||
|
||||
User existingUser = userRepository.findByEmailIgnoreCase(user.getEmail());
|
||||
// Check if an User with the same email already exists
|
||||
if (existingUser != null) {
|
||||
modelAndView.addObject("message", "This email already exists!");
|
||||
modelAndView.setViewName("error");
|
||||
} else {
|
||||
userRepository.save(user);
|
||||
|
||||
ConfirmationToken confirmationToken = new ConfirmationToken(user);
|
||||
|
||||
confirmationTokenRepository.save(confirmationToken);
|
||||
|
||||
SimpleMailMessage mailMessage = new SimpleMailMessage();
|
||||
mailMessage.setTo(user.getEmail());
|
||||
mailMessage.setSubject("Complete Registration!");
|
||||
mailMessage.setFrom("smarthut.sm@gmail.com");
|
||||
mailMessage.setText(
|
||||
"To confirm your account, please click here : "
|
||||
+ "http://localhost:8082/confirm-account?token="
|
||||
+ confirmationToken.getConfirmationToken());
|
||||
|
||||
emailSenderService.sendEmail(mailMessage);
|
||||
|
||||
modelAndView.addObject("emailId", user.getEmail());
|
||||
|
||||
modelAndView.setViewName("successfulRegisteration");
|
||||
}
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
@Entity
|
||||
public class ConfirmationToken {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
@Column(name = "id", updatable = false, nullable = false)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "confirmation_token")
|
||||
private String confirmationToken;
|
||||
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date createdDate;
|
||||
|
||||
@OneToOne(targetEntity = User.class, fetch = FetchType.EAGER)
|
||||
@JoinColumn(nullable = false, name = "user_id")
|
||||
private User user;
|
||||
|
||||
public ConfirmationToken(User user) {
|
||||
this.user = user;
|
||||
createdDate = new Date();
|
||||
confirmationToken = UUID.randomUUID().toString();
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getConfirmationToken() {
|
||||
return confirmationToken;
|
||||
}
|
||||
|
||||
public Date getCreatedDate() {
|
||||
return createdDate;
|
||||
}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void setConfirmationToken(String confirmationToken) {
|
||||
this.confirmationToken = confirmationToken;
|
||||
}
|
||||
|
||||
public void setCreatedDate(Date createdDate) {
|
||||
this.createdDate = createdDate;
|
||||
}
|
||||
|
||||
public void setUser(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
|
||||
public interface ConfirmationTokenRepository extends CrudRepository<ConfirmationToken, String> {
|
||||
ConfirmationToken findByConfirmationToken(String confirmationToken);
|
||||
}
|
|
@ -5,4 +5,6 @@ import org.springframework.data.repository.CrudRepository;
|
|||
|
||||
public interface UserRepository extends CrudRepository<User, Long> {
|
||||
User findByUsername(String username);
|
||||
|
||||
User findByEmailIgnoreCase(String email);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue