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_parkup@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" +
" 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" +
"
\n" +
" \n" +
"
| \n" +
"
\n" +
"
\n" +
"\n" +
"
";
}
}