diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java
index 2da795d..550caa1 100644
--- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java
+++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/AssinaturaServiceImpl.java
@@ -1,5 +1,16 @@
package br.com.centralit.api.service.impl;
+import java.util.Hashtable;
+
+import javax.naming.AuthenticationException;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -24,7 +35,10 @@ import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
import br.com.centralit.framework.util.UtilObjeto;
import br.com.centralit.framework.util.UtilString;
+
/**
+ *
Title:
+ * Description:
*
* Title:
*
@@ -36,41 +50,65 @@ import br.com.centralit.framework.util.UtilString;
* @author rogerio.cassimiro
*
*/
+@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
@Service("assinaturaService")
public class AssinaturaServiceImpl extends GenericServiceImpl implements AssinaturaService {
@Autowired
private AssinaturaDao assinaturaDao;
+
@Autowired
private DocumentoGedService documentoGedService;
+
@Autowired
private UsuarioService usuarioService;
+
@Autowired
private DominioService dominioService;
+
@Autowired
private FuncaoService funcaoService;
+
@Autowired
private PessoaService pessoaService;
+
@Autowired
private HistoricoAlteracaoProcessoService historicoAlteracaoProcessoService;
+
@Autowired
private TarjaAssinaturaService tarjaAssinaturaService;
+
@Value("${metodo.autenticacao.ldap}")
private String ldap;
+
+
+ @Value("${ldap.host.name}")
+ public String ldapHostName;
+
+ @Value("${ldap.userDn}")
+ public String ldapUserDn = "CN=CitSmart,OU=CitSmart,OU=Pro,OU=ContasServicos,OU=CentralIT,DC=cit,DC=local";
+
+ @Value("${ldap.manager.password}")
+ public String ldapManagerPassword;
+
+ @Value("${ldap.searchDC}")
+ public String ldapSearchDC;
@Autowired
+ public AssinaturaServiceImpl( AssinaturaDao assinaturaDao) {
public AssinaturaServiceImpl( AssinaturaDao assinaturaDao ) {
this.dao = assinaturaDao;
}
+
/**
* Salva assinatura do documento e gera histórico
@@ -82,6 +120,7 @@ public class AssinaturaServiceImpl extends GenericServiceImpl
validarSenha(assinatura.getPassword(), usuario);
montarTransients(assinatura, usuario);
historicoAlteracaoProcessoService.gerarHistoricoAssinatura(assinatura);
+ tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura,assinatura.getDocumentoGed().getFormaCriacao().getCodigo());
tarjaAssinaturaService.gerarAssinaturaInternaUsuario(assinatura, assinatura.getDocumentoGed().getFormaCriacao().getCodigo());
alterarEstadoDocumento(assinatura.getDocumentoGed());
return super.save(assinatura);
@@ -94,6 +133,7 @@ public class AssinaturaServiceImpl extends GenericServiceImpl
* @param documentoGed
*/
private void alterarEstadoDocumento(DocumentoGed documentoGed) {
+ if(documentoGed.getFormaCriacao().getCodigo().equals(1L) && !documentoGed.getEstado().getCodigo().equals(2L))
if (documentoGed.getFormaCriacao().getCodigo().equals(1L) && !documentoGed.getEstado().getCodigo().equals(2L))
documentoGed.setEstado(dominioService.findByChaveAndCodigo("estadoDocumentoGed", 2L));
@@ -114,6 +154,7 @@ public class AssinaturaServiceImpl extends GenericServiceImpl
assinatura.setTipoAssinatura(dominioService.findByChaveAndCodigo(Dominio.TIPO_ASSINATURA, Dominio.TIPO_ASSINATURA_INTERNA));
assinatura.setFuncao(funcaoService.getReference(assinatura.getFuncao().getId()));
}
+
/**
* Método responsável por validar senha para assinar o documento
@@ -123,21 +164,85 @@ public class AssinaturaServiceImpl extends GenericServiceImpl
* @param usuario
*/
private void validarSenha(String password, Usuario usuario) {
+
+ if(!UtilString.isNullOrEmpty(ldap) && ldap.equals("false")) {
- if (!UtilString.isNullOrEmpty(ldap) && ldap.equals("false")) {
+ if(UtilString.isNullOrEmpty(password))
+ if (!UtilString.isNullOrEmpty(ldap) && !Boolean.parseBoolean(ldap)) {
if (UtilString.isNullOrEmpty(password))
throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
+
+ if(!UtilObjeto.isReferencia(this.usuarioService.loadUserByUsernamePasswordMobile(usuario.getUsername(), password)))
if (!UtilObjeto.isReferencia(this.usuarioService.loadUserByUsernamePasswordMobile(usuario.getUsername(), password)))
throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA_INVALIDA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
+
- } else {
- // TODO LDAP validação
+ } else if (!UtilString.isNullOrEmpty(ldap) && Boolean.parseBoolean(ldap)) {
+
+ autenticarMaster(password, usuario.getUsername());
}
}
/**
+ * Método responsável por autenticar usuário master do LDAP
+ *
+ * @author rogerio.cassimiro
+ * @return {@link Boolean}
+ */
+ public boolean autenticarMaster(String password, String userName) {
+
+ Hashtable authEnv = new Hashtable(11);
+ authEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ authEnv.put(Context.PROVIDER_URL, ldapHostName);
+ authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
+ authEnv.put(Context.SECURITY_PRINCIPAL, ldapUserDn);
+ authEnv.put(Context.SECURITY_CREDENTIALS, ldapManagerPassword);
+
+ try {
+
+ SearchControls groupsSearchCtls = new SearchControls();
+ groupsSearchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+ DirContext authContext = new InitialDirContext(authEnv);
+ NamingEnumeration results = authContext.search(ldapSearchDC, "(sAMAccountName=" + userName + ")", groupsSearchCtls);
+ while (results.hasMore()) {
+ SearchResult result = (SearchResult) results.next();
+ if (autenticarUser(result.getName() + "," + ldapSearchDC, password)) {
+ return Boolean.TRUE;
+ } else {
+ //TODO LDAP validação
+ throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA_INVALIDA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
+ }
+ }
+
+ } catch (AuthenticationException authEx) {
+ throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA_INVALIDA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
+ } catch (NamingException namEx) {
+ throw new BusinessException("ECM.VALIDACAO.SENHA_ASSINATURA_INVALIDA", CodigoErro.REGRA_NEGOCIO.getValue(), "");
+ }
+ return Boolean.FALSE;
+ }
+
+ private boolean autenticarUser(String caminho, String senha) {
+
+ Hashtable authEnv = new Hashtable(11);
+ authEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ authEnv.put(Context.PROVIDER_URL, ldapHostName);
+ authEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
+ authEnv.put(Context.SECURITY_PRINCIPAL, caminho);
+ authEnv.put(Context.SECURITY_CREDENTIALS, senha);
+ try {
+ DirContext authContext = new InitialDirContext(authEnv);
+ return true;
+ } catch (AuthenticationException authEx) {
+ } catch (NamingException namEx) {
+ }
+ return false;
+
+ }
+
+ /**
* Método responsável por validar se o usuário já teve assinatura anterior para o documento informado
*
* @author rogerio.cassimiro
@@ -145,6 +250,7 @@ public class AssinaturaServiceImpl extends GenericServiceImpl
*/
@Override
public Boolean validarAssinaturaPorUsuario(Long idDocumento) {
+ return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId());
return this.assinaturaDao.validarAssinaturaPorUsuario(idDocumento, ( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
}
@@ -154,10 +260,10 @@ public class AssinaturaServiceImpl extends GenericServiceImpl
Assinatura assinatura = (Assinatura) this.assinaturaDao.getReference(id);
assinatura.getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getConteudoTarja().getConteudoCriptografado()));
+ if(UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())){
if (UtilObjeto.isReferencia(assinatura.getDocumentoGed().getConteudoTarja())) {
assinatura.getDocumentoGed().getConteudoTarja().setConteudo(tarjaAssinaturaService.decrypted(assinatura.getDocumentoGed().getConteudoTarja().getConteudoCriptografado()));
}
return assinatura;
}
-
-}
+}
\ No newline at end of file
diff --git a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
index e3d53f2..f707f1a 100644
--- a/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
+++ b/cit-ecm-api/src/main/java/br/com/centralit/api/service/impl/TarjaAssinaturaServiceImpl.java
@@ -52,6 +52,7 @@ import com.lowagie.text.DocumentException;
* @author ciro.junior (ciro.junior@centralit.com.br)
*
*/
+
@Service("tarjaAssinaturaService")
public class TarjaAssinaturaServiceImpl extends GenericServiceImpl implements TarjaAssinaturaService {
@@ -147,7 +148,7 @@ public class TarjaAssinaturaServiceImpl extends GenericServiceImpl
-
-
![]()
-
-