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.TokenGenerationManager; import com.megatim.apifdxweb.dao.ifaces.administration.TokenGenerationDAO; import com.megatim.apifdxweb.model.administration.TokenGeneration; import com.megatim.apifdxweb.model.administration.User; import com.megatim.apifdxweb.model.administration.enums.StatutTokenGeneration; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.transaction.Transactional; @Dependent public class TokenGenerationManagerImpl extends AbstractGenericManager implements TokenGenerationManager { @Inject protected TokenGenerationDAO dao; public TokenGenerationManagerImpl() { } @Override public GenericDAO getDao() { return dao; } @Override public String getEntityIdName() { return "id"; } @Override @Transactional public void createTokenGeneration(User user, String token, int validite) { TokenGeneration currentTokenGeneration = dao.getCurrentGeneration(user.getUserName()); if (currentTokenGeneration != null) { currentTokenGeneration.setStatutTokenGeneration(StatutTokenGeneration.ARCHIVE); dao.update(currentTokenGeneration.getId(), currentTokenGeneration); } TokenGeneration tokenGeneration = new TokenGeneration(); tokenGeneration.setDateGeneration(LocalDateTime.now()); tokenGeneration.setUser(user); tokenGeneration.setToken(getHash(token)); tokenGeneration.setValidite(validite); tokenGeneration.setStatutTokenGeneration(StatutTokenGeneration.EN_COURS); dao.save(tokenGeneration); } @Override public boolean isTokenCorrect(String codeParticipant, String token) { TokenGeneration currentTokenGeneration = dao.getCurrentGeneration(codeParticipant); return currentTokenGeneration != null && currentTokenGeneration.getToken().equals(getHash(token)); } private String getHash(String value) { return Hashing.sha256().hashString(value, StandardCharsets.UTF_8).toString(); } }