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; }
public ActionResult ForgotPassword(ResetSenha model) { try { using (Context db = new Context()) { // instancia bll do usuario UsuarioBLL usuarioBLL = new UsuarioBLL(db, 0); // consulta usuario pelo email Usuario usuario = usuarioBLL.FindSingle(u => u.dsEmail == model.email); // se o usuario do formulario for diferente do usuario da sessao if (usuario == null) { ModelState.AddModelError("email", "Não foi possível determinar o email informado, informe um email valido"); } // se modelstate for valido if (ModelState.IsValid) { // reseta a senha using (var transaction = new RP.DataAccess.RPTransactionScope(db)) { usuarioBLL.ResetarSenha(usuario); usuarioBLL.SaveChanges(); transaction.Complete(); } // redireciona para index this.AddFlashMessage("Verifique seu email!", FlashMessage.ALERT); return RedirectToAction("Index"); } } } catch (Exception ex) { // adiciona mensagem de erro this.AddFlashMessage(RP.Util.Exception.Message.Get(ex), FlashMessage.ERROR); // redireciona para login return RedirectToAction("ForgotPassword"); } return View(model); }