package gov.pr.celepar.tabeliao.facade;
/*
Este programa � licenciado de acordo com a
LPG-AP (LICEN�A P�BLICA GERAL PARA PROGRAMAS DE COMPUTADOR DA ADMINISTRA��O P�BLICA),
vers�o 1.1 ou qualquer vers�o posterior.
A LPG-AP deve acompanhar todas PUBLICA��ES, DISTRIBUI��ES e REPRODU��ES deste Programa.
Caso uma c�pia da LPG-AP n�o esteja dispon�vel junto com este Programa,
voc� pode contatar o LICENCIANTE ou ent�o acessar diretamente:
http://www.celepar.pr.gov.br/licenca/LPG-AP.pdf
Para poder USAR, PUBLICAR, DISTRIBUIR, REPRODUZIR ou ALTERAR este Programa
� preciso estar de acordo com os termos da LPG-AP
*/
import gov.pr.celepar.framework.exception.ApplicationException;
import gov.pr.celepar.tabeliao.core.TabeliaoCertificate;
import gov.pr.celepar.tabeliao.dao.CertificadoAcDAO;
import gov.pr.celepar.tabeliao.dao.CertificadoPublicoDAO;
import gov.pr.celepar.tabeliao.dao.factory.DAOFactory;
import gov.pr.celepar.tabeliao.database.HibernateUtil;
import gov.pr.celepar.tabeliao.pojo.CertificadoAc;
import gov.pr.celepar.tabeliao.pojo.CertificadoPublico;
import java.security.cert.X509Certificate;
import java.util.Date;
/**
* classe FACADE de servicos para manipulacao dos certificados armazenados na base de dados do Tabeliao.
* @author Thiago Meneghello - GIC/CELEPAR
*
*/
public class CertificadoFacade{
/**
* Busca de certificado de Autoridade Certificadora.
* @param keyId
* @return CertificadoAc
* @throws ApplicationException
* @throws Exception
*/
public static CertificadoAc buscarCertificadoAcPorKeyId(String keyId) throws ApplicationException, Exception {
CertificadoAcDAO certificadoAcDAO = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE).getCertificadoAcDAO();
return certificadoAcDAO.buscarPorKeyId(keyId);
}
/**
* Busca por certificado Publico da Autoridade certificadora
* @param certificadoAc -> Certificado da autoridade
* @param numSerie
* @return CertificadoPublico (gov.pr.celepar.tabeliao.pojo.CertificadoPublico)
* @throws ApplicationException
* @throws Exception
*/
public static CertificadoPublico buscarCertificadoPublico(CertificadoAc certificadoAc, String numSerie) throws ApplicationException, Exception {
CertificadoPublicoDAO certificadoPublicoDAO = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE).getCertificadoPublicoDAO();
return certificadoPublicoDAO.buscarCertificadoPublicoPorCertificadoSerial(certificadoAc, numSerie);
}
/**
* Insere o certificado publico na base de dados do Tabeliao
* @param certificadoPublico
* @throws ApplicationException
* @throws Exception
*/
public static void inserirCertificadoPublico(CertificadoPublico certificadoPublico) throws ApplicationException, Exception{
HibernateUtil.currentTransaction();
try {
//Cria uma instancia de certificado
TabeliaoCertificate tc = new TabeliaoCertificate(certificadoPublico);
X509Certificate xCert = tc.getX509Certificate();
CertificadoAc certificadoAc = buscarCertificadoAcPorKeyId(tc.getAuthorityKeyIdentifier());
if(certificadoAc == null) {
throw new Exception("N�o foi possivel localizar o certificado da Ac.");
}
certificadoPublico.setCertificadoAc(certificadoAc);
certificadoPublico.setDn(xCert.getSubjectDN().getName());
certificadoPublico.setDtInclusao(new Date());
certificadoPublico.setDtValidadeFim(xCert.getNotAfter());
certificadoPublico.setDtValidadeIni(xCert.getNotBefore());
certificadoPublico.setEmail(tc.getEmail());
certificadoPublico.setIdUsuSentinela(null);
certificadoPublico.setNome(tc.getCertificadoPara().getProperty("CN"));
certificadoPublico.setNumSerie(tc.getSerialNumber());
certificadoPublico.setRevogado(false);
CertificadoPublicoDAO certificadoPublicoDAO = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE).getCertificadoPublicoDAO();
certificadoPublicoDAO.salvar(certificadoPublico);
HibernateUtil.commitTransaction();
} catch (Exception e) {
HibernateUtil.rollbackTransaction();
throw e;
} finally {
HibernateUtil.closeSession();
}
}
}