public void TestRedireccionEnlaceSeguroIncorrecto() { DataIntegradorEntities db = new DataIntegradorEntities(); EnlaceSeguroController controller = new EnlaceSeguroController(db); CurrentUser.setCurrentUser("*****@*****.**", "Superusuario", "0000000001", "0000000001"); // Permitir solamente a [email protected] string url = controller.ObtenerEnlaceSeguro("/Home/About/", "*****@*****.**"); // Obtener el hash solamente, deshacerse de /EnlaceSeguro/RedireccionSegura?urlHash= string hash = url.Substring(url.LastIndexOf("=") + 1); var result = controller.RedireccionSegura(hash) as RedirectToRouteResult; // Eliminar las tuplas insertadas EnlaceSeguro es = db.EnlaceSeguro.Find(hash); if (es != null) { db.EnlaceSeguro.Remove(es); db.SaveChanges(); } Assert.AreEqual("Index", result.RouteValues["action"]); }
public void HomeReestablecerContrasenna() { //Arrange var adminContrasennaActual = "*****@*****.**"; var adminCorreoActual = "*****@*****.**"; var pruebaContrasenna = "nuevaContrasenna"; DataIntegradorEntities db = new DataIntegradorEntities(); EnlaceSeguroController enlaceController = new EnlaceSeguroController(db); var controller = HomeControllerAs("*****@*****.**", false); //CurrentUser.setCurrentUser("*****@*****.**", "Superusuario", "0000000001", "0000000001"); string url1 = enlaceController.ObtenerEnlaceSeguroAnonimo("/Home/ReestablecerContrasenna/", usuario: adminCorreoActual, reestablecerContrasenna: true, usos: 2); // Obtener el hash solamente, deshacerse de /EnlaceSeguro/RedireccionSegura?urlHash= string hashObtenido = url1.Substring(url1.LastIndexOf("=") + 1); var result = controller.ReestablecerContrasenna(hashObtenido, adminContrasennaActual, adminContrasennaActual, false) as ViewResult; // Eliminar las tuplas insertadas EnlaceSeguro es1 = db.EnlaceSeguro.Find(hashObtenido); if (es1 != null) { db.EnlaceSeguro.Remove(es1); db.SaveChanges(); } var resultadoObtenido = result.ViewBag.NotifyTitle; var resultadoEsperado = "Contraseña Cambiada"; Assert.AreEqual(resultadoObtenido, resultadoEsperado); }
public void TestObtenerEnlaceSeguroUnico() { DataIntegradorEntities db = new DataIntegradorEntities(); EnlaceSeguroController controller = new EnlaceSeguroController(db); CurrentUser.setCurrentUser("*****@*****.**", "Superusuario", "0000000001", "0000000001"); string url1 = controller.ObtenerEnlaceSeguro("https://localhost:44334/Home/About/"); string url2 = controller.ObtenerEnlaceSeguro("https://localhost:44334/Home/About/"); // Obtener el hash solamente, deshacerse de /EnlaceSeguro/RedireccionSegura?urlHash= string hash1 = url1.Substring(url1.LastIndexOf("=") + 1); string hash2 = url2.Substring(url2.LastIndexOf("=") + 1); // Eliminar las tuplas insertadas EnlaceSeguro es1 = db.EnlaceSeguro.Find(hash1); if (es1 != null) { db.EnlaceSeguro.Remove(es1); db.SaveChanges(); } EnlaceSeguro es2 = db.EnlaceSeguro.Find(hash2); if (es2 != null) { db.EnlaceSeguro.Remove(es2); db.SaveChanges(); } Assert.AreNotEqual(url1, url2); }
private ActionResult Redirigir(string urlHash, bool anonimo = false) { // Busca tupla en la base de datos EnlaceSeguro enlaceSeguro = db.EnlaceSeguro.SingleOrDefault(u => u.Hash == urlHash); if (enlaceSeguro != null) { // Podría mejorarse para asegurarse de que la hora esté sincronizada con la base de datos DateTime momentoActual = DateTime.Now; DateTime expira = (DateTime)enlaceSeguro.Expira; int usos = enlaceSeguro.Usos; bool reestablecerContrasenna = enlaceSeguro.ReestablecerContrasenna; int fechaValida = DateTime.Compare(momentoActual, expira); // Enlace válido if (fechaValida < 0) { // no se utiliza "> 0" ya que se desea que -1 haga que el enlace no tenga limite de uso if (usos != 0) { // Revisar usuario válido if (!anonimo && enlaceSeguro.UsuarioAsociado != null) { if (CurrentUser.getUsername() == enlaceSeguro.UsuarioAsociado) { //se envia a borrar el enlace, esto decrementa su valor de "usos" disponibles. db.EnlaceSeguro.Remove(enlaceSeguro); db.SaveChanges(); return(Redirect(enlaceSeguro.UrlReal)); } } // Enlace no relacionado a un solo usuario o anónimos permitidos else { if (!reestablecerContrasenna) { //se envia a borrar el enlace, esto decrementa su valor de "usos" disponibles. db.EnlaceSeguro.Remove(enlaceSeguro); db.SaveChanges(); return(Redirect(enlaceSeguro.UrlReal)); } else //Los enlaces seguros para reestablecer una contraseña se comportan de una manera diferente //y se manejan en el controlador de Home, en "ReestablecerContrasenna". { //se envia a borrar el enlace, esto decrementa su valor de "usos" disponibles. db.EnlaceSeguro.Remove(enlaceSeguro); db.SaveChanges(); return(RedirectToAction("ReestablecerContrasenna", "Home", new { enlaceSeguroHash = enlaceSeguro.Hash })); } } } } } TempData["alertmessage"] = "Enlace no válido."; return(RedirectToAction("Index", "Home")); }