From 53f69354d8e2877bfc546c16a11ef67741d79e9f Mon Sep 17 00:00:00 2001 From: eduardo.batista Date: Wed, 10 May 2017 12:32:23 -0300 Subject: [PATCH] [FEAT] Alterando toda parte de autenticação e token para implementação de contextos. --- controlador_ws.php | 28 +++++++++++++++++++++++++++- rn/MdWsSeiContextoRN.php | 45 +++++++++++++++++++++++++++++++++++++++++++++ rn/MdWsSeiOrgaoRN.php | 32 +++++++++++++------------------- rn/MdWsSeiUsuarioRN.php | 53 ++++++++++++++++++++++++++++++++++++++++------------- 4 files changed, 125 insertions(+), 33 deletions(-) create mode 100644 rn/MdWsSeiContextoRN.php diff --git a/controlador_ws.php b/controlador_ws.php index 2c58e67..066b883 100644 --- a/controlador_ws.php +++ b/controlador_ws.php @@ -51,10 +51,36 @@ $app->group('/api/v1',function(){ /** @var $response Slim\Http\Response */ $rn = new MdWsSeiUsuarioRN(); $usuarioDTO = new UsuarioDTO(); + $contextoDTO = new ContextoDTO(); $usuarioDTO->setStrSigla($request->getParam('usuario')); $usuarioDTO->setStrSenha($request->getParam('senha')); + $contextoDTO->setNumIdContexto($request->getParam('contexto')); + $contextoDTO->setNumIdOrgao($request->getParam('orgao')); - return $response->withJSON($rn->autenticar($usuarioDTO)); + return $response->withJSON($rn->apiAutenticar($usuarioDTO, $contextoDTO)); + }); + /** + * Grupo de controlador de Órgão + */ + $this->group('/orgao', function(){ + $this->get('/listar', function($request, $response, $args){ + /** @var $request Slim\Http\Request */ + $rn = new MdWsSeiOrgaoRN(); + $dto = new OrgaoDTO(); + return $response->withJSON($rn->listarOrgao($dto)); + }); + }); + /** + * Grupo de controlador de Contexto + */ + $this->group('/contexto', function(){ + $this->get('/listar/{orgao}', function($request, $response, $args){ + /** @var $request Slim\Http\Request */ + $rn = new MdWsSeiContextoRN(); + $dto = new OrgaoDTO(); + $dto->setNumIdOrgao($request->getAttribute('route')->getArgument('orgao')); + return $response->withJSON($rn->listarContexto($dto)); + }); }); /** diff --git a/rn/MdWsSeiContextoRN.php b/rn/MdWsSeiContextoRN.php new file mode 100644 index 0000000..3ad9034 --- /dev/null +++ b/rn/MdWsSeiContextoRN.php @@ -0,0 +1,45 @@ +isSetNumIdOrgao()){ + throw new Exception('O órgão do contexto deve ser informado!'); + } + $result = array(); + $contextoRN = new ContextoRN(); + $contextDTOConsulta = new ContextoDTO(); + $contextDTOConsulta->retNumIdContexto(); + $contextDTOConsulta->retStrNome(); + $contextDTOConsulta->retStrDescricao(); + $contextDTOConsulta->retStrBaseDnLdap(); + $contextDTOConsulta->setStrSinAtivo('S'); + $contextDTOConsulta->setNumIdOrgao($orgaoDTO->getNumIdOrgao()); + $ret = $contextoRN->listar($contextDTOConsulta); + /** @var ContextoDTO $contextoDTO */ + foreach($ret as $contextoDTO){ + $result[] = array( + 'id' => $contextoDTO->getNumIdContexto(), + 'nome' => $contextoDTO->getStrNome(), + 'descricao' => $contextoDTO->getStrDescricao(), + 'base_dn_ldap' => $contextoDTO->getStrBaseDnLdap(), + ); + } + + return MdWsSeiRest::formataRetornoSucessoREST(null, $result); + }catch (Exception $e){ + return MdWsSeiRest::formataRetornoErroREST($e); + } + } + +} \ No newline at end of file diff --git a/rn/MdWsSeiOrgaoRN.php b/rn/MdWsSeiOrgaoRN.php index 9844e12..2f80324 100644 --- a/rn/MdWsSeiOrgaoRN.php +++ b/rn/MdWsSeiOrgaoRN.php @@ -10,28 +10,22 @@ class MdWsSeiOrgaoRN extends InfraRN { /** * Retorna todos os orgaos ativos cadastrados * @param OrgaoDTO $orgaoDTO - * @info para p�ginacao e necess�rio informar dentro do DTO os parametros abaixo: - * - setNumMaxRegistrosRetorno - * - setNumPaginaAtual * @return array */ - protected function listarOrgaoConectado(OrgaoDTO $orgaoDTO){ + protected function listarOrgaoConectado(OrgaoDTO $orgaoDTOParam){ try{ $result = array(); - $orgaoRN = new OrgaoRN(); - if(!$orgaoDTO->isRetNumIdOrgao()){ - $orgaoDTO->retNumIdOrgao(); - } - if(!$orgaoDTO->isRetStrSigla()){ - $orgaoDTO->retStrSigla(); - } - if(!$orgaoDTO->isRetStrDescricao()){ - $orgaoDTO->retStrDescricao(); - } - if(!$orgaoDTO->isSetStrSinAtivo()){ - $orgaoDTO->setStrSinAtivo('S'); - } - $ret = $orgaoRN->listarRN1353($orgaoDTO); + $orgaoDTO = new OrgaoDTO(); + $orgaoDTO->retNumIdOrgao(); + $orgaoDTO->retStrSigla(); + $orgaoDTO->retStrDescricao(); + $orgaoDTO->setStrSinAtivo('S'); + + //Chamada Direta ao BD devido a ponta ser um serviço público sem autenticação. + + $orgaoBD = new OrgaoBD($this->getObjInfraIBanco()); + $ret = $orgaoBD->listar($orgaoDTO); + /** @var OrgaoDTO $orgDTO */ foreach($ret as $orgDTO){ $result[] = array( @@ -41,7 +35,7 @@ class MdWsSeiOrgaoRN extends InfraRN { ); } - return MdWsSeiRest::formataRetornoSucessoREST(null, $result, $orgaoDTO->getNumTotalRegistros()); + return MdWsSeiRest::formataRetornoSucessoREST(null, $result); }catch (Exception $e){ return MdWsSeiRest::formataRetornoErroREST($e); } diff --git a/rn/MdWsSeiUsuarioRN.php b/rn/MdWsSeiUsuarioRN.php index d2df8ac..01c6606 100644 --- a/rn/MdWsSeiUsuarioRN.php +++ b/rn/MdWsSeiUsuarioRN.php @@ -50,7 +50,7 @@ class MdWsSeiUsuarioRN extends InfraRN { $fase2 = str_replace($this->getSecret(), '', $fase1); $fase3 = base64_decode($fase2); $tokenData = explode('||', $fase3); - if(count($tokenData) != 2){ + if(count($tokenData) != 4){ return null; } $tokenData[0] = $this->decriptaSenha($tokenData[0]); @@ -60,13 +60,23 @@ class MdWsSeiUsuarioRN extends InfraRN { } /** - * M?todo que criptografa o token + * Método que criptografa o token * @param $sigla * @param $senha + * @param null $orgao + * @param null $contexto * @return string */ - public function tokenEncode($sigla, $senha){ - $token = base64_encode($this->getSecret().base64_encode($this->encriptaSenha($sigla).'||'.$this->encriptaSenha($senha))); + public function tokenEncode($sigla, $senha, $orgao = null, $contexto = null){ + $token = base64_encode( + $this->getSecret() + .base64_encode( + $this->encriptaSenha($sigla) + .'||'.$this->encriptaSenha($senha) + .'||'.$orgao + .'||'.$contexto + ) + ); return $token; } @@ -106,13 +116,15 @@ class MdWsSeiUsuarioRN extends InfraRN { $tokenData = $this->tokenDecode($token); if(!$tokenData){ - throw new InfraException('Token inv?lido!'); + throw new InfraException('Token inválido!'); } - $usuarioDTO = new UsuarioDTO(); $usuarioDTO->setStrSigla($tokenData[0]); $usuarioDTO->setStrSenha($tokenData[1]); - $result = $this->autenticar($usuarioDTO); + $contextoDTO = new ContextoDTO(); + $contextoDTO->setNumIdOrgao($tokenData[2]); + $contextoDTO->setNumIdContexto($tokenData[3]); + $result = $this->apiAutenticar($usuarioDTO, $contextoDTO); if(!$result['sucesso']){ return $result; } @@ -131,9 +143,12 @@ class MdWsSeiUsuarioRN extends InfraRN { * @param $senha * @param $IdOrgao */ - protected function autenticarConectado(UsuarioDTO $usuarioDTO){ + public function apiAutenticar(UsuarioDTO $usuarioDTO, ContextoDTO $contextoDTO){ try{ - if(!$usuarioDTO->isSetNumIdOrgao()){ + $contexto = $contextoDTO->getNumIdContexto(); + $orgao = $contextoDTO->getNumIdOrgao(); + $siglaOrgao = null; + if(!$orgao){ $orgaoRN = new OrgaoRN(); $objOrgaoDTO = new OrgaoDTO(); $objOrgaoDTO->setBolExclusaoLogica(false); @@ -144,16 +159,27 @@ class MdWsSeiUsuarioRN extends InfraRN { * Orgao da sessao do sistema */ $orgaoCarregdo = $orgaoRN->consultarRN1352($objOrgaoDTO); - $usuarioDTO->setNumIdOrgao($orgaoCarregdo->getNumIdOrgao()); + $orgao = $orgaoCarregdo->getNumIdOrgao(); + $siglaOrgao = ConfiguracaoSEI::getInstance()->getValor('SessaoSEI', 'SiglaOrgaoSistema'); } + if(!$siglaOrgao){ + $orgaoRN = new OrgaoRN(); + $objOrgaoDTO = new OrgaoDTO(); + $objOrgaoDTO->setBolExclusaoLogica(false); + $objOrgaoDTO->retStrSigla(); + $objOrgaoDTO->setNumIdOrgao($orgao); + $objOrgaoDTO = $orgaoRN->consultarRN1352($objOrgaoDTO); + $siglaOrgao = $objOrgaoDTO->getStrSigla(); + } + $objSipWs = $this->retornaServicoSip(); $ret = $objSipWs->autenticarCompleto( - $usuarioDTO->getNumIdOrgao(), - null, + $orgao, + $contexto, $usuarioDTO->getStrSigla(), $this->encriptaSenha($usuarioDTO->getStrSenha()), ConfiguracaoSEI::getInstance()->getValor('SessaoSEI', 'SiglaSistema'), - ConfiguracaoSEI::getInstance()->getValor('SessaoSEI', 'SiglaOrgaoSistema') + $siglaOrgao ); if(!$ret){ @@ -241,6 +267,7 @@ class MdWsSeiUsuarioRN extends InfraRN { false, false ); + var_dump($ret);exit; return MdWsSeiRest::formataRetornoSucessoREST(null, $ret); }catch (Exception $e){ return MdWsSeiRest::formataRetornoErroREST($e); -- libgit2 0.21.2