package br.com.centralit.citcorpore.ajaxForms; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.lang.reflect.Method; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import br.com.centralit.citajax.html.AjaxFormAction; import br.com.centralit.citajax.html.DocumentHTML; import br.com.centralit.citajax.reflexao.CitAjaxReflexao; import br.com.centralit.citcorpore.bean.ImagemHistoricoDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.bean.ValidacaoCertificadoDigitalDTO; import br.com.centralit.citcorpore.integracao.ImagemHistoricoDao; import br.com.centralit.citcorpore.negocio.ImagemHistoricoService; import br.com.centralit.citcorpore.util.CriptoUtils; import br.com.centralit.citcorpore.util.Enumerados; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.centralit.citcorpore.util.Util; import br.com.centralit.citcorpore.util.WebUtil; import br.com.centralit.citged.bean.ControleGEDDTO; import br.com.centralit.citged.bean.ControleGEDExternoDTO; import br.com.centralit.citged.negocio.ControleGEDService; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; import br.com.citframework.util.Reflexao; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilStrings; import br.com.citframework.util.UtilTratamentoArquivos; import br.com.citframework.util.cripto.CITAssinadorDigital; public class ImagemHistorico extends AjaxFormAction { private static final String dirSys = System.getProperty("user.dir"); @Override public Class getBeanClass() { return ImagemHistoricoDTO.class; } @Override public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try { final UsuarioDTO user = WebUtil.getUsuario(request); if (user == null) { document.alert("O usu�rio n�o est� logado! Favor logar no sistema!"); return; } String PRONTUARIO_TIPO_CAPT_CERT_DIGITAL = ""; PRONTUARIO_TIPO_CAPT_CERT_DIGITAL = "APPLET"; String PRONTUARIO_GED_DIRETORIO = ParametroUtil.getValorParametroCitSmartHashMap( Enumerados.ParametroSistema.GedDiretorio, " "); if (PRONTUARIO_GED_DIRETORIO == null || PRONTUARIO_GED_DIRETORIO.trim().equalsIgnoreCase("")) { PRONTUARIO_GED_DIRETORIO = ""; } if (PRONTUARIO_GED_DIRETORIO.equalsIgnoreCase("")) { PRONTUARIO_GED_DIRETORIO = Constantes.getValue("DIRETORIO_GED"); } if (PRONTUARIO_GED_DIRETORIO == null || PRONTUARIO_GED_DIRETORIO.equalsIgnoreCase("")) { PRONTUARIO_GED_DIRETORIO = "/ged"; } request.getSession().setAttribute("HASH_CONTEUDO", null); request.getSession().setAttribute("TABELA_ASS_DIGITAL", null); request.getSession().setAttribute("KEY_ASS_DIGITAL", null); byte[] bytesAssinar = null; ImagemHistoricoDTO imagemDto = new ImagemHistoricoDTO(); final br.com.centralit.citcorpore.util.Upload upload = new br.com.centralit.citcorpore.util.Upload(); final HashMap hshRetorno[] = upload.doUploadAll(request); final Collection fileItems = hshRetorno[1].values(); final HashMap formItems = hshRetorno[0]; final String idContratoStr = (String) formItems.get("IDCONTRATO"); int idContrato = 0; try { idContrato = Integer.parseInt(idContratoStr); } catch (final Exception e) {} if (idContrato == 0) { return; } String obs = (String) formItems.get("OBSERVACAO"); if (obs != null) { obs = UtilStrings.decodeCaracteresEspeciais(obs); obs = obs.replaceAll("#10##13#", "\n"); } String aba = (String) formItems.get("ABA"); if (aba != null) { aba = UtilStrings.decodeCaracteresEspeciais(aba); aba = aba.replaceAll("#10##13#", "\n"); } final Collection TEMP_LISTA_CERTIFICADO_DIGITAL = (Collection) request.getSession().getAttribute( "TEMP_LISTA_CERTIFICADO_DIGITAL"); String fileName = ""; FileItem fi; if (!fileItems.isEmpty()) { File arquivo; final List filesDel = new ArrayList(); final ImagemHistoricoService imagemHistoricoService = (ImagemHistoricoService) ServiceLocator .getInstance().getService(ImagemHistoricoService.class, null); final Iterator it = fileItems.iterator(); while (it.hasNext()) { fi = (FileItem) it.next(); String PRONTUARIO_GED_INTERNO = ParametroUtil.getValorParametroCitSmartHashMap( Enumerados.ParametroSistema.GedInterno, "S"); if (PRONTUARIO_GED_INTERNO == null || PRONTUARIO_GED_INTERNO.trim().equalsIgnoreCase("")) { PRONTUARIO_GED_INTERNO = "S"; } String prontuarioGedInternoBancoDados = ParametroUtil.getValorParametroCitSmartHashMap( Enumerados.ParametroSistema.GedInternoBD, "N"); if (!UtilStrings.isNotVazio(prontuarioGedInternoBancoDados)) { prontuarioGedInternoBancoDados = "N"; } final ControleGEDService controleGEDService = (ControleGEDService) ServiceLocator.getInstance() .getService(ControleGEDService.class, null); String pasta = ""; if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) { pasta = controleGEDService.getProximaPastaArmazenar(); File fileDir = new File(PRONTUARIO_GED_DIRETORIO); if (!fileDir.exists()) { fileDir.mkdirs(); } fileDir = new File(PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa()); if (!fileDir.exists()) { fileDir.mkdirs(); } fileDir = new File(PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta); if (!fileDir.exists()) { fileDir.mkdirs(); } } ControleGEDDTO controleGEDDTO = new ControleGEDDTO(); controleGEDDTO.setIdTabela(ControleGEDDTO.TABELA_IMAGEMHISTORICO); controleGEDDTO.setId(new Integer(0)); controleGEDDTO.setDataHora(UtilDatas.getDataAtual()); controleGEDDTO.setDescricaoArquivo(fi.getName()); controleGEDDTO.setExtensaoArquivo(Util.getFileExtension(fi.getName())); controleGEDDTO.setPasta(pasta); controleGEDDTO.setNomeArquivo(fi.getName()); if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S") && "S".equalsIgnoreCase(prontuarioGedInternoBancoDados)) { final Date now = new Date(); final String pathFonte = PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + now.getTime() + "." + Util.getFileExtension(fi.getName()), pathDestino = PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + now.getTime() + ".ged", pathChave = System .getProperties().get("user.dir") + Constantes.getValue("CAMINHO_CHAVE_PUBLICA"), pathAssinatura = PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + now.getTime() + ".signed"; arquivo = new File(pathFonte); filesDel.add(pathFonte); fi.write(arquivo); try { bytesAssinar = UtilTratamentoArquivos.getBytesFromFile(arquivo); } catch (final Exception e) { e.printStackTrace(); } int qtdAssinatura = 0; CriptoUtils.encryptFile(pathFonte, pathDestino, pathChave); controleGEDDTO.setPathArquivo(pathDestino); filesDel.add(pathDestino); if (TEMP_LISTA_CERTIFICADO_DIGITAL != null && TEMP_LISTA_CERTIFICADO_DIGITAL.size() > 0) { final CITAssinadorDigital d = new CITAssinadorDigital(); d.inicializar(); for (final Iterator itCert = TEMP_LISTA_CERTIFICADO_DIGITAL.iterator(); itCert.hasNext(); qtdAssinatura++) { final ValidacaoCertificadoDigitalDTO validacaoCertificadoDigitalDTO = (ValidacaoCertificadoDigitalDTO) itCert .next(); if (PRONTUARIO_TIPO_CAPT_CERT_DIGITAL.equalsIgnoreCase("APPLET")) { d.assinar(validacaoCertificadoDigitalDTO.getInfoCertificadoDigital().getCpf(), pathFonte, pathAssinatura + qtdAssinatura, validacaoCertificadoDigitalDTO.getCert(), false); } else { final InputStream inStream = new FileInputStream( validacaoCertificadoDigitalDTO.getCaminhoCompleto()); final CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC"); final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); d.assinar(validacaoCertificadoDigitalDTO.getInfoCertificadoDigital().getCpf(), pathFonte, pathAssinatura + qtdAssinatura, cert, false); } controleGEDDTO.getPathsAssinaturas().add(pathAssinatura + qtdAssinatura); filesDel.add(pathAssinatura + qtdAssinatura); } } } controleGEDDTO = controleGEDService.create(controleGEDDTO); if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S") && !"S".equalsIgnoreCase(prontuarioGedInternoBancoDados)) { // Se utiliza GED // interno if (controleGEDDTO != null) { arquivo = new File(PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + "." + Util.getFileExtension(fi.getName())); fi.write(arquivo); try { bytesAssinar = UtilTratamentoArquivos.getBytesFromFile(arquivo); } catch (final Exception e) { e.printStackTrace(); } CriptoUtils.encryptFile( PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + "." + Util.getFileExtension(fi.getName()), PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + ".ged", System.getProperties().get("user.dir") + Constantes.getValue("CAMINHO_CHAVE_PUBLICA")); if (TEMP_LISTA_CERTIFICADO_DIGITAL != null && TEMP_LISTA_CERTIFICADO_DIGITAL.size() > 0) { int ordem = 1; final CITAssinadorDigital d = new CITAssinadorDigital(); d.inicializar(); for (final Iterator itCert = TEMP_LISTA_CERTIFICADO_DIGITAL.iterator(); itCert .hasNext();) { final ValidacaoCertificadoDigitalDTO validacaoCertificadoDigitalDTO = (ValidacaoCertificadoDigitalDTO) itCert .next(); if (PRONTUARIO_TIPO_CAPT_CERT_DIGITAL.equalsIgnoreCase("APPLET")) { d.assinar( validacaoCertificadoDigitalDTO.getInfoCertificadoDigital().getCpf(), PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + "." + Util.getFileExtension(fi.getName()), PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + ".signed" + ordem, validacaoCertificadoDigitalDTO.getCert(), false); } else { final InputStream inStream = new FileInputStream( validacaoCertificadoDigitalDTO.getCaminhoCompleto()); final CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC"); final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); d.assinar( validacaoCertificadoDigitalDTO.getInfoCertificadoDigital().getCpf(), PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + "." + Util.getFileExtension(fi.getName()), PRONTUARIO_GED_DIRETORIO + "/" + user.getIdEmpresa() + "/" + pasta + "/" + controleGEDDTO.getIdControleGED() + ".signed" + ordem, cert, false); } ordem++; } } arquivo.delete(); } } else if (!PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) { // Se utiliza GED externo System.out.println("CITSMART -> ImagemHistorico -> GED Externo"); final String PRONTUARIO_CLASSE_GED_EXTERNO = ParametroUtil.getValorParametroCitSmartHashMap( Enumerados.ParametroSistema.GedExternoClasse, ""); final Class classe = Class.forName(PRONTUARIO_CLASSE_GED_EXTERNO); System.out.println("CITSMART -> ImagemHistorico -> GED Externo -> " + PRONTUARIO_CLASSE_GED_EXTERNO); final Object objeto = classe.newInstance(); final Method mtd = CitAjaxReflexao.findMethod("create", objeto); final ControleGEDExternoDTO controleGedExternoDto = new ControleGEDExternoDTO(); Reflexao.copyPropertyValues(controleGEDDTO, controleGedExternoDto); final HashMap hshInfo = new HashMap(); fileName = "ANEXO_" + br.com.citframework.util.Util.geraSenhaAleatoria(6) + "_" + Util.getNameFile(fi.getName()); final String fileNameGed = "ANEXO_" + br.com.citframework.util.Util.geraSenhaAleatoria(6) + "_" + Util.getNameFile(fi.getName()); File fileDir = new File(dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa()); if (!fileDir.exists()) { fileDir.mkdirs(); } fileDir = new File(dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa()); if (!fileDir.exists()) { fileDir.mkdirs(); } System.out.println("CITSMART -> ImagemHistorico -> Diretorio -> " + dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + fileName); arquivo = new File(dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + fileName); if (!arquivo.exists()) { arquivo.createNewFile(); } fi.write(arquivo); try { bytesAssinar = UtilTratamentoArquivos.getBytesFromFile(arquivo); } catch (final Exception e) { e.printStackTrace(); } CriptoUtils.encryptFile( dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + fileName, dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + fileNameGed, System.getProperties().get("user.dir") + Constantes.getValue("CAMINHO_CHAVE_PUBLICA")); final File fAux = new File(dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + fileName); fAux.delete(); final File f = new File(dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + fileNameGed); controleGedExternoDto.setConteudoDocumento(UtilTratamentoArquivos.getBytesFromFile(f)); controleGedExternoDto.setCaminhoCompletoDocumento(f.getAbsolutePath()); byte[] conteudoAssinaturaDigital = null; if (TEMP_LISTA_CERTIFICADO_DIGITAL != null && TEMP_LISTA_CERTIFICADO_DIGITAL.size() > 0) { int ordem = 1; final CITAssinadorDigital d = new CITAssinadorDigital(); d.inicializar(); for (final Iterator itCert = TEMP_LISTA_CERTIFICADO_DIGITAL.iterator(); itCert.hasNext();) { final ValidacaoCertificadoDigitalDTO validacaoCertificadoDigitalDTO = (ValidacaoCertificadoDigitalDTO) itCert .next(); if (PRONTUARIO_TIPO_CAPT_CERT_DIGITAL.equalsIgnoreCase("APPLET")) { conteudoAssinaturaDigital = d.assinar(validacaoCertificadoDigitalDTO .getInfoCertificadoDigital().getCpf(), dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + idContrato + "/" + fileNameGed, validacaoCertificadoDigitalDTO.getCert(), false); } else { final InputStream inStream = new FileInputStream( validacaoCertificadoDigitalDTO.getCaminhoCompleto()); final CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC"); final X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream); conteudoAssinaturaDigital = d.assinar(validacaoCertificadoDigitalDTO .getInfoCertificadoDigital().getCpf(), dirSys + Constantes.getValue("CAMINHO_ARQUIVOS_IMAGENS_EMPRESAS") + "/" + user.getIdEmpresa() + "/" + idContrato + "/" + fileNameGed, cert, false); } ordem++; break; // Faz so a primeira. } } controleGedExternoDto.setConteudoAssinaturaDigital(conteudoAssinaturaDigital); mtd.invoke(objeto, new Object[] {controleGedExternoDto, hshInfo}); // Se utiliza GED externo imagemDto.setNomeArquivo(controleGedExternoDto.getNumeroRetorno()); f.delete(); } try { imagemDto.setIdEmpresa(user.getIdEmpresa()); imagemDto.setIdProfissional(user.getIdEmpregado()); imagemDto.setData(UtilDatas.getDataAtual()); // Se utiliza GED interno if (PRONTUARIO_GED_INTERNO.equalsIgnoreCase("S")) { imagemDto.setNomeArquivo(controleGEDDTO.getIdControleGED().toString()); } imagemDto.setIdContrato(new Integer(idContrato)); imagemDto.setObservacao(obs); imagemDto.setAba(aba); imagemDto = imagemHistoricoService.create(imagemDto); String algoritmo = br.com.citframework.util.Constantes.getValue("ALGORITMO_CRIPTOGRAFIA_SENHA"); if (algoritmo == null || !algoritmo.trim().equalsIgnoreCase("")) { algoritmo = "SHA-1"; } final String hash = CriptoUtils.generateHash(bytesAssinar, algoritmo); request.getSession().setAttribute("HASH_CONTEUDO", hash); request.getSession().setAttribute("TABELA_ASS_DIGITAL", ImagemHistoricoDao.getTableNameAssDigital().toUpperCase()); request.getSession().setAttribute("KEY_ASS_DIGITAL", imagemDto.getKey()); // imagemDto.setNomeArquivo(fileName); // imagemHistoricoService.update(imagemDto); } catch (final Exception e) { e.printStackTrace(); throw new Exception(e); } } if (filesDel != null && !filesDel.isEmpty()) { File f = null; for (int i = 0; i < filesDel.size(); i++) { try { f = new File(filesDel.get(i).toString()); if (f.exists()) { f.delete(); } } catch (final Exception e) {} } } } request.getSession(true).setAttribute("msg", null); request.setAttribute("ERRO", null); /* * String msg = "MENSAGEM CITSMART:\r\nARQUIVO TRANSFERIDO COM SUCESSO\r\n\r\nClique em fechar!"; * ServletOutputStream outputStream = response.getOutputStream(); response.setContentType("text/plain"); * response.setHeader("Content-Disposition", "attachment; filename=ARQUIVO_TRANSFERIDO_COM_SUCESSO.txt"); * response.setContentLength(msg.getBytes().length); outputStream.write(msg.getBytes()); outputStream.flush(); * outputStream.close(); */ } catch (final Exception e) { e.printStackTrace(); request.setAttribute("ERRO", "OCORREU ERRO AO TRANSFERIR O ARQUIVO: " + e.getMessage()); /* * request.getSession(true).setAttribute("msg", null); String msg = * "MENSAGEM CITSMART:\r\nOCORREU ERRO AO TRANSFERIR O ARQUIVO\r\n\r\nClique em fechar!\r\n\r\n"; msg += e.getMessage(); * if(e.getStackTrace() != null && e.getStackTrace().length > 0) for(int i = 0; i < e.getStackTrace().length; i++) msg += * e.getStackTrace()[i] + "\r\n"; ServletOutputStream outputStream = response.getOutputStream(); * response.setContentType("text/plain"); * response.setHeader("Content-Disposition", "attachment; filename=ERRO_TRANSFERENCIA_ARQUIVO.txt"); * response.setContentLength(msg.getBytes().length); outputStream.write(msg.getBytes()); outputStream.flush(); * outputStream.close(); throw * new Exception(e); */ } } }