public LoginStatus ValidarAutenticacao(SYS_Usuario entityUsuario)
        {
            eVerificaTipoAutenticacao validacaoStatus = eVerificaTipoAutenticacao.UsuNaoEncontrado;
            int indexAD = entityUsuario.usu_login.IndexOf('\\');

            if (indexAD <= 0)
            {
                validacaoStatus = VerificaTipoAutenticacao(entityUsuario);
            }
            else
            {
                validacaoStatus = eVerificaTipoAutenticacao.Autenticador;
            }

            LoginStatus status = LoginStatus.NaoEncontrado;

            //VERIFICA O TIPO DE VALIDAÇÃO
            if (validacaoStatus == eVerificaTipoAutenticacao.Autenticador)
            {
                // Checa as credenciais do usuário
                status = SYS_UsuarioBO.ValidarLogin(entityUsuario);
            }
            else if (validacaoStatus == eVerificaTipoAutenticacao.WebService)
            {
                eValidacaoWebService ValidacaoStatus = VerificaSenhaUsuarioWebService(entityUsuario);

                if (ValidacaoStatus == eValidacaoWebService.ValidarNoWebService)
                {
                    // TEM QUE VERIFICAR QUAL A INTEGRACAO EXTERNA E DIRECIONAR
                    status = ValidaUsuarioWebService(entityUsuario);
                }
                else if (ValidacaoStatus == eValidacaoWebService.ValidarComSenhaDoHistorico &&
                         (ValidarUsuarioHistoricoSenha(entityUsuario) == LoginStatus.SenhaInvalida))
                {
                    status = ValidaUsuarioWebService(entityUsuario);
                }
                else if (ValidacaoStatus == eValidacaoWebService.IntegrcacaoNaoEncontrada)
                {
                    status = LoginStatus.Erro;
                }
            }

            return(status);
        }
Beispiel #2
0
        public HttpResponseMessage PostLogin(Usuario usuario)
        {
            try
            {
                var user = new SYS_Usuario {
                    usu_login = usuario.login, usu_senha = usuario.senha, ent_id = usuario.entidade
                };
                LoginStatus status = SYS_UsuarioBO.ValidarLogin(user);

                if (status == LoginStatus.Sucesso)
                {
                    if (SYS_UsuarioBO.GetSelectBy_ent_id_usu_login(user))
                    {
                        var grupos = SYS_GrupoBO.GetSelectBySis_idAndUsu_id(user.usu_id, ApplicationWEB.SistemaID);
                        if (grupos.Count > 0)
                        {
                            var grupo = grupos.First();
                            Dictionary <string, object> dic = new Dictionary <string, object>();
                            dic.Add("login", user.usu_login);
                            dic.Add("entity", user.ent_id);
                            dic.Add("group", grupo.gru_id);

                            var jwtKey            = System.Configuration.ConfigurationManager.AppSettings["jwtKey"];
                            SymmetricAlgorithm sa = new SymmetricAlgorithm(SymmetricAlgorithm.Tipo.TripleDES);

                            PES_Pessoa entityPessoa = new PES_Pessoa {
                                pes_id = user.pes_id
                            };
                            PES_PessoaBO.GetEntity(entityPessoa);

                            bool docente = false;
                            if (grupo.vis_id == SysVisaoID.Individual)
                            {
                                // Carrega a entidade docente de acordo com a pessoa do usuário logado.
                                ACA_Docente entityDocente;
                                ACA_DocenteBO.GetSelectBy_Pessoa(user.ent_id, user.pes_id, out entityDocente);
                                docente = entityDocente.doc_id > 0;
                            }

                            UsuarioLogado usuarioLogado = new UsuarioLogado {
                                grupo   = grupos.First().gru_nome,
                                nome    = (string.IsNullOrEmpty(entityPessoa.pes_nome) ? user.usu_login : entityPessoa.pes_nome),
                                docente = docente,
                                token   = JWT.JsonWebToken.Encode(dic, sa.Decrypt(jwtKey), JWT.JwtHashAlgorithm.HS256)
                            };

                            return(Request.CreateResponse(HttpStatusCode.OK, usuarioLogado));
                        }
                        else
                        {
                            return(Request.CreateResponse(HttpStatusCode.Unauthorized, "Usuário não está vinculado a um grupo"));
                        }
                    }
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized, "Usuário não encontrado"));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.Unauthorized, "Usuário ou senha inválidos"));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
            }
        }
        private void Entrar()
        {
            try
            {
                // Carrega os dados do usuário necessário para o login
                SYS_Usuario entityUsuario = new SYS_Usuario
                {
                    ent_id = new Guid(this.entidade)
                    ,
                    usu_login = this.login
                    ,
                    usu_senha = this.senha
                };

                // Checa as credenciais do usuário
                LoginStatus status   = SYS_UsuarioBO.ValidarLogin(entityUsuario);
                var         mensagem = "";

                switch (status)
                {
                case LoginStatus.Erro:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Erro ao tentar entrar no sistema.", entityUsuario.usu_login);
                    mensagem         = "Erro ao tentar entrar no sistema.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Erro);
                    UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
                    break;
                }

                case LoginStatus.Bloqueado:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Usuário bloqueado.", entityUsuario.usu_login);
                    mensagem         = "Usuário bloqueado.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);
                    UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
                    break;
                }

                case LoginStatus.NaoEncontrado:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Usuário não encontrado.", entityUsuario.usu_login);
                    mensagem         = "Usuário e/ou senha inválidos.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);

                    UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
                    break;
                }

                case LoginStatus.SenhaInvalida:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Senha inválida.", entityUsuario.usu_login);
                    mensagem         = "Usuário e/ou senha inválidos.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);
                    UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
                    break;
                }

                case LoginStatus.Expirado:
                {
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Senha expirada.", entityUsuario.usu_login);
                    mensagem         = "Senha expirada.";
                    retorno.Mensagem = MensagemDeRetorno(mensagem, UtilBO.TipoMensagem.Alerta);
                    UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
                    break;
                }

                case LoginStatus.Sucesso:
                {
                    SignHelper.AutenticarUsuario(entityUsuario);

                    // Configura usuário na Session
                    LoadSession(entityUsuario);
                    ApplicationWEB._GravaLogSistema(LOG_SistemaTipo.Login, "Login efetuado com sucesso.");

                    if (!string.IsNullOrEmpty(this.urlSistema))
                    {
                        //Chama o Login.ashx do site cliente.
                        HttpContext.Current.Response.Redirect(this.urlSistema, false);
                        HttpContext.Current.ApplicationInstance.CompleteRequest();
                    }
                    else
                    {
                        retorno.Mensagem = MensagemDeRetorno("sucesso", UtilBO.TipoMensagem.Alerta);
                        UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
                    }

                    break;
                }
                }
            }
            catch (Exception ex)
            {
                ApplicationWEB._GravaErro(ex);
                retorno.Mensagem = UtilBO.GetErroMessage("Erro ao tentar entrar no sistema.", UtilBO.TipoMensagem.Erro);
                UtilBO.MessageJSON(HttpContext.Current.Response.Output, retorno);
            }
        }