159 lines
7.2 KiB
Java
159 lines
7.2 KiB
Java
package eu.eudat.logic.services.utilities;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import eu.eudat.commons.JsonHandlingService;
|
|
import eu.eudat.commons.enums.ContactInfoType;
|
|
import eu.eudat.commons.enums.notification.NotificationContactType;
|
|
import eu.eudat.commons.scope.user.UserScope;
|
|
import eu.eudat.commons.types.notification.*;
|
|
import eu.eudat.configurations.notification.NotificationProperties;
|
|
import eu.eudat.data.dao.entities.EmailConfirmationDao;
|
|
import eu.eudat.data.old.EmailConfirmation;
|
|
import eu.eudat.data.UserEntity;
|
|
import eu.eudat.integrationevent.outbox.notification.NotificationIntegrationEvent;
|
|
import eu.eudat.integrationevent.outbox.notification.NotificationIntegrationEventHandler;
|
|
import eu.eudat.model.UserContactInfo;
|
|
import eu.eudat.query.UserContactInfoQuery;
|
|
import gr.cite.tools.data.query.Ordering;
|
|
import gr.cite.tools.data.query.QueryFactory;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import javax.management.InvalidApplicationException;
|
|
import java.util.*;
|
|
|
|
@Service("ConfirmationEmailService")
|
|
public class ConfirmationEmailServiceImpl implements ConfirmationEmailService {
|
|
private static final Logger logger = LoggerFactory.getLogger(ConfirmationEmailServiceImpl.class);
|
|
//private Logger logger;
|
|
private final UserScope userScope;
|
|
private final QueryFactory queryFactory;
|
|
private final JsonHandlingService jsonHandlingService;
|
|
private final NotificationIntegrationEventHandler eventHandler;
|
|
private final NotificationProperties notificationProperties;
|
|
|
|
|
|
public ConfirmationEmailServiceImpl(/*Logger logger,*/ UserScope userScope, QueryFactory queryFactory, JsonHandlingService jsonHandlingService, NotificationIntegrationEventHandler eventHandler, NotificationProperties notificationProperties) {
|
|
// this.logger = logger;
|
|
this.userScope = userScope;
|
|
this.queryFactory = queryFactory;
|
|
this.jsonHandlingService = jsonHandlingService;
|
|
this.eventHandler = eventHandler;
|
|
this.notificationProperties = notificationProperties;
|
|
}
|
|
|
|
@Override
|
|
public void sentConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, String email, UserEntity user) throws InvalidApplicationException {
|
|
|
|
EmailConfirmation confirmationEmail = new EmailConfirmation();
|
|
confirmationEmail.setEmail(email);
|
|
confirmationEmail.setExpiresAt(Date
|
|
.from(new Date()
|
|
.toInstant()
|
|
.plusSeconds(this.notificationProperties.getEmailExpirationTimeSeconds())
|
|
)
|
|
);
|
|
confirmationEmail.setUserId(user.getId());
|
|
confirmationEmail.setIsConfirmed(false);
|
|
confirmationEmail.setToken(UUID.randomUUID());
|
|
confirmationEmail = loginConfirmationEmailDao.createOrUpdate(confirmationEmail);
|
|
}
|
|
|
|
@Override
|
|
public void sentUnlinkConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, String email, UserEntity user, Integer provider) throws InvalidApplicationException {
|
|
EmailConfirmation confirmationEmail = new EmailConfirmation();
|
|
UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).userIds(user.getId());
|
|
query.setOrder(new Ordering().addAscending(UserContactInfo._ordinal));
|
|
confirmationEmail.setEmail(query.first().getValue());
|
|
confirmationEmail.setExpiresAt(Date
|
|
.from(new Date()
|
|
.toInstant()
|
|
.plusSeconds(this.notificationProperties.getEmailExpirationTimeSeconds())
|
|
)
|
|
);
|
|
confirmationEmail.setUserId(user.getId());
|
|
try {
|
|
Map<String, Object> map = new HashMap<>();
|
|
map.put("email", email);
|
|
map.put("provider", provider.toString());
|
|
confirmationEmail.setData(new ObjectMapper().writeValueAsString(map));
|
|
} catch (JsonProcessingException e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
confirmationEmail.setIsConfirmed(false);
|
|
confirmationEmail.setToken(UUID.randomUUID());
|
|
confirmationEmail = loginConfirmationEmailDao.createOrUpdate(confirmationEmail);
|
|
|
|
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
|
event.setUserId(userScope.getUserIdSafe());
|
|
List<ContactPair> contactPairs = new ArrayList<>();
|
|
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
|
|
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
|
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
|
event.setContactTypeHint(NotificationContactType.EMAIL);
|
|
event.setNotificationType(notificationProperties.getRemoveCredentialConfirmationType());
|
|
NotificationFieldData data = new NotificationFieldData();
|
|
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
|
fieldInfoList.add(new FieldInfo("{confirmationToken}", DataType.String, confirmationEmail.getToken().toString()));
|
|
fieldInfoList.add(new FieldInfo("{email}", DataType.String, email));
|
|
fieldInfoList.add(new FieldInfo("{expiration_time}", DataType.String, this.secondsToTime(this.notificationProperties.getEmailExpirationTimeSeconds())));
|
|
data.setFields(fieldInfoList);
|
|
event.setData(jsonHandlingService.toJsonSafe(data));
|
|
eventHandler.handle(event);
|
|
}
|
|
|
|
@Override
|
|
public void sentMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao,
|
|
String email, UserEntity user, Integer provider) throws InvalidApplicationException {
|
|
EmailConfirmation confirmationEmail = new EmailConfirmation();
|
|
confirmationEmail.setEmail(email);
|
|
confirmationEmail.setExpiresAt(Date
|
|
.from(new Date()
|
|
.toInstant()
|
|
.plusSeconds(this.notificationProperties.getEmailExpirationTimeSeconds())
|
|
)
|
|
);
|
|
confirmationEmail.setUserId(user.getId());
|
|
try {
|
|
Map<String, Object> map = new HashMap<>();
|
|
map.put("userId", this.userScope.getUserId());
|
|
map.put("provider", provider.toString());
|
|
confirmationEmail.setData(new ObjectMapper().writeValueAsString(map));
|
|
} catch (JsonProcessingException | InvalidApplicationException e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
confirmationEmail.setIsConfirmed(false);
|
|
confirmationEmail.setToken(UUID.randomUUID());
|
|
confirmationEmail = loginConfirmationEmailDao.createOrUpdate(confirmationEmail);
|
|
|
|
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
|
event.setUserId(userScope.getUserIdSafe());
|
|
List<ContactPair> contactPairs = new ArrayList<>();
|
|
contactPairs.add(new ContactPair(ContactInfoType.Email, email));
|
|
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
|
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
|
event.setContactTypeHint(NotificationContactType.EMAIL);
|
|
event.setNotificationType(notificationProperties.getMergeAccountConfirmationType());
|
|
NotificationFieldData data = new NotificationFieldData();
|
|
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
|
fieldInfoList.add(new FieldInfo("{userName}", DataType.String, user.getName()));
|
|
fieldInfoList.add(new FieldInfo("{confirmationToken}", DataType.String, confirmationEmail.getToken().toString()));
|
|
fieldInfoList.add(new FieldInfo("{expiration_time}", DataType.String, this.secondsToTime(this.notificationProperties.getEmailExpirationTimeSeconds())));
|
|
data.setFields(fieldInfoList);
|
|
event.setData(jsonHandlingService.toJsonSafe(data));
|
|
eventHandler.handle(event);
|
|
|
|
}
|
|
|
|
private String secondsToTime(int seconds) {
|
|
int sec = seconds % 60;
|
|
int hour = seconds / 60;
|
|
int min = hour % 60;
|
|
hour = hour / 60;
|
|
return (hour + ":" + min + ":" + sec);
|
|
}
|
|
|
|
|
|
} |