Ejemplo n.º 1
0
        public async Task<UsuarioAutenticacaoRetornoDto> Autenticar(string login, string senha)
        {
            var retornoAutenticacaoEol = await servicoAutenticacao.AutenticarNoEol(login, senha);

            if (retornoAutenticacaoEol.Item1.Autenticado)
            {
                var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(retornoAutenticacaoEol.Item2, login);

                retornoAutenticacaoEol.Item1.PerfisUsuario = servicoPerfil.DefinirPerfilPrioritario(retornoAutenticacaoEol.Item3, usuario);

                var perfilSelecionado = retornoAutenticacaoEol.Item1.PerfisUsuario.PerfilSelecionado;

                var permissionamentos = await servicoEOL.ObterPermissoesPorPerfil(perfilSelecionado);

                if (permissionamentos == null || !permissionamentos.Any())
                {
                    retornoAutenticacaoEol.Item1.Autenticado = false;
                }
                else
                {
                    var listaPermissoes = permissionamentos
                        .Distinct()
                        .Select(a => (Permissao)a)
                        .ToList();

                    retornoAutenticacaoEol.Item1.Token = servicoTokenJwt.GerarToken(login, usuario.CodigoRf, retornoAutenticacaoEol.Item1.PerfisUsuario.PerfilSelecionado, listaPermissoes);

                    usuario.AtualizaUltimoLogin();
                    repositorioUsuario.Salvar(usuario);
                    await servicoAbrangencia.Salvar(login, perfilSelecionado, true);
                }
            }
            return retornoAutenticacaoEol.Item1;
        }
        public async Task <UsuarioAutenticacaoRetornoDto> Autenticar(string login, string senha)
        {
            login = login.Trim().ToLower();

            var retornoAutenticacaoEol = await servicoAutenticacao.AutenticarNoEol(login, senha);

            if (!retornoAutenticacaoEol.Item1.Autenticado)
            {
                return(retornoAutenticacaoEol.Item1);
            }

            if (!retornoAutenticacaoEol.Item4 && retornoAutenticacaoEol.Item5)
            {
                retornoAutenticacaoEol.Item3 = ValidarPerfilCJ(retornoAutenticacaoEol.Item2, retornoAutenticacaoEol.Item1.UsuarioId, retornoAutenticacaoEol.Item3, login).Result;
            }

            var dadosUsuario = await servicoEOL.ObterMeusDados(login);

            var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(retornoAutenticacaoEol.Item2, login, dadosUsuario.Nome, dadosUsuario.Email, true);

            retornoAutenticacaoEol.Item1.PerfisUsuario = await servicoPerfil.DefinirPerfilPrioritario(retornoAutenticacaoEol.Item3, usuario);

            var perfilSelecionado = retornoAutenticacaoEol.Item1.PerfisUsuario.PerfilSelecionado;

            var permissionamentos = await repositorioCache.Obter($"Permissionamento-{perfilSelecionado.ToString()}", () => servicoEOL.ObterPermissoesPorPerfil(perfilSelecionado), 720);

            if (permissionamentos == null || !permissionamentos.Any())
            {
                retornoAutenticacaoEol.Item1.Autenticado = false;
                return(retornoAutenticacaoEol.Item1);
            }

            var listaPermissoes = permissionamentos
                                  .Distinct()
                                  .Select(a => (Permissao)a)
                                  .ToList();

            // Revoga token atual para geração de um novo
            //await servicoTokenJwt.RevogarToken(login);

            // Gera novo token e guarda em cache
            retornoAutenticacaoEol.Item1.Token =
                servicoTokenJwt.GerarToken(login, dadosUsuario.Nome, usuario.CodigoRf, retornoAutenticacaoEol.Item1.PerfisUsuario.PerfilSelecionado, listaPermissoes);

            retornoAutenticacaoEol.Item1.DataHoraExpiracao = servicoTokenJwt.ObterDataHoraExpiracao();
            //var fromDate = servicoTokenJwt.ObterDataHoraCriacao();

            usuario.AtualizaUltimoLogin();

            repositorioUsuario.Salvar(usuario);

            await servicoAbrangencia.Salvar(login, perfilSelecionado, true);

            return(retornoAutenticacaoEol.Item1);
        }