Ejemplo n.º 1
0
        public ActionResult Login()
        {
            // se estiver logado
            if (Helpers.Helper.isAuthenticated)
            {
                // redireciona para tela inicial
                return RedirectToAction("Index", "Home");
            }

            // define model para view
            LoginVM model = null;

            // busca pelo cookie que contem os dados do usuario
            HttpCookie cookie = Request.Cookies["RP_StoreDataLogin"];

            // se existir o cookie e se houver nome de usuario
            if (cookie != null && !string.IsNullOrEmpty(cookie.Value))
            {
                // instancia model com dados disponiveis
                model = new LoginVM { Usuario = cookie.Value, LembrarUsuario = true };
            }

            // retorna view com model
            return View(model);
        }
Ejemplo n.º 2
0
        public ActionResult Login(LoginVM model)
        {
            // se ModelState for valido
            if (ModelState.IsValid)
            {
                try
                {
                    // Cria numero para o acesso (ID do acesso)
                    string nrAcesso = Guid.NewGuid().ToString();

                    // executa metodo de consulta e validacao de usuario
                    LoginData login = DoLogin(model, nrAcesso);

                    if (login.ShowCaptcha)
                    {
                        return View("LoginCaptcha", new LoginCaptchaVM
                            {
                                Usuario = model.Usuario,
                                Senha = model.Senha
                            });
                    }


                    // se o login for Sucesso
                    if (login.LoginMessage == LoginMessageId.Sucesso)
                    {
                        // faz login do usuario no sistema
                        CriarCookieUsuario(login.Usuario, nrAcesso, model.LembrarUsuario);

                        // registra o acesso como sucesso
                        AccessRegister(login.Usuario.dsLogin, true);

                        // remove usuario da sessao
                        Session.Remove("login.UsuarioId");

                        // remove Id de acesso na sessao
                        Session.Remove("login.nrAcesso");

                        // redireciona para tela inicial
                        return RedirectToAction("Index");
                    }
                    // se existir algum erro no login
                    else
                    {
                        // se o usuario for invalido
                        if (login.LoginMessage == LoginMessageId.UsuarioInvalido)
                        {
                            // adiciona erro no modelstate
                            ModelState.AddModelError("Senha", "Usuário ou senha incorretos");
                        }
                        // se o usuario estiver inativo
                        else if (login.LoginMessage == LoginMessageId.UsuarioInativo)
                        {
                            ModelState.AddModelError("Usuario", "Usuário não está ativo no sistema");
                        }
                        // se a senha for invalida
                        else if (login.LoginMessage == LoginMessageId.SenhaInvalida)
                        {
                            // adiciona erro no modelstate
                            ModelState.AddModelError("Senha", "Usuário ou senha incorretos");

                            // se as tentivas forem maiores que o definido
                            if (login.TentativasFalhas >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaExibirCaptcha"]))
                            {
                                // retorna para a view que contem o captcha
                                return View("LoginCaptcha", new LoginCaptchaVM
                                {
                                    Usuario = model.Usuario,
                                    Senha = model.Senha
                                });
                            }
                        }
                        // se o usuario estiver com a senha expirada
                        else if (login.LoginMessage == LoginMessageId.SenhaExpirada)
                        {
                            // adiciona mensagem de alerta
                            this.AddFlashMessage("Senha expirada! Altere para continuar acessando.", FlashMessage.ALERT);

                            // adiciona o usuario em sessao
                            Session.Add("login.UsuarioId", login.Usuario.idUsuario);

                            // Adiciona Id de acesso na sessao
                            Session.Add("login.nrAcesso", nrAcesso);

                            // retorna para a view que contem o formulario de alteração da senha
                            return View("ChangePassword", new EditarSenhaVM
                            {
                                Usuario = model.Usuario,
                                Senha = model.Senha
                            });
                        }
                        // se o usuario estiver sem licenca disponivel
                        else if (login.LoginMessage == LoginMessageId.SemLicenca)
                        {
                            ModelState.AddModelError("Usuario", "Não existem licenças disponíveis, tente novamente mais tarde.");
                        }
                    }
                }
                catch (Exception ex)
                {
                    // adiciona mensagem de erro
                    this.AddFlashMessage(RP.Util.Exception.Message.Get(ex), FlashMessage.ERROR); 

                    // redireciona para login
                    return RedirectToAction("Login");
                }
            }

            return View(model);
            //}
        }
Ejemplo n.º 3
0
        private LoginData DoLogin(LoginVM model, string nrAcesso)
        {
            LoginData data = new LoginData
            {
                LoginMessage = LoginMessageId.Sucesso,
                ShowCaptcha = false
            };

            using (Context db = new Context())
            {
                using (var transaction = new RP.DataAccess.RPTransactionScope(db))
                {

                    // instancia bll do usuario
                    UsuarioBLL usuarioBLL = new UsuarioBLL(db, 0);

                    // consulta usuario pelo login
                    Usuario usuario = usuarioBLL.FindSingle(u => u.dsLogin.ToLower().Equals(model.Usuario.ToLower()));

                    //if (data.ShowCaptcha)
                    //    return data;

                    // se o usuario nao existir
                    if (usuario == null)
                    {
                        data.LoginMessage = LoginMessageId.UsuarioInvalido;
                    }
                    // se o usuario existir
                    else
                    {
                        data.ShowCaptcha = usuario.nrFalhalogin >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaExibirCaptcha"]);
                        // se a senha informada estiver incorreta
                        if (!(usuario.dsSenha == RP.Util.Class.Util.getHash(model.Senha)))
                        {
                            // registra a tentiva falha de acesso
                            AccessRegister(model.Usuario, false);

                            // seta status do login
                            data.LoginMessage = LoginMessageId.SenhaInvalida;

                            // instancia bll de Log
                            //RP.Log.Model.BLL LogBLL = new Log.Model.BLL();

                            // altera a quantidade de falhas
                            usuario.nrFalhalogin = (usuario.nrFalhalogin ?? 0) + 1;
                            data.ShowCaptcha = usuario.nrFalhalogin >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaExibirCaptcha"]);

                            // armazena tentativas falhas de acesso
                            data.TentativasFalhas = usuario.nrFalhalogin ?? 0;

                            // armazena as tentativas falhas de acesso
                            if (data.TentativasFalhas >= Convert.ToInt32(ConfigurationManager.AppSettings["Seguranca:tentativasParaBloquearUsuario"]))
                            {
                                // bloqueia o usuario no banco
                                usuario.flAtivo = "Não";
                                usuarioBLL.Update(usuario);

                                // seta status do login
                                data.LoginMessage = LoginMessageId.UsuarioInativo;
                            }
                            else
                            {
                                usuarioBLL.UpdateLoginCount(usuario);
                            }

                        }
                        // se a senha estiver correta
                        else
                        {
                            // se usuario não estiver ativo
                            if (!(usuario.flAtivo.ToLower().Equals("sim")))
                            {
                                data.LoginMessage = LoginMessageId.UsuarioInativo;
                            }
                            // se usuario nao tiver licencas disponiveis
                            else if (!Auth.Class.License.UseLicense(usuario.dsLogin, nrAcesso))
                            {
                                data.LoginMessage = LoginMessageId.SemLicenca;
                            }
                            // se a senha do usuario estiver expirada
                            else if ((usuario.dtValidade ?? DateTime.Now.Date.AddDays(-1)) < DateTime.Now.Date)
                            {
                                data.LoginMessage = LoginMessageId.SenhaExpirada;
                            }
                            else
                            {
                                usuario.nrFalhalogin = 0;
                                usuarioBLL.UpdateLoginCount(usuario);
                            }

                            // armazena usuario
                            data.Usuario = usuario;
                        }

                        usuarioBLL.SaveChanges();
                        transaction.Complete();
                    }
                }
            }

            return data;
        }