package parkup.configs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import parkup.configs.email.EmailSender;
import parkup.configs.email.EmailValidator;
import parkup.configs.token.ConfirmationTokenRP;
import parkup.configs.token.ConfirmationTokenService;
import parkup.entities.RegistriranParkirac;
import parkup.services.RegistriranParkiracService;
import javax.transaction.Transactional;
import java.time.LocalDateTime;
@Service
public class RegistrationServiceRP {
private final RegistriranParkiracService registriranParkiracService;
private final EmailValidator emailValidator;
private final ConfirmationTokenService confirmationTokenService;
private final EmailSender emailSender;
@Autowired
public RegistrationServiceRP(RegistriranParkiracService registriranParkiracService, EmailValidator emailValidator,
ConfirmationTokenService confirmationTokenService, EmailSender emailSender) {
this.registriranParkiracService = registriranParkiracService;
this.emailValidator = emailValidator;
this.confirmationTokenService = confirmationTokenService;
this.emailSender = emailSender;
}
public String register(RegistrationRequest request) {
boolean isValidEmail = emailValidator.
test(request.getEmail());
if (!isValidEmail) {
throw new IllegalStateException("email not valid");
}
String token = registriranParkiracService.signUpRegistriranParkirac(
new RegistriranParkirac(
request.getFirstName(),
request.getLastName(),
request.getEmail(),
request.getPassword(),
request.getMobile()
)
);
String link = "http://localhost:8080/registriranParkirac/registration/confirm?token=" + token;
emailSender.send(
request.getEmail(),
buildEmail(request.getFirstName(), link));
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);
registriranParkiracService.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" +
"
";
}
}