package com.megatim.apifdxweb.core.impl.administration; import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO; import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager; import com.google.common.hash.Hashing; import com.megatim.apifdxweb.core.ifaces.administration.RoleManager; import com.megatim.apifdxweb.core.ifaces.administration.UserManager; import com.megatim.apifdxweb.dao.ifaces.administration.UserDAO; import com.megatim.apifdxweb.model.administration.User; import com.megatim.apifdxweb.model.dtos.EditPasswordDto; import com.megatim.fdxcommons.model.enumeration.EtatOperation; import com.megatim.fdxcommons.model.enumeration.TypeOperation; import com.megatim.fdxcommons.model.referentiel.Participant; import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException; import java.nio.charset.StandardCharsets; import java.util.Date; import javax.enterprise.context.Dependent; import javax.inject.Inject; @Dependent public class UserManagerImpl extends AbstractGenericManager implements UserManager { @Inject protected UserDAO dao; @Inject protected RoleManager roleManager; public UserManagerImpl() { } @Override public GenericDAO getDao() { return dao; } @Override public String getEntityIdName() { return "id"; } @Override public User recuperUtilisateur(String username, String motDePasse) { return dao.recuperUtilisateur(username, motDePasse); } @Override public User recuperUtilisateur(String username) { return dao.recuperUtilisateur(username); } @Override public void addUser(Participant participant, String token) { User user = dao.getUser(participant.getCode()); if (user == null) { user = new User(); user.setUserName(participant.getCode()); user.setFirstName(participant.getLibelle()); user.setLastName(participant.getCode()); user.setEtatOperation(EtatOperation.ACTIF); user.setTypeOperation(TypeOperation.AJOUTER); user.setDateCreation(new Date()); user.setPwd(token); user.setParticipant(participant); dao.save(user); } } @Override public void updateUser(Participant participant, String token) { User user = dao.getUser(participant.getCode()); if (user != null) { user.setDateDerniereModification(new Date()); user.setPwd(token); dao.save(user); } } @Override public void lockUser(Participant participant) { User user = dao.getUser(participant.getCode()); if (user != null) { user.setLocked(true); dao.save(user); } } @Override public void unLockUser(Participant participant) { User user = dao.getUser(participant.getCode()); if (user != null) { user.setLocked(false); dao.save(user); } } @Override public void editPassword(String username, EditPasswordDto editPasswordDto) { if (!editPasswordDto.getNewPassword().equals(editPasswordDto.getNewPasswordConfirm())) { throw new CommonApplicationValidationException("Le nouveau mot de passe et le mote de passe de confirmation ne sont pas identiques."); } User user = recuperUtilisateur(username); if (user == null) { throw new CommonApplicationValidationException("Imposssible d'effectuer l'action: utilisateur non reconnu"); } if (!Hashing.sha256().hashString(editPasswordDto.getActualPassword(), StandardCharsets.UTF_8).toString().equals(user.getPwd())) { throw new CommonApplicationValidationException("Le mot de passe actuel est incorrect"); } user.setPwd(Hashing.sha256().hashString(editPasswordDto.getNewPassword(), StandardCharsets.UTF_8).toString()); update(user.getId(), user); } }