package de.asideas.crowdsource.service; import de.asideas.crowdsource.domain.exception.NotAuthorizedException; import de.asideas.crowdsource.domain.model.UserEntity; import de.asideas.crowdsource.domain.service.user.UserNotificationService; import de.asideas.crowdsource.repository.UserRepository; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { private static final Logger LOG = LoggerFactory.getLogger(UserService.class); public static final int ACTIVATION_TOKEN_LENGTH = 32; private UserRepository userRepository; private UserNotificationService userNotificationService; @Autowired public UserService(UserRepository userRepository, UserNotificationService userNotificationService) { this.userRepository = userRepository; this.userNotificationService = userNotificationService; } public UserEntity getUserByEmail(String email) { UserEntity userEntity = userRepository.findByEmail(email.toLowerCase()); if (userEntity == null) { throw new NotAuthorizedException("No user found with email " + email.toLowerCase()); } return userEntity; } public void assignActivationTokenForRegistration(UserEntity userEntity) { userEntity.setActivationToken(generateActivationToken()); userNotificationService.sendActivationMail(userEntity); saveUser(userEntity); } public void assignActivationTokenForPasswordRecovery(UserEntity userEntity) { userEntity.setActivationToken(generateActivationToken()); userNotificationService.sendPasswordRecoveryMail(userEntity); saveUser(userEntity); } private String generateActivationToken() { return RandomStringUtils.randomAlphanumeric(ACTIVATION_TOKEN_LENGTH); } private void saveUser(UserEntity userEntity) { userRepository.save(userEntity); LOG.debug("User saved: {}", userEntity); } }