package parkup.configs; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import parkup.configs.email.EmailService; import parkup.configs.email.EmailValidator; import parkup.configs.email.Mail; import parkup.configs.token.ConfirmationTokenRP; import parkup.configs.token.ConfirmationTokenService; import parkup.entities.RegisteredUser; import parkup.services.RegisteredUserService; import javax.transaction.Transactional; import java.time.LocalDateTime; @Service public class RegistrationServiceRP { private final RegisteredUserService registeredUserService; private final EmailValidator emailValidator; private final ConfirmationTokenService confirmationTokenService; private final EmailService emailService; @Autowired public RegistrationServiceRP(RegisteredUserService registeredUserService, EmailValidator emailValidator, ConfirmationTokenService confirmationTokenService, EmailService emailService) { this.registeredUserService = registeredUserService; this.emailValidator = emailValidator; this.confirmationTokenService = confirmationTokenService; this.emailService = emailService; } public String register(RegistrationRequest request) { if (request.getEmail() == null || request.getEmail().isEmpty()) throw new IllegalArgumentException("Missing email"); boolean isValidEmail = emailValidator. test(request.getEmail()); if (!isValidEmail) { throw new IllegalStateException("email not valid"); } String token = registeredUserService.signUpRegistriranParkirac( new RegisteredUser( request.getFirstName(), request.getLastName(), request.getEmail(), request.getPassword(), request.getMobile() ) ); String link = "http://localhost:8080/registriranParkirac/registration/confirm?token=" + token; Mail mail = new Mail(); mail.setMailTo(request.getEmail()); mail.setMailFrom("noreply_explore_buddy@gmail.com"); mail.setMailSubject("Account confirmation"); mail.setMailContent(buildEmail(request.getEmail(), link)); emailService.sendEmail(mail); return token; } @Transactional public String confirmToken(String token) { ConfirmationTokenRP confirmationTokenRP = confirmationTokenService .getTokenRP(token) .orElseThrow(() -> new IllegalStateException("token not found")); if (confirmationTokenRP.getConfirmedAt() != null) { throw new IllegalStateException("email already confirmed"); } LocalDateTime expiredAt = confirmationTokenRP.getExpiresAt(); if (expiredAt.isBefore(LocalDateTime.now())) { throw new IllegalStateException("token expired"); } confirmationTokenService.setConfirmedAtRP(token); registeredUserService.enableRegistriranParkirac(confirmationTokenRP.getRegistriranParkirac().getEmail()); return "confirmed"; } private String buildEmail(String name, String link) { return "
\n" + "\n" + "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + " \n" + " \n" + " Confirm your email\n" + "
\n" + " \n" + "
\n" + " \n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "
\n" + " \n" + "
\n" + "\n" + "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "


\n" + " \n" + "

Hi " + name + ",

Thank you for registering. Please click on the below link to activate your account:

Activate Now

\n Link will expire in 15 minutes.

See you soon

" + " \n" + "


\n" + "\n" + "
"; } }