public async Task <ActionResult> RecuperarContrasenia(RecuperarContraseniaViewModel model) { if (ModelState.IsValid) { //sección del recaptcha //Valido el capcha if (!this.IsCaptchaValid("Captcha is not valid")) { ModelState.AddModelError(string.Empty, "Error: captcha no es válido."); } //si el captcha es valido else { var MSG = new EnviarCorreoRecuperacionModel(); try { //Ejecuto los valores en el SP var response = db.SP_GenerarCodigoRecuperacionContraseniaUser(model.Usuario, model.Email).First(); //almaceno cambios asincronamente await db.SaveChangesAsync(); //se elimina xq pueden llgar multiples respuestas if (response.Equals(string.Empty)) //ModelState.AddModelError(string.Empty, "No se encontraron coincidencias, para restablecer la contraseña"); if (response.codigo == 200) { MSG.codPlantilla = 3; MSG.usercorreo = response.correousuario; MSG.id = response.codprestador; MSG.token = response.token; // invoco el constructor EnviarCorreoController enviocorreo = new EnviarCorreoController(); //llamo el metodo que realiza la acción de envio de correos var postdatos = await enviocorreo.PostSendEmailRecuperacionContrasenia(MSG); // valido la respuesta del metodo if (postdatos.GetType().Name != null && postdatos.GetType().Name != "BadRequestResult") { //Limpio campos ModelState.Clear(); //consulto el mensaje correspondiente para el esta caso var msg = db.Web_Mensaje.Where(m => m.codigo.Equals(1017)).Select(m => new { codigo = m.codigo, tipo = m.tipo, mensaje = m.cuerpo }).First(); //creo un array a partir del json devuelto por la api para tratramiento var json = JsonConvert.SerializeObject(msg, Formatting.Indented); //creo un json dinamico para enviarlo a la vista dynamic dynJson = JsonConvert.DeserializeObject(json); //envio mensaje TempData["mensaje"] = dynJson; return(RedirectToAction("Index", "Sesion")); } else { // si la respuesta del correo fue erronea envio respuesta a la vista ModelState.AddModelError(string.Empty, "No se pudo efectuar el restablecimiento de contraseña."); } } else { ModelState.AddModelError(string.Empty, response.mensaje); } }//fin try catch (Exception e) { // envio error a la api logs errores //envio a la carpeta logs APIS.LogsController log = new APIS.LogsController(e.ToString()); log.createFolder(); //envio error mensaje al usuario ModelState.AddModelError(string.Empty, "Estamos presentando dificultades en el restablecimiento de contraseña, por favor intente mas tarde "); } }//fin else captcha } return(View("RecuperarContrasenia", model)); }
public async Task <ActionResult> RecuperarContrasenia(RecuperarContraseniaViewModel model) { if (ModelState.IsValid) { //var MSG = new List<EnviarCorreoRecuperacionModel>(); var MSG = new EnviarCorreoRecuperacionModel(); try { //sección del recaptcha var captcharesponse = Request["g-recaptcha-response"]; string secretKey = System.Web.Configuration.WebConfigurationManager.AppSettings["recaptchaPrivateKey"]; //esta linea esta en el web config var client = new WebClient(); var result = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secretKey, captcharesponse)); var obj = JObject.Parse(result); var status = (bool)obj.SelectToken("success"); //valido que el status del recapcha sea verdadero if (status == true) { //Ejecuto los valores en el SP var response = bd.SP_GenerarCodigoRecuperacionContraseniaUser(model.Usuario, model.Email).First();//.ToArray(); //almaceno cambios asincronamente await bd.SaveChangesAsync(); //se elimina xq pueden llgar multiples respuestas if (response.Equals(string.Empty)) //response = HttpStatusCode.NotFound; //ModelState.AddModelError(string.Empty, "No se encontraron coincidencias, para restablecer la contraseña"); if (response.codigo == 200) { MSG.codPlantilla = 3; MSG.usercorreo = response.correousuario; MSG.id = response.codprestador; MSG.token = response.token; try { // invoco el constructor EnviarCorreoController enviocorreo = new EnviarCorreoController(); //llamo el metodo que realiza la acción de envio de correos var postdatos = await enviocorreo.PostSendEmailRecuperacionContrasenia(MSG); //Console.WriteLine(postdatos.GetType()); //Console.WriteLine(postdatos.GetType().Name); // valido la respuesta del metodo if (postdatos.GetType().Name != null && postdatos.GetType().Name != "BadRequestResult") { //creo un array a partir del json devuelto por la api para tratarlo desde aca y poder enviar los diferentes errores var json = JsonConvert.SerializeObject(response, Formatting.Indented); //creo un json dinamico para enviarlo a la vista dynamic dynJson = JsonConvert.DeserializeObject(json); ViewBag.SomeData = dynJson; return(View("Index")); } else { // si la respuesta del correo fue erronea envio respuesta a la vista ModelState.AddModelError(string.Empty, "No se pudo efectuar el restablecimiento de contraseña."); } } catch (Exception e) { // envio error a la api logs errores //TODO //envio a la carpeta logs APIS.LogsController log = new APIS.LogsController(e.ToString()); log.createFolder(); //envio error mensaje al usuario ModelState.AddModelError(string.Empty, "Estamos presentando dificultades en el restablecimiento de contraseña, por favor intente mas tarde"); throw e; } } else { ModelState.AddModelError(string.Empty, response.mensaje); } }//fin if captcha else { ModelState.AddModelError(string.Empty, "El captcha no se ingresó correctamente."); }//fin else captcha } catch (Exception e) { // envio error a la api logs errores //TODO //envio a la carpeta logs APIS.LogsController log = new APIS.LogsController(e.ToString()); log.createFolder(); //envio error mensaje al usuario ModelState.AddModelError(string.Empty, "Estamos presentando dificultades en el momento por favor intente mas tarde"); } } return(View("RecuperarContrasenia", model)); }