public async Task <IActionResult> Recuperar([FromRoute] String email) { var lista = await cmd.Find <Persona>("Email", email.ToLower()); if (lista.Count <= 0) { return(BadRequest()); } var p = lista[0]; var u = (await cmd.Find <Usuario>("Rut", p.Rut))[0]; var m = Mensajes.RecuperarClave; var reset = new ClaveReset { Codigo = Tools.CodigoAleatorio(p.Rut, 20), Fecha = DateTime.Now, Vencimiento = DateTime.Now.AddDays(1), Canjeado = '0', Username = u.Username }; cmd.Insert(reset); String salt = Tools.EncriptarUrlCompatible(u.Username + reset.Codigo); m.AgregarDestinatario(p.Email, p.Nombres + " " + p.Apellidos); m.ConfigurarMensaje("username", u.Username); m.ConfigurarMensaje("codigo", reset.Codigo); m.ConfigurarMensaje("salt", salt); m.ConfigurarMensaje("fecha", reset.Fecha.ToShortDateString() + " " + reset.Fecha.ToShortTimeString()); ClienteSmtp.Enviar(m); return(Ok()); }
public async Task <IActionResult> Restablecer([FromRoute] String username, [FromRoute] String codigo, [FromRoute] String salt) { ClaveReset reset = new ClaveReset(); var rlist = await cmd.Find <ClaveReset>("Username", (String)username.ToLower()); bool encontrado = false; foreach (var r in rlist) { if (r.Codigo.Equals(codigo)) { encontrado = true; reset = r; break; } } if (!encontrado) { return(NotFound("No existe")); } if (reset.Canjeado == '1') { NotFound("ya se canjeo"); } String sal = Tools.EncriptarUrlCompatible(username + codigo); if (!sal.Equals(salt)) { NotFound("sal invalida"); } reset.Canjeado = '1'; cmd.Update(reset); Usuario u = await cmd.Get <Usuario>(username); Persona p = await cmd.Get <Persona>(u.Rut); return(Ok(Tools.GenerarToken(u, p))); }
public async Task <IActionResult> Post([FromBody] PersonaUsuario creador, [FromHeader(Name = "User-Agent")] String userAgent) { if (!ConexionOracle.Activa) { ConexionOracle.Open(); if (!ConexionOracle.Activa) { return(StatusCode(504, ConexionOracle.NoConResponse)); } } try { Usuario usuario = creador.Usuario; Persona persona = creador.Persona; usuario.Username = usuario.Username.ToLower(); if (!userAgent.Equals("TurismoRealDesktop")) { usuario.Id_rol = 5; usuario.Clave = Tools.Encriptar(usuario.Clave); } else { usuario.Clave = Tools.Encriptar(Tools.CodigoAleatorio(persona.Rut)); } usuario.Activo = '1'; usuario.Frecuente = '0'; usuario.Rut = persona.Rut; if (userAgent.Equals("TurismoRealDesktop")) { usuario.Activo = '0'; usuario.Clave = Tools.Encriptar(Tools.CodigoAleatorio(usuario.Username)); var reset = new ClaveReset { Codigo = Tools.CodigoAleatorio(persona.Rut, 20), Fecha = DateTime.Now, Vencimiento = DateTime.Now.AddMonths(1), Canjeado = '0', Username = usuario.Username }; if (await cmd.Insert(reset)) { if (await cmd.Insert(persona, false)) { if (await cmd.Insert(usuario, false)) { var rol = await cmd.Get <Rol>(usuario.Id_rol); String salt = Tools.EncriptarUrlCompatible(usuario.Username + reset.Codigo); var m = Mensajes.ActivacionCuenta; m.AgregarDestinatario(persona.Email, persona.Nombres + " " + persona.Apellidos); m.ConfigurarAsunto("rol", rol.Nombre); m.ConfigurarMensaje("rol", rol.Nombre); m.ConfigurarMensaje("usuario", usuario.Username); m.ConfigurarMensaje("codigo", reset.Codigo); m.ConfigurarMensaje("salt", salt); ClienteSmtp.Enviar(m); return(Ok()); } await cmd.Delete(usuario); } await cmd.Delete(persona); } } else if (await cmd.Insert(persona, false)) { if (await cmd.Insert(usuario, false)) { return(Ok(Tools.GenerarToken(usuario, persona))); } await cmd.Delete(persona); } return(BadRequest()); } catch (Exception e) { var a = new { Error = new { Mensaje = e.Message, Inner = e.InnerException, Fuente = e.Source } }; return(StatusCode(400, a)); } }