Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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));
            }
        }