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
-
- -
-
+
-- libgit2 0.21.2