package com.megatim.fdxconsultation.core.impl.api.token; import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO; import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer; import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager; import com.google.common.hash.Hashing; import com.megatim.fdxcommons.model.enumeration.OrderByType; import com.megatim.fdxcommons.model.enumeration.TypeOperation; import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessage; import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessageType; import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView; import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest; import com.megatim.fdxcommons.model.pojo.OrderByDefinition; import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException; import com.megatim.fdxconsultation.core.ifaces.api.token.ApiTokenManager; import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO; import com.megatim.fdxconsultation.dao.ifaces.api.token.ApiTokenDAO; import com.megatim.fdxconsultation.model.administration.User; import com.megatim.fdxconsultation.model.api.token.ApiToken; import com.megatim.fdxconsultation.reporting.model.api.token.ApiTokenReporting; import com.megatim.fdxconsultation.model.api.token.ApiTokenStatut; import com.megatim.fdxconsultation.model.dto.ApiTokenDto; import com.megatim.fdxconsultation.model.mappers.MapStructMapper; import com.megatim.fdxconsultation.model.searchentities.ApiTokenSearch; import com.megatim.fdxconsultation.tools.CommonsToolsEntity; import com.megatim.fdxconsultation.tools.context.AppCommonContext; import com.megatim.reporting.adhoc.dto.ReportConfiguration; import com.mgt.rs.security.core.service.AuthenticationTokenService; import java.io.File; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ejb.EJB; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.transaction.Transactional; import org.apache.camel.ProducerTemplate; import org.apache.camel.cdi.CdiCamelContext; /** * * @author ASUS */ @Dependent public class ApiTokenManagerImpl extends AbstractGenericManager implements ApiTokenManager { @EJB private ApiTokenDAO dao; @Inject private AuthenticationTokenService authenticationTokenService; @Inject private CdiCamelContext camelContext; @Inject private MapStructMapper mapStructMapper; @Inject com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper; @Override public GenericDAO getDao() { return dao; } @Override public String addAndGetToken(ApiToken apiToken, User connectedUser) { if (dao.getByCodeParticipant(apiToken.getParticipant()) != null) { throw new CommonApplicationValidationException("Le participant sélectionné possède déjà un mot de passe généré."); } String token = authenticationTokenService.issueToken(apiToken.getParticipant().getCode()); apiToken.setToken(Hashing.sha256().hashString(token, StandardCharsets.UTF_8).toString()); apiToken.setDateCreation(new Date()); apiToken.setTypeOperation(TypeOperation.AJOUTER); apiToken.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null); save(apiToken); //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token ApiTokenMessage apiTokenMessage = new ApiTokenMessage(); apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode()); apiTokenMessage.setToken(apiToken.getToken()); apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.ADD); sendMessage(apiTokenMessage); return token; } @Transactional @Override public String updateAndGetToken(Long id, ApiToken apiToken, User connectedUser) { ApiToken entityFromDB = find(getEntityIdName(),id); //On génère le token String token = authenticationTokenService.issueToken(entityFromDB.getParticipant().getCode()); entityFromDB.setToken(Hashing.sha256().hashString(token, StandardCharsets.UTF_8).toString()); entityFromDB.setDateDerniereModification(new Date()); entityFromDB.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null); save(entityFromDB); //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token ApiTokenMessage apiTokenMessage = new ApiTokenMessage(); apiTokenMessage.setCodeParticipant(entityFromDB.getParticipant().getCode()); apiTokenMessage.setToken(entityFromDB.getToken()); apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.UPDATE); sendMessage(apiTokenMessage); return token; } private void sendMessage(ApiTokenMessage apiTokenMessage) { ProducerTemplate producerTemplate = camelContext.createProducerTemplate(); producerTemplate.sendBody("direct:" + AppCommonContext.TOKEN_GENERATION_DIRECT, apiTokenMessage); } @Override public ApiToken lock(Long id, User connectedUser) { ApiToken apiToken = find(getEntityIdName(),id); apiToken.setApiTokenStatut(ApiTokenStatut.LOCKED); //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token ApiTokenMessage apiTokenMessage = new ApiTokenMessage(); apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode()); apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.LOCKED); //Envoi du message à l'API Web sendMessage(apiTokenMessage); return update(id, apiToken); } @Override public ApiToken unLock(Long id, User connectedUser) { ApiToken apiToken = find(getEntityIdName(),id); apiToken.setApiTokenStatut(ApiTokenStatut.UNLOCKED); //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token ApiTokenMessage apiTokenMessage = new ApiTokenMessage(); apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode()); apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.UNLOCKED); //Envoi du message à l'API Web sendMessage(apiTokenMessage); return update(id, apiToken); } @Override public File printAll(ReportConfiguration reportConfiguration, User userConnected) throws Exception { return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false ); } @Override public File printOne(ReportConfiguration reportConfiguration, User userConnected) throws Exception { return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true); } @Override public File exportExcelAll(ReportConfiguration reportConfiguration, User userConnected) throws Exception { return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false); } @Override public File exportExcelOne(ReportConfiguration reportConfiguration, User userConnected) throws Exception { return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true); } @Override public String getEntityIdName() { return "id"; } @Override public Class getClazz() { return ApiTokenReporting.class; } @Override public List getDatas(CriteriaEntityFromView searchEntity) throws Exception { return CommonsToolsEntity.convertToApiTokenReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList(new OrderByDefinition(getEntityIdName(), OrderByType.DESC)))); } @Override public Map getParameters() { return new HashMap<>(); } @Override public PaginationWithCriteriaEntityDAO paginationWithCriteriaEntityDAO() { return dao; } @Override public void beforeAdd(ApiToken entity, User connectedUser) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void beforeRemove(ApiToken entity, User connectedUser) { entity.setTypeOperation(TypeOperation.SUPPRIMER); entity.setDateSuppression(new Date()); entity.setUtilisateurSuppression(connectedUser.getUserName()); } @Override public void beforeModify(ApiToken actualEntity, ApiToken requestEntity, User connectedUser) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public ApiTokenDto mapToDto(ApiToken entity) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public ApiTokenDto mapToDetailDto(ApiToken entity) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public RestrictionsContainer construireRequete(ApiTokenSearch searchEntity, TypeOperation typeOperation) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } }