package com.megatim.apifdxweb.dao.impl.administration; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import com.bekosoftware.genericdaolayer.dao.impl.AbstractGenericDAO; import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.megatim.apifdxweb.dao.ifaces.administration.UserDAO; import com.megatim.apifdxweb.model.administration.User; import com.megatim.fdxcommons.model.enumeration.TypeOperation; import java.nio.charset.StandardCharsets; import java.util.List; import javax.enterprise.context.Dependent; import javax.transaction.Transactional; @Dependent public class UserDAOImpl extends AbstractGenericDAO implements UserDAO { @PersistenceContext(unitName = "fdxPU") protected EntityManager em; public UserDAOImpl() { } @Override public EntityManager getEntityManager() { return em; } @Override public Class getManagedEntityClass() { return (User.class); } @Override public User recuperUtilisateur(String username, String motDePasse) { RestrictionsContainer requeteur = RestrictionsContainer.newInstance(); requeteur.addEq("userName", username); requeteur.addEq("typeOperation", TypeOperation.AJOUTER); requeteur.addEq("locked", false); List resultats = filter(requeteur.getPredicats(), null, null, 0, 1); if (resultats == null || resultats.isEmpty()) { return null; } User user; //On verifie si le mot de passe est correct HashCode hashCode = Hashing.sha256().hashString(motDePasse, StandardCharsets.UTF_8); if (!hashCode.toString().equals(resultats.get(0).getPwd())) { user = null; } else { user = resultats.get(0); } return user; } @Transactional @Override public User recuperUtilisateur(String username) { List liste = em.createQuery("SELECT u FROM User u " + "WHERE u.userName = :userName AND u.typeOperation = :typeOperation AND u.locked = :locked") .setParameter("userName", username) .setParameter("typeOperation", TypeOperation.AJOUTER) .setParameter("locked", false) .getResultList(); return liste != null && !liste.isEmpty() ? liste.stream().findFirst().get() : null; } @Override public User getUser(String username) { List liste = em.createQuery("SELECT u FROM User u " + "WHERE u.userName = :userName AND u.typeOperation = :typeOperation") .setParameter("userName", username) .setParameter("typeOperation", TypeOperation.AJOUTER) .getResultList(); return liste != null && !liste.isEmpty() ? liste.stream().findFirst().get() : null; } }