Ejemplo n.º 1
0
        //Borra los historicos mas antiguos de los usuarios para que siempre haya un limite de creacion
        //para cada uno de ellos
        public void actualizarHistoricos(string idUsuario, string passActual)
        {
            decimal _idUsuario = Convert.ToDecimal(idUsuario);
            var     query      = (from a in dbo.UsuariosHistorico
                                  where a.idUsuario == _idUsuario
                                  select a).OrderBy(x => x.FechaCaducidad).FirstOrDefault();

            List <UsuariosHistorico> lista = (from b in dbo.UsuariosHistorico
                                              where b.idHistorico == query.idHistorico
                                              select b).ToList();

            //Borrar registro nuevo
            if (lista.Count > 0)
            {
                foreach (UsuariosHistorico data in lista)
                {
                    dbo.UsuariosHistorico.DeleteObject(data);
                    dbo.SaveChanges();
                }
            }

            int mesesCaducidad = ConsultarMesesCaducidad();

            //Crear uno nuevo reemplazando el antiguo
            UsuariosHistorico dataHistorico = new UsuariosHistorico()
            {
                idUsuario       = Convert.ToDecimal(idUsuario),
                PassCodeUsuario = passActual,
                FechaCaducidad  = DateTime.Now.AddMonths(mesesCaducidad),
                Activo          = true
            };

            dbo.AddToUsuariosHistorico(dataHistorico);
            dbo.SaveChanges();
        }
        /// <summary>
        /// Cambia la contraña de ususario
        /// </summary>
        public ActionResult CambioContrasena(string passActual, string confPass)
        {
            try
            {
                ControlUsuarios val  = new ControlUsuarios();
                Usuarios        user = new Usuarios();

                //<<JFPancho;6-abril-2017; valida si el usuario logueado tiene accceso al modulo
                int?idRol  = ((Usuarios)Session["USUARIO_LOGUEADO"]).RolId;
                var result = gd.spValidaAccesoModulo(idRol, "/Usuarios/CambioContrasena").FirstOrDefault();

                if (result == 0)
                {
                    Response.Redirect("../Home/Index");
                }
                //JFPancho >>

                user.IdUsuario = ((Usuarios)Session["USUARIO_LOGUEADO"]).IdUsuario;

                //Validar que la contraseña nueva ingresada no exista en los historicos.
                string passEncript         = this.encryptar(confPass);
                bool   resultadoValidacion = val.ConsultarHistoricos(user.IdUsuario.ToString(), passEncript);

                if (resultadoValidacion)
                {
                    return(View("ErrorContrasena"));
                    //throw new Exception("La nueva contraseña ingresada fue usada anteriormente.");
                }

                string password = gd.Usuarios.Where(x => x.IdUsuario == user.IdUsuario).Select(z => z.PassCodeUsuario).First().ToString();
                if (this.encryptar(passActual).Equals(password))
                {
                    bool totalHistoricos = val.ConsultarTotalHistoricos(user.IdUsuario.ToString());
                    if (totalHistoricos)
                    {
                        //Cuando pase de 4 borra el registro mas antiguo y crea uno nuevo
                        val.actualizarHistoricos(user.IdUsuario.ToString(), passEncript);
                    }
                    else
                    {
                        int mesesCaducidad = val.ConsultarMesesCaducidad();

                        //Cuando el total de registros no supera 4 se debe insertar uno nuevo
                        UsuariosHistorico dataHistorico = new UsuariosHistorico()
                        {
                            idUsuario       = Convert.ToDecimal(user.IdUsuario.ToString()),
                            PassCodeUsuario = this.encryptar(confPass),
                            FechaCaducidad  = DateTime.Now.AddMonths(mesesCaducidad),
                            Activo          = true
                        };

                        dbo.AddToUsuariosHistorico(dataHistorico);
                        dbo.SaveChanges();
                    }
                    gd.sp_CambioPassword(int.Parse(user.IdUsuario.ToString()), confPass);
                }
                else
                {
                    return(View("contrasenaerror"));
                }
                return(View());
            }
            catch (Exception e)
            {
                LogRepository.registro("Error en UsuariosController metodo CambioContrasena " + e.Message + " stack trace " + e.StackTrace);
                throw;
            }
        }