package eu.eudat.logic.managers; import eu.eudat.data.entities.LoginConfirmationEmail; import eu.eudat.data.entities.UserInfo; import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.security.Principal; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; import java.util.UUID; @Component public class EmailConfirmationManager { private ApiContext apiContext; @Autowired public EmailConfirmationManager(ApiContext apiContext) { this.apiContext = apiContext; } public void confirmEmail(String token) throws TokenExpiredException, HasConfirmedEmailException { LoginConfirmationEmail loginConfirmationEmail = apiContext.getOperationsContext() .getDatabaseRepository().getLoginConfirmationEmailDao().asQueryable() .where((builder, root) -> builder.equal(root.get("token"), UUID.fromString(token))).getSingle(); if (loginConfirmationEmail.getExpiresAt().compareTo(new Date()) < 0) throw new TokenExpiredException("Token has expired."); UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable() .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); if (user.getEmail() != null) throw new HasConfirmedEmailException("User already has confirmed his Email."); loginConfirmationEmail.setIsConfirmed(true); user.setEmail(loginConfirmationEmail.getEmail()); apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(user); apiContext.getOperationsContext().getDatabaseRepository().getLoginConfirmationEmailDao().createOrUpdate(loginConfirmationEmail); } public void sendConfirmationEmail(String email, Principal principal) throws HasConfirmedEmailException { UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); if (user.getEmail() != null) throw new HasConfirmedEmailException("User already has confirmed his Email."); apiContext.getUtilitiesService().getConfirmationEmailService().createConfirmationEmail( apiContext.getOperationsContext().getDatabaseRepository().getLoginConfirmationEmailDao(), apiContext.getUtilitiesService().getMailService(), email, principal.getId()); } }