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<ApiToken, Long> 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<ApiToken, Long> 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<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
|
return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false );
|
}
|
|
@Override
|
public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
|
return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
|
}
|
|
@Override
|
public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
|
return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
|
}
|
|
@Override
|
public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
|
return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
|
}
|
|
@Override
|
public String getEntityIdName() {
|
return "id";
|
}
|
|
@Override
|
public Class<ApiTokenReporting> getClazz() {
|
return ApiTokenReporting.class;
|
}
|
|
@Override
|
public List<ApiTokenReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
|
return CommonsToolsEntity.convertToApiTokenReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList(new OrderByDefinition(getEntityIdName(), OrderByType.DESC))));
|
}
|
|
@Override
|
public Map<String, Object> getParameters() {
|
return new HashMap<>();
|
}
|
|
@Override
|
public PaginationWithCriteriaEntityDAO<ApiToken, Long> 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.
|
}
|
|
}
|