public string ValidarCaducidadContrasena(string idUsuario, string passActual)
        {
            ControlUsuarios valUsuarios = new ControlUsuarios();
            string          passEncript = encryptar(passActual);

            string respuesta = valUsuarios.ConsultarCaducidad(idUsuario, passEncript);

            return(respuesta);
        }
        public bool ValidarUsuarios(Usuarios Usu)
        {
            ControlUsuarios ctrl = new ControlUsuarios();
            bool            seguridadHabilitada = ctrl.ConsultaSeguridadHabilitada();

            if (seguridadHabilitada)
            {
                bool respuestaOn = ValUsuariosSeguridadOn(Usu);
                return(respuestaOn);
            }
            else
            {
                bool respuestaOff = ValUsuariosSeguridadOff(Usu);
                return(respuestaOff);
            }
        }
        public ActionResult ValidarUsuario(string txtUsuario, string txtContrasena)
        {
            string respuesta = "";

            #region Login por Base de datos
            try
            {
                //Validar si la seguridad de las contraseñas esta habilitada o no lo esta
                ControlUsuarios ctrl = new ControlUsuarios();
                bool            seguridadHabilitada = ctrl.ConsultaSeguridadHabilitada();

                UsuariosController busu;
                busu = new UsuariosController();
                decimal  idUsuario = Convert.ToDecimal(txtUsuario);
                Usuarios usu       = new Usuarios
                {
                    IdUsuario       = Convert.ToDecimal(txtUsuario),
                    PassCodeUsuario = txtContrasena,
                    NomUsuario      = data.Usuarios.Where(c => c.IdUsuario == idUsuario).First().NomUsuario,
                    CliNit          = data.Usuarios.Where(c => c.IdUsuario == idUsuario).First().CliNit,
                    //<< JFPancho; 6-Abril-2017; se agrega rol a objeto de Usuarios >>
                    RolId = data.Usuarios.Where(c => c.IdUsuario == idUsuario).First().RolId
                };

                //usu = null;
                Session["USUARIO_LOGUEADO"] = usu;
                if (busu.ValidarUsuarios(usu))
                {
                    Session["USUARIO"]       = usu;
                    Session["NombreUsuario"] = usu.NomUsuario;
                    List <ClientesUsuario> cus = data.ClientesUsuario.Where(c => c.idUsuario == usu.IdUsuario).ToList();

                    //Valida la cantidad de Capturas realizadas por el Usuario.
                    string _idUsuario = usu.IdUsuario.ToString();
                    Session["_IDUsuario_"] = usu.IdUsuario.ToString();
                    string mensajeCapturas = consultaTotalCapturas(_idUsuario);
                    Session["TotalCapturas"] = mensajeCapturas;

                    Clientes clientes = new Clientes();
                    clientes.CliNit = (decimal)cus.First().idCliente;

                    List <Clientes> Datos = data.Clientes.Where(c => c.CliNit == clientes.CliNit).ToList();
                    clientes.CliNombre         = (string)Datos.First().CliNombre;
                    clientes.Codlabel          = (string)Datos.First().Codlabel;
                    clientes.CodParametros     = (string)Datos.First().CodParametros;
                    clientes.CliNit            = Datos.First().CliNit;
                    Session["CLIENTE"]         = clientes;
                    Session["SW_CONCILIACION"] = 0;
                    //LE CARGO EL ROL A ESE USUARIO
                    Session["ROL_USUARIO"]       = data.Usuarios.Where(c => c.IdUsuario == usu.IdUsuario).First().RolId;
                    Session["USUARIOS_CLIENTES"] = cus;

                    //SETEO EL PARAMETRO QUE ME DEFINIRA LOS BOTONES QUE SE MUESTRAN EN LA BARRA DEL ALTERNATIFF
                    Parametros param = data.Parametros.First(c => c.codigo == "TOOL_VIS");
                    Session["TOOL_BAR"] = param.valor;

                    //JFP; Campos para el visor del validacion documental
                    Parametros paramVD = data.Parametros.First(c => c.codigo == "TOOL_VIS_VD");
                    Session["TOOL_BAR_VD"] = paramVD.valor;

                    //SETEA EL PARAMETRO QUE DEFINE LOS BOTONES QUE SE MUESTRAN EN EL ALTERNATIFF PARA LOS OTROS EL
                    //MODULO DE DACTILOSCOPIA PARA LA CEDULA, LOS CUALES ESTAN PARAMETRIZADOS EN LA TABLA
                    //PARAMETROS| AGREGADO 17/03/2016 WILLIAM CICUA
                    Parametros dactiloscopiaCedula = data.Parametros.First(c => c.codigo == "TOOL_D");
                    Session["TOOL_DAC"] = dactiloscopiaCedula.valor;

                    //SETEA EL PARAMETRO QUE DEFINE LOS BOTONES QUE SE MUESTRAN EN EL ALTERNATIFF PARA LOS OTROS EL
                    //MODULO DE DACTILOSCOPIA PARA LOS OTROS DOCUMENTOS, LOS CUALES ESTAN PARAMETRIZADOS EN LA TABLA
                    //PARAMETROS| AGREGADO 17/03/2016 WILLIAM CICUA

                    Parametros dactiloscopiaOtros = data.Parametros.First(c => c.codigo == "TOOL_D2");
                    Session["TOOL_DAC2"] = dactiloscopiaOtros.valor;

                    //VALIDAR SI EL APLICATIVO TIENE HABILITADA LA SEGURIDAD DE USUARIOS
                    if (seguridadHabilitada)
                    {
                        //Validar si la contraseña se encuentra proxima a expirar
                        UsuariosController a = new UsuariosController();
                        if (a.obtenerTipoLogin() == 1)
                        {
                            string mensaje = busu.ValidarCaducidadContrasena(usu.IdUsuario.ToString(), txtContrasena);
                            if (mensaje.Equals("Caducada"))
                            {
                                throw new Exception("Su contraseña ha Caducado");
                            }

                            if (mensaje.Contains("cambiarla"))
                            {
                                System.Web.HttpContext.Current.Session["Mensaje"] = mensaje;
                            }
                        }
                    }

                    // SI EL USUARIO ES MOBIL LO REDIRECCIONO A LA PANTALLA EN CUESTION
                    if ((int)Session["ROL_USUARIO"] == 5)
                    {
                        return(base.Redirect("/Mobile/Index"));
                    }

                    //IMPORTANTE USAR EL BASE REDIRECT TAL CUAL PARA QUE ENLACE BIEN LA SESSION
                    //return base.Redirect("/ViewsAspx/Inicio.aspx");

                    //<< JFPancho;6-abril-2017; se agrega para validar logueo de usuarios
                    //return base.Redirect("/Home/Index");
                    LogUsuarios x = new LogUsuarios();
                    if (x.ValidaSesion(((Usuarios)Session["USUARIO_LOGUEADO"]).IdUsuario))
                    {
                        Session["USUARIO_LOGUEADO"] = null;
                        respuesta = "El usuario ya se encuentra logueado en otro equipo.";
                    }
                    else
                    {
                        x.ActualizaSesion(((Usuarios)Session["USUARIO_LOGUEADO"]).IdUsuario);
                        return(base.Redirect("/Home/Index"));
                    }
                    // JFPancho -->>
                }
                else
                {
                    //Modifica: JFPancho; mayo/2016; se agrega msn de error
                    int usu_activo = Convert.ToInt32(System.Web.HttpContext.Current.Session["activo"].ToString());
                    if (usu_activo == 0)
                    {
                        respuesta = "El usuario no se encuentra activo";
                    }
                    else
                    {
                        respuesta = "El usuario o contraseña digitados no coinciden";
                    }
                }
            }
            catch (Exception exception)
            {
                LogRepository.registro("Error en SeguridadController metodo ValidarUsuario " + exception.Message + " stack trace " + exception.StackTrace);
                respuesta = exception.Message;
            }
            #endregion

            ViewData["Respuesta"] = respuesta;
            return(View("Login"));
        }
        /// <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;
            }
        }
        public bool ValUsuariosSeguridadOn(Usuarios Usu)
        {
            try
            {
                ControlUsuarios db = new ControlUsuarios();
                if (System.Web.HttpContext.Current.Session["contador"] == null)
                {
                    System.Web.HttpContext.Current.Session["contador"] = 0;
                }

                bool usuarioBloq = db.consultarUsuarioBloqueado(Usu.IdUsuario.ToString());
                if (!usuarioBloq)
                {
                    bool respuesta = true;
                    if (obtenerTipoLogin() == 1)
                    {
                        respuesta = db.validarUsuario(Usu.IdUsuario.ToString(), Usu.PassCodeUsuario.ToString());
                        //JFPancho; mayo/2016;se valida que el usuario este activo
                        int rptaAct = Convert.ToInt32(gd.spValidarUsuarioAct(Convert.ToInt32(Usu.IdUsuario), Usu.PassCodeUsuario.ToString()).First());
                        if (rptaAct == 2)
                        {
                            System.Web.HttpContext.Current.Session["activo"] = 0;
                            respuesta = false;
                        }
                        else
                        {
                            System.Web.HttpContext.Current.Session["activo"] = 1;
                        }
                    }
                    else
                    {
                        string       usuarioWS = obtenerUsuarioWS(Usu.IdUsuario);
                        SingleSignOn access    = new SingleSignOn();
                        bool         resultado = access.AutenticarUsuario(usuarioWS, Usu.PassCodeUsuario);
                        if (resultado)
                        {
                            respuesta = true;
                        }
                        else
                        {
                            respuesta = false;
                        }
                    }

                    if (respuesta)
                    {
                        System.Web.HttpContext.Current.Session["contador"] = null;
                        return(true);
                    }
                    else
                    {
                        bool verificarUsuario = db.consultarUsuarioExistente(Usu.IdUsuario.ToString());
                        if (verificarUsuario)
                        {
                            int contador = Convert.ToInt32(System.Web.HttpContext.Current.Session["contador"].ToString());

                            contador = contador + db.contadorErrores(false);
                            if (contador == 3)
                            {
                                db.bloquearUsuario(Usu.IdUsuario.ToString(), contador);
                                System.Web.HttpContext.Current.Session["contador"] = null;
                                throw new Exception("El usuario: " + Usu.IdUsuario.ToString() + " ha sido bloqueado");
                            }
                            System.Web.HttpContext.Current.Session["contador"] = contador;
                        }
                        return(false);
                    }
                }
                else
                {
                    System.Web.HttpContext.Current.Session["contador"] = null;
                    throw new Exception("El usuario se encuentra bloqueado");
                }
            }
            catch (Exception exception)
            {
                LogRepository.registro("Error en UsuariosController metodo ValidarUsuarios " + exception.Message);
                throw exception;
            }
        }