public async Task <Object> PostSendEmailRecuperacionContrasenia(EnviarCorreoRecuperacionModel datos) //public async Task<IHttpActionResult> PostSendEmailRecuperacionContrasenia(EnviarCorreoRecuperacionModel datos) { //Valido que los valores no lleguen vacios if (datos != null) { //var mappedPath = HttpContext.Current.Request.Url.AbsoluteUri; //mapeo la ruta completa del servidor var mappedPath = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + "/cargadorrips"; //mapeo la url del servidor //invoco metodo que permite obtener los datos del smtp del correo SmtpCorreos(); //creo una variable para manejar los mensajes var MSG = new List <object>(); SmtpClient client = new SmtpClient(); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.Host = Host; client.Port = Puerto;//587; client.EnableSsl = true; // setup Smtp authentication System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(SmtpCorreo, PassCorreo); client.UseDefaultCredentials = false; client.Credentials = credentials; //can be obtained from your model MailMessage msg = new MailMessage(); msg.From = new MailAddress(FromCorreo); msg.To.Add(new MailAddress(datos.usercorreo)); //consulto el procedimiento para traer la información de la plantilla solicitada var result = bd.SP_GetPlantillaCorreo(datos.codPlantilla).First(); //agrego el asunto msg.Subject = result.asunto; msg.IsBodyHtml = true; //se arma cuerpo del correo msg.Body = String.Format(@result.cuerpo.ToString(), mappedPath.ToString(), datos.id.ToString(), datos.token.ToString()); try { await client.SendMailAsync(msg); client.Dispose(); //USO linq para consultar la tabla de mensajes y dejar el mensaje modificable para el usuario //TODO el mensaje esta erroneo var linq1 = bd.Web_Mensaje.Where(s => s.codigo == 1009).First(); MSG.Add(new { type = linq1.tipo, value = linq1.cuerpo, codigo = linq1.codigo }); } catch (Exception e) { //envio a la tabla log //TODO //envio a la carpeta logs LogsController log = new LogsController(e + "//" + Host.ToString()); log.createFolder(); return(BadRequest()); } return(Json(MSG)); }//fin if Valida que los valores no lleguen vacios return(BadRequest()); }
public async Task <ActionResult> NuevaContrasenia(CambiarContraseniaViewModel model) { FormsAuthentication.SetAuthCookie("", false); if (ModelState.IsValid) { var MSG = new EnviarCorreoRecuperacionModel(); try { //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 { //Ejecuto los valores en el SP //borrarSP_Updaterestacontra var response = db.SP_ChangeContraseniaUser(model.usuario_id, model.contrasenia).First(); // await db.SaveChangesAsync(); // el procedimiento envia un codigo de 201 como respuesta if (response.codigo == 201) { //consulto el mensaje correspondiente para el esta caso var msg = db.Web_Mensaje.Where(m => m.codigo.Equals(1018)).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 tratarlo desde aca y poder enviar los diferentes errores 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; //cierro sesiones FormsAuthentication.SignOut(); //Cargo la vista return(RedirectToAction("Index")); }// fin if valida response else { ModelState.AddModelError(string.Empty, response.mensaje); return(RedirectToAction("Index")); } } //fin else captcha } //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 momento por favor intente mas tarde"); } } //return View(); return(Logout()); }
//[ValidateAntiForgeryToken] quito el validador del token ya que la aplicación se estalla y no hay forma de solucionar el problema TODO //[OutputCache(NoStore = true, Duration = 0)] public async Task <ActionResult> NuevaContrasenia(CambiarContraseniaViewModel model) { if (ModelState.IsValid) { 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 //borrarSP_Updaterestacontra var response = bd.SP_ChangeContraseniaUser(model.idUsuario, model.contrasenia).First(); // await bd.SaveChangesAsync(); // el procedimiento envia un codigo de 201 como respuesta if (response.codigo == 201) { //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; FormsAuthentication.SignOut(); Session.Abandon(); return(View("Index")); }// fin if valida response else { ModelState.AddModelError(string.Empty, response.mensaje); return(RedirectToAction("Index")); } }//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()); }
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)); }