diff --git a/src/main/java/br/com/swconsultoria/certificado/CertificadoService.java b/src/main/java/br/com/swconsultoria/certificado/CertificadoService.java index 39d73ac..199686a 100644 --- a/src/main/java/br/com/swconsultoria/certificado/CertificadoService.java +++ b/src/main/java/br/com/swconsultoria/certificado/CertificadoService.java @@ -48,8 +48,9 @@ public static void inicializaCertificado(Certificado certificado, InputStream ca Protocol.registerProtocol("https", protocol); log.info(String.format("JAVA-CERTIFICADO | Samuel Oliveira | samuel@swconsultoria.com.br " + - "| VERSAO=%s | CNPJ/CPF=%s | VENCIMENTO=%s | ALIAS=%s | TIPO=%s | CAMINHO=%s | CACERT=%s | SSL=%s", - "3.1", + "| VERSAO=%s | DATA_VERSAO=%s | CNPJ/CPF=%s | VENCIMENTO=%s | ALIAS=%s | TIPO=%s | CAMINHO=%s | CACERT=%s | SSL=%s", + "3.2", + "04/03/2024", certificado.getCnpjCpf(), certificado.getDataHoraVencimento(), certificado.getNome().toUpperCase(), @@ -90,7 +91,7 @@ private static void setDadosCertificado(Certificado certificado, KeyStore keySto } X509Certificate certificate = getCertificate(certificado, keyStore); - certificado.setCnpjCpf(getDocumentoFromCertificado(certificate)); + certificado.setCnpjCpf(getDocumentoFromCertificado(certificate.getSubjectX500Principal().getName())); Date dataValidade = dataValidade(certificate); certificado.setVencimento(dataValidade.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()); certificado.setDataHoraVencimento(dataValidade.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); @@ -259,20 +260,27 @@ public static Certificado getCertificadoByCnpjCpf(String cnpjCpf) throws Certifi cnpjCpf)); } - public static String getDocumentoFromCertificado(X509Certificate cert) { + public static String getDocumentoFromCertificado(String texto) { - String texto = cert.getSubjectX500Principal().getName(); + // Primeiro, tenta encontrar CNPJs + Pattern patternCNPJ = Pattern.compile("(?() { @Mock public Certificado getCertificadoByCnpjCpf(String cpfCnpj) { - return Stream.of(certCPF, certCNPJ).filter(cert -> Optional.ofNullable(cert.getCnpjCpf()).orElse("") + return Stream.of(certCPF, certCNPJ).filter(cert -> Optional.ofNullable(cert.getCnpjCpf()).orElse("") .startsWith(cpfCnpj)).findFirst().orElse(null); } }; @@ -162,7 +164,7 @@ public Certificado getCertificadoByCnpjCpf(String cpfCnpj) { @Test void inicaConfiguracoesCorretamente() { - Assertions.assertDoesNotThrow( () -> { + Assertions.assertDoesNotThrow(() -> { Certificado certificado = CertificadoService.certificadoPfx(CERTIFICADO_CNPJ, SENHA); CertificadoService.inicializaCertificado(certificado); }); @@ -176,12 +178,30 @@ void inicaConfiguracoesParametrosNull() throws IOException, CertificadoException //Certificado Null Assertions.assertThrows(IllegalArgumentException.class, () -> - CertificadoService.inicializaCertificado(null) + CertificadoService.inicializaCertificado(null) ); //Cacert Null Assertions.assertThrows(IllegalArgumentException.class, () -> - CertificadoService.inicializaCertificado(null) + CertificadoService.inicializaCertificado(null) ); } + @Test + void extraiCpfCnpjCorretamente() { + String textoCnpj = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CNPJ=07364617000135"; + assertEquals("07364617000135", CertificadoService.getDocumentoFromCertificado(textoCnpj)); + + String textoCpf = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CPF=99999999999"; + assertEquals("99999999999", CertificadoService.getDocumentoFromCertificado(textoCpf)); + + String textoCnpjeCPF = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CNPJ=07364617000135, CPF=99999999999"; + assertEquals("07364617000135", CertificadoService.getDocumentoFromCertificado(textoCnpjeCPF)); + + String textoCpfECNPJ = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB, CPF=99999999999, CNPJ=07364617000135"; + assertEquals("07364617000135", CertificadoService.getDocumentoFromCertificado(textoCpfECNPJ)); + + String textoSemNenhumDocumento = "C=BR, O=ICP-Brasil, OU=Secretaria da Receita Federal do Brasil - RFB"; + assertEquals("", CertificadoService.getDocumentoFromCertificado(textoSemNenhumDocumento)); + } + } \ No newline at end of file