package finki.it.phoneluxbackend.services; import finki.it.phoneluxbackend.data.RegistrationRequest; import finki.it.phoneluxbackend.data.UserRole; import finki.it.phoneluxbackend.entities.ConfirmationToken; import finki.it.phoneluxbackend.entities.User; import finki.it.phoneluxbackend.security.email.EmailSender; import finki.it.phoneluxbackend.security.email.EmailValidator; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @Service @AllArgsConstructor public class RegistrationService { private final UserService userService; private final EmailValidator emailValidator; private final ConfirmationTokenService confirmationTokenService; private final EmailSender emailSender; public String register(RegistrationRequest request) { boolean isValidEmail = emailValidator.test(request.getEmail()); // validacija za mejl na frontend ? if (!isValidEmail) throw new IllegalStateException("Email"+request.getEmail()+" not valid!"); String token = userService.signUpUser( new User(request.getFirstName(), request.getLastName(), request.getEmail(), request.getPassword(), UserRole.USER)); String link = "http://localhost:8080/registration/confirm?token="+token; emailSender.send(request.getEmail(), buildEmail(request.getFirstName(),link)); return token; } 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" + "
"; } @Transactional public String confirmToken(String token) { ConfirmationToken confirmationToken = confirmationTokenService.getToken(token) .orElseThrow(() -> new IllegalStateException("Token not found!")); if(confirmationToken.getConfirmedAt() != null) throw new IllegalStateException("Email already confirmed!"); LocalDateTime expiresAt = confirmationToken.getExpiresAt(); if (expiresAt.isBefore(LocalDateTime.now())){ throw new IllegalStateException("Token expired"); } confirmationTokenService.setConfirmedAt(token); userService.enableUser(confirmationToken.getUser().getEmail()); return "Email confirmed"; } }