Commit a74ea6d3709e772443549cdabec4dc1a7c1686f6
1 parent
ee0e9739
Exists in
master
and in
1 other branch
Remove as dependencias da lib interna da ans
Remove dependencia da lib interna da ans, para o software publico. OTRS: 2019010920000392
Showing
5 changed files
with
103 additions
and
12 deletions
Show diff stats
README.md
| 1 | 1 | # SEI-Broker - Camada REST de acesso ao SEI |
| 2 | 2 | O SEI-Broker é uma camada de integração que foi desenvolvida para integrar os sistemas corporativos da ANS e o SEI, Sistema Eletrônico de Informações do TRF 4. Toda essa camada foi criada utilizando o padrão RESTful de serviços web, sua função é facilitar a integração dos sistemas da ANS com o SEI, utilizando um protocolo mais simples, moderno e performático. A adoção do broker nos permite criar uma camada de abstração para evitar que mudanças no SEI afetem as integrações, isso é possível pelo fato do broker utilizar REST e possuir contrato fraco. |
| 3 | 3 | |
| 4 | -O Broker atualmente está na versão 2.9.1, essa versão é compatível com o SEI 3.0.13. É importante destacar que é necessário atualizar o SEI-Broker a cada atualização do SEI que altere os serviços web. | |
| 4 | +O Broker atualmente está na versão 2.9.2, essa versão é compatível com o SEI 3.0.13. É importante destacar que é necessário atualizar o SEI-Broker a cada atualização do SEI que altere os serviços web. | |
| 5 | 5 | |
| 6 | 6 | Alguns serviços adicionais foram desenvolvidos para extrair dados que não são ofertados pelos serviços nativos do SEI, estes serviços fazem acesso a base de dados do SEI e realizam operações apenas de consulta. A escrita de dados continua a ser exclusividade dos serviços nativos, desta forma a integridade e coerência das inserções é mantida. |
| 7 | 7 | ... | ... |
apidoc.json
| 1 | 1 | { |
| 2 | 2 | "name": "sei-broker", |
| 3 | - "version": "2.9.1", | |
| 3 | + "version": "2.9.2", | |
| 4 | 4 | "description": "Documentação da camada de integração ANS X SEI. Essa documentação serve para apoiar aos consumidores da camada de integração, pode ser necessário consultar a <a href=\"https://softwarepublico.gov.br/social/sei/manuais\">documentação oficial do SEI</a> para melhor entendimento do negócio e seus objetos. Mais informações do SEI-Broker veja o <a href=\"http://wiki.ans.gov.br/index.php/Sei-broker\">artigo wiki</a>.", |
| 5 | 5 | "title": "Documentação - sei-broker", |
| 6 | 6 | "url":"https://<host>/sei-broker/service", | ... | ... |
pom.xml
| ... | ... | @@ -4,7 +4,7 @@ |
| 4 | 4 | <modelVersion>4.0.0</modelVersion> |
| 5 | 5 | <groupId>br.gov.ans</groupId> |
| 6 | 6 | <artifactId>sei-broker</artifactId> |
| 7 | - <version>2.9.1</version> | |
| 7 | + <version>2.9.2</version> | |
| 8 | 8 | <packaging>war</packaging> |
| 9 | 9 | <name>sei-broker</name> |
| 10 | 10 | <description>Camada de integração REST para comunicação com o SEI</description> |
| ... | ... | @@ -209,13 +209,6 @@ |
| 209 | 209 | <version>2.6.2</version> |
| 210 | 210 | </dependency> |
| 211 | 211 | |
| 212 | - <!-- HASH --> | |
| 213 | - <dependency> | |
| 214 | - <groupId>br.gov.ans.commons</groupId> | |
| 215 | - <artifactId>ans-commons-security</artifactId> | |
| 216 | - <version>2.0</version> | |
| 217 | - </dependency> | |
| 218 | - | |
| 219 | 212 | <!-- PDF --> |
| 220 | 213 | <dependency> |
| 221 | 214 | <groupId>org.xhtmlrenderer</groupId> | ... | ... |
src/main/java/br/gov/ans/integracao/sei/rest/DocumentoResource.java
| ... | ... | @@ -38,7 +38,7 @@ import org.apache.commons.io.IOUtils; |
| 38 | 38 | import org.apache.commons.lang3.StringUtils; |
| 39 | 39 | import org.jboss.logging.Logger; |
| 40 | 40 | |
| 41 | -import br.gov.ans.commons.security.crypt.HashUtils; | |
| 41 | +import br.gov.ans.integracao.sei.utils.HashUtils; | |
| 42 | 42 | import br.gov.ans.dao.DAO; |
| 43 | 43 | import br.gov.ans.integracao.sei.client.Documento; |
| 44 | 44 | import br.gov.ans.integracao.sei.client.RetornoConsultaDocumento; |
| ... | ... | @@ -276,7 +276,7 @@ public class DocumentoResource { |
| 276 | 276 | public String calcularHashDocumento(String input){ |
| 277 | 277 | try { |
| 278 | 278 | logger.debug(messages.getMessage("hash.em.geracao")); |
| 279 | - return HashUtils.toSHA256(input, null); | |
| 279 | + return HashUtils.SHA256.encrypt(input, null); | |
| 280 | 280 | } catch (Exception ex) { |
| 281 | 281 | logger.error(messages.getMessage("erro.calculo.hash")); |
| 282 | 282 | logger.debug(ex, ex); | ... | ... |
src/main/java/br/gov/ans/integracao/sei/utils/HashUtils.java
0 → 100644
| ... | ... | @@ -0,0 +1,98 @@ |
| 1 | +package br.gov.ans.integracao.sei.utils; | |
| 2 | + | |
| 3 | +import java.nio.charset.StandardCharsets; | |
| 4 | +import java.security.MessageDigest; | |
| 5 | +import java.security.NoSuchAlgorithmException; | |
| 6 | + | |
| 7 | +import org.apache.commons.codec.binary.Base64; | |
| 8 | + | |
| 9 | + | |
| 10 | +public class HashUtils { | |
| 11 | + | |
| 12 | + /** | |
| 13 | + * Exclusiva para encoding Base64 | |
| 14 | + * | |
| 15 | + */ | |
| 16 | + public static class BASE64 { | |
| 17 | + | |
| 18 | + | |
| 19 | + /** | |
| 20 | + * <p>Codifica uma String utilizado o algoritimo Base64.</p> | |
| 21 | + * | |
| 22 | + * @param input valor a ser decodificado | |
| 23 | + * @param salt valor opcional a ser concatenado na codificação | |
| 24 | + * @return String codificada | |
| 25 | + */ | |
| 26 | + public static String encrypt(String input, String salt) { | |
| 27 | + String cipher = null; | |
| 28 | + | |
| 29 | + if(salt != null){ | |
| 30 | + cipher = new String(Base64.encodeBase64(salt.getBytes(StandardCharsets.UTF_8))); | |
| 31 | + } | |
| 32 | + cipher += new String(Base64.encodeBase64(input.getBytes(StandardCharsets.UTF_8))); | |
| 33 | + | |
| 34 | + return cipher; | |
| 35 | + } | |
| 36 | + | |
| 37 | + /** | |
| 38 | + * <p>Decodifica uma String utilizado o algoritimo Base64.</p> | |
| 39 | + * | |
| 40 | + * @param input valor a ser decodificado. | |
| 41 | + * @param salt valor aleatório opcional concatenado na codificação que deve ser removido | |
| 42 | + * @return String decodificada | |
| 43 | + */ | |
| 44 | + public static String decrypt(String input, String salt) { | |
| 45 | + if(salt != null){ | |
| 46 | + if(input.length() > salt.length()) { | |
| 47 | + byte[] key = Base64.encodeBase64(salt.getBytes(StandardCharsets.UTF_8)); | |
| 48 | + input = input.substring(key.length); | |
| 49 | + } else{ | |
| 50 | + return null; | |
| 51 | + } | |
| 52 | + } | |
| 53 | + | |
| 54 | + return new String(Base64.decodeBase64(input.getBytes()), StandardCharsets.UTF_8); | |
| 55 | + } | |
| 56 | + } | |
| 57 | + | |
| 58 | + /** | |
| 59 | + * Exclusiva para encoding SHA-256 | |
| 60 | + * | |
| 61 | + */ | |
| 62 | + public static class SHA256 { | |
| 63 | + | |
| 64 | + /** | |
| 65 | + * <p>Calcula o hash utilizado o algoritimo SHA-256, o método recebe os parametros input e salt, | |
| 66 | + * sendo o input obrigatório e o salt opcional.</p> | |
| 67 | + * | |
| 68 | + * @param input valor a ser codificado | |
| 69 | + * @param salt valor opcional a ser concatenado na codificação (opcional) | |
| 70 | + * | |
| 71 | + * @return resultado do calculo do hash. | |
| 72 | + * | |
| 73 | + * @throws NoSuchAlgorithmException quando o algoritimo de criptografia <b>SHA-256</b> não estiver disponível | |
| 74 | + * | |
| 75 | + */ | |
| 76 | + public static String encrypt(String input, String salt) throws NoSuchAlgorithmException { | |
| 77 | + MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); | |
| 78 | + | |
| 79 | + if (salt != null) { | |
| 80 | + input = input + salt; | |
| 81 | + } | |
| 82 | + | |
| 83 | + byte[] inputBytes = input.getBytes(); | |
| 84 | + byte[] inputHash = sha256.digest(inputBytes); | |
| 85 | + StringBuilder sb = new StringBuilder(); | |
| 86 | + | |
| 87 | + for (int i = 0; i < inputHash.length; i++) { | |
| 88 | + sb.append(Integer.toString((inputHash[i] & 0xff) + 0x100, 16) | |
| 89 | + .substring(1)); | |
| 90 | + } | |
| 91 | + | |
| 92 | + String generatedHash = sb.toString(); | |
| 93 | + return generatedHash; | |
| 94 | + } | |
| 95 | + } | |
| 96 | + | |
| 97 | + | |
| 98 | +} | ... | ... |