Commit 00286f74a3d7c5b805a3050c17dc8721217eb125

Authored by rogerio.costa
1 parent 04a6ed49
Exists in master

[4583] - Assinar documento digital.

cit-ecm-api/src/main/java/br/com/centralit/api/model/DocumentoGed.java
... ... @@ -120,6 +120,12 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
120 120 @Type(type = "org.hibernate.type.BinaryType")
121 121 private byte[] conteudoCriptografado;
122 122  
  123 + /** Atributo conteudoAssinado. */
  124 + @Lob
  125 + @Basic(fetch = FetchType.LAZY)
  126 + @Type(type = "org.hibernate.type.BinaryType")
  127 + private byte[] conteudoAssinado;
  128 +
123 129 /** Atributo icon. */
124 130 @JsonView({ ViewsEcm.DocumentoGedEdit.class, Views.ProcessoEdit.class, ViewsEcm.ClassificacaoDocumentoGedView.class })
125 131 private String icon;
... ... @@ -1070,4 +1076,24 @@ public class DocumentoGed extends PersistentObjectUnidade implements Cloneable {
1070 1076 this.tresAssinaturas = tresAssinaturas;
1071 1077 }
1072 1078  
  1079 + /**
  1080 + * Retorna o valor do atributo <code>conteudoAssinado</code>
  1081 + *
  1082 + * @return <code>byte[]</code>
  1083 + */
  1084 + public byte[] getConteudoAssinado() {
  1085 +
  1086 + return conteudoAssinado;
  1087 + }
  1088 +
  1089 + /**
  1090 + * Define o valor do atributo <code>conteudoAssinado</code>.
  1091 + *
  1092 + * @param conteudoAssinado
  1093 + */
  1094 + public void setConteudoAssinado(byte[] conteudoAssinado) {
  1095 +
  1096 + this.conteudoAssinado = conteudoAssinado;
  1097 + }
  1098 +
1073 1099 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/AssinaturaUtilService.java
1 1 package br.com.centralit.api.service;
2 2  
  3 +import java.security.NoSuchAlgorithmException;
  4 +
3 5 /**
4 6 * <p>
5 7 * <img src="http://centralit.com.br/images/logo_central.png">
... ... @@ -53,4 +55,42 @@ public interface AssinaturaUtilService {
53 55 */
54 56 byte[] geraAssinatura(byte[] conteudo) throws Exception;
55 57  
  58 + /**
  59 + * <p>
  60 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  61 + * </p>
  62 + *
  63 + * <p>
  64 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  65 + * </p>
  66 + *
  67 + * Método responsável por gerar o hash do documento
  68 + *
  69 + * @author rogerio.costa
  70 + *
  71 + * @param doc
  72 + * @return
  73 + * @throws NoSuchAlgorithmException
  74 + */
  75 + byte[] gerarHash(byte[] doc) throws NoSuchAlgorithmException;
  76 +
  77 + /**
  78 + * <p>
  79 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  80 + * </p>
  81 + *
  82 + * <p>
  83 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  84 + * </p>
  85 + *
  86 + * Método responsável por por gerar o hash do documento
  87 + *
  88 + * @author rogerio.costa
  89 + *
  90 + * @param doc
  91 + * @return
  92 + * @throws NoSuchAlgorithmException
  93 + */
  94 + String gerarHash(String doc) throws NoSuchAlgorithmException;
  95 +
56 96 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaUtilServiceImpl.java
... ... @@ -214,11 +214,63 @@ public class AssinaturaUtilServiceImpl implements AssinaturaUtilService {
214 214 */
215 215 public byte[] gerarHash(byte[] doc) throws NoSuchAlgorithmException {
216 216  
217   - MessageDigest md = MessageDigest.getInstance("MD5");
  217 + MessageDigest md = MessageDigest.getInstance("SHA-1");
218 218  
219 219 md.update(doc);
220 220  
221 221 return md.digest();
222 222 }
223 223  
  224 + /**
  225 + * <p>
  226 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  227 + * </p>
  228 + *
  229 + * <p>
  230 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  231 + * </p>
  232 + *
  233 + * Método responsável por por gerar o hash do documento
  234 + *
  235 + * @author rogerio.costa
  236 + *
  237 + * @param doc
  238 + * @return
  239 + * @throws NoSuchAlgorithmException
  240 + */
  241 + public String gerarHash(String doc) throws NoSuchAlgorithmException {
  242 +
  243 + MessageDigest digest = MessageDigest.getInstance("SHA-1");
  244 +
  245 + digest.update(doc.getBytes());
  246 +
  247 + return convertByteArrayToHexString(digest.digest());
  248 + }
  249 +
  250 + /**
  251 + * <p>
  252 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  253 + * </p>
  254 + *
  255 + * <p>
  256 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  257 + * </p>
  258 + *
  259 + * Método responsável por converter byte para String
  260 + *
  261 + * @author rogerio.costa
  262 + *
  263 + * @param arrayBytes
  264 + *
  265 + * @return String
  266 + */
  267 + private static String convertByteArrayToHexString(byte[] arrayBytes) {
  268 +
  269 + StringBuffer stringBuffer = new StringBuffer();
  270 + for (int i = 0; i < arrayBytes.length; i++) {
  271 + stringBuffer.append(Integer.toString(( arrayBytes[i] & 0xff ) + 0x100, 16).substring(1));
  272 + }
  273 + return stringBuffer.toString();
  274 + }
  275 +
224 276 }
... ...
cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
... ... @@ -19,6 +19,7 @@ import br.com.centralit.api.model.Assinatura;
19 19 import br.com.centralit.api.model.ConteudoTarja;
20 20 import br.com.centralit.api.model.TarjaAssinatura;
21 21 import br.com.centralit.api.service.AnexoImagemService;
  22 +import br.com.centralit.api.service.AssinaturaUtilService;
22 23 import br.com.centralit.api.service.DominioService;
23 24 import br.com.centralit.api.service.OrganizacaoService;
24 25 import br.com.centralit.api.service.TarjaAssinaturaService;
... ... @@ -65,6 +66,10 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
65 66  
66 67 private TarjaAssinaturaDao tarjaAssinaturaDao;
67 68  
  69 + /** Atributo assinaturaUtilService. */
  70 + @Autowired
  71 + private AssinaturaUtilService assinaturaUtilService;
  72 +
68 73 @Autowired
69 74 private DominioService dominioService;
70 75  
... ... @@ -162,23 +167,21 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
162 167 */
163 168 private String getConteudoTarja(Assinatura assinatura, String conteudoAssinatura, TarjaAssinatura tarjaAssinatura) {
164 169  
165   - conteudoAssinatura = conteudoAssinatura.replaceAll(TarjaAssinatura.NOME_ASSINANTE, assinatura.getPessoa().getNome())
166   - .replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getFuncao().getNome())
167   - .replaceAll(TarjaAssinatura.DATA_ASSINATURA, UtilDate.getDataSemHorasString(Calendar.getInstance().getTime()))
168   - .replaceAll(TarjaAssinatura.HORA_ASSINATURA, UtilDate.getHoraAtualHHMMSS())
169   - .replaceAll(TarjaAssinatura.LOGO, getStringBase64(tarjaAssinatura));
  170 + conteudoAssinatura = conteudoAssinatura.replaceAll(TarjaAssinatura.NOME_ASSINANTE, assinatura.getPessoa().getNome()).replaceAll(TarjaAssinatura.FUNCAO_ASSINANTE, assinatura.getFuncao().getNome()).replaceAll(TarjaAssinatura.DATA_ASSINATURA, UtilDate.getDataSemHorasString(Calendar.getInstance().getTime())).replaceAll(TarjaAssinatura.HORA_ASSINATURA, UtilDate.getHoraAtualHHMMSS()).replaceAll(TarjaAssinatura.LOGO, getStringBase64(tarjaAssinatura));
170 171 return conteudoAssinatura;
171 172 }
172   -
  173 +
173 174 /**
174 175 * Método responsável por obter string em formato Base64 para apresentação no html
  176 + *
175 177 * @author rogerio.cassimiro
176 178 * @param assinatura
177 179 * @return {@link String}
178 180 */
179 181 private String getStringBase64(TarjaAssinatura tarjaAssinatura) {
  182 +
180 183 StringBuilder imgBase64 = new StringBuilder("");
181   - if(tarjaAssinatura.getConteudo().contains("@logo@") && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem()) && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem().getAnexo())){
  184 + if (tarjaAssinatura.getConteudo().contains("@logo@") && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem()) && UtilObjeto.isReferencia(tarjaAssinatura.getAnexoImagem().getAnexo())) {
182 185 imgBase64.append("<img src='data:image/png;base64, ");
183 186 imgBase64.append(UtilBase64.byteToBase64(tarjaAssinatura.getAnexoImagem().getAnexo()));
184 187 imgBase64.append("' height='60' width='60' />");
... ... @@ -193,11 +196,11 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
193 196 * @param assinatura
194 197 * @param tarjaAssinatura
195 198 * @param conteudoAssinatura
196   - * @throws DocumentException
197   - * @throws IOException
  199 + * @throws DocumentException
  200 + * @throws IOException
198 201 */
199 202 private void gerarAssinaturaDocAnexo(Assinatura assinatura, AnexoImagem anexoImagem, String conteudoAssinatura) {
200   -
  203 +
201 204 assinatura.getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoAssinatura));
202 205 assinatura.getConteudoTarja().setAnexoImagem(anexoImagem);
203 206 }
... ... @@ -213,7 +216,7 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
213 216 private void gerarAssinaturaDocOnline(Assinatura assinatura, AnexoImagem anexoImagem, String conteudoAssinatura) {
214 217  
215 218 StringBuilder conteudoOriginalDocOnLine = new StringBuilder();
216   -
  219 +
217 220 if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
218 221 conteudoOriginalDocOnLine.append(decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
219 222 } else {
... ... @@ -221,9 +224,19 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl&lt;TarjaAssinatu
221 224 conteudoOriginalDocOnLine.append(decrypted(assinatura.getDocumentoGed().getConteudoCriptografado()));
222 225 }
223 226 conteudoOriginalDocOnLine.append("<br />").append(conteudoAssinatura);
224   - assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine.toString()));
  227 + try {
  228 + // Assinar documento
  229 + assinatura.getDocumentoGed().setConteudoAssinado(this.assinaturaUtilService.geraAssinatura(conteudoOriginalDocOnLine.toString().getBytes()));
  230 +
  231 + conteudoOriginalDocOnLine.append("<br />").append(this.assinaturaUtilService.gerarHash(conteudoOriginalDocOnLine.toString()));
  232 +
  233 + assinatura.getDocumentoGed().getConteudoTarja().setConteudoCriptografado(this.encrypted(conteudoOriginalDocOnLine.toString()));
  234 +
  235 + } catch (Exception e) {
  236 + e.printStackTrace();
  237 + }
225 238 }
226   -
  239 +
227 240 /**
228 241 * Método responsável por criptografar o texto através da chave
229 242 *
... ...