Ejemplo n.º 1
0
        /// <summary>
        /// Método encargado de Editar la Contraseña del Usuario
        /// </summary>
        /// <param name="contrasena_nueva"></param>
        /// <param name="contrasena_actual"></param>
        /// <param name="id_usuario_actualiza"></param>
        /// <returns></returns>
        public RetornoOperacion EditaContrasena(string contrasena_nueva, string contrasena_actual, int id_usuario_actualiza)
        {
            //Definiendo objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion();

            //Encriptando Contraseña Ingresada
            string contrasena_actual_encriptada = Encriptacion.CalculaHashCadenaEnBase64(contrasena_actual, Encriptacion.MetodoDigestion.SHA1);
            string contrasena_nueva_encriptada  = Encriptacion.CalculaHashCadenaEnBase64(contrasena_nueva, Encriptacion.MetodoDigestion.SHA1);

            //Validando que la Contraseña Actual
            if (contrasena_actual_encriptada.Equals(this._contrasena))
            {
                //Validando la Contraseña Nueva con la Actual
                if (!contrasena_nueva_encriptada.Equals(this._contrasena))
                {
                    //Actualizando Contraseña
                    resultado = this.editaUsuario(this._nombre, this._email, contrasena_nueva_encriptada, Fecha.ObtieneFechaEstandarMexicoCentro(), this._dias_vigencia,
                                                  this._tiempo_expiracion, this._pregunta_secreta, this._respuesta_secreta, this._sesiones_disponibles, id_usuario_actualiza, this._habilitar);
                }
                else
                {
                    //Instanciando Excepción
                    resultado = new RetornoOperacion("Ingrese una Contraseña Diferente a la Actual");
                }
            }
            else
            {
                //Instanciando Excepción
                resultado = new RetornoOperacion("Verifique la contraseña actual");
            }

            //Devolviendo Resultado Obtenido
            return(resultado);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Inicia Sesión el Usuario
        /// </summary>
        /// <param name="contrasena">Contraseña proporcionada por el Usuario</param>
        /// <returns></returns>
        public RetornoOperacion AutenticaUsuario(string contrasena)
        {
            //Declaramos Resultado
            RetornoOperacion resultado = new RetornoOperacion();

            //Validamos que exista Usuario
            if (this._id_usuario > 0)
            {
                //Validando asignación de un perfil de usuario activo
                using (PerfilSeguridadUsuario perfilActivo = PerfilSeguridadUsuario.ObtienePerfilActivo(this._id_usuario))
                {
                    //Si hay perfil activo
                    if (perfilActivo.id_perfil > 0)
                    {
                        //Obtenemos Contraseña proporcionada
                        contrasena = Encriptacion.CalculaHashCadenaEnBase64(contrasena, Encriptacion.MetodoDigestion.SHA1);

                        //Comparamos contraseña actual con la proporcionada
                        if (this._contrasena == contrasena)
                        {
                            //Actualizamos sesiones que ya han expirado
                            UsuarioSesion.FinalizaSesionesExpiradas(this.id_usuario);

                            /*Validamos el No. de Sesiones Disponibles para el Usuario comparando las que se encuentran actualmente Activas.
                             *                  Sesiones Disponible = 0 sin limite de sesiones */
                            if ((UsuarioSesion.ObtieneNumeroSesionesActivas(this._id_usuario) < this._sesiones_disponibles) || (this.sesiones_disponibles == 0))
                            {
                                //Regresamos Id de Usuario
                                resultado = new RetornoOperacion(this._id_usuario);
                            }
                            else
                            {
                                //Mostrando Mensaje
                                resultado = new RetornoOperacion("Ha alcanzado el número de sesiones permitadas o no ha cerrado correctamente su última sesión.");
                            }
                        }
                        else
                        {
                            //Mostramos Error
                            resultado = new RetornoOperacion("Verifique usuario y/o contraseña.");
                        }
                    }
                    //Si no hay perfil de seguridad activo
                    else
                    {
                        resultado = new RetornoOperacion("No cuenta con un perfil de seguridad activo, contacte con el administrador del sitio.");
                    }
                }
            }
            else
            {
                resultado = new RetornoOperacion("No existe un usuario con los datos proporcionados.");
            }

            //Devolvemos Resultado
            return(resultado);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Realiza la edición de los datos de recuperación de contraseña
        /// </summary>
        /// <param name="pregunta_secreta">Pregunta secreta</param>
        /// <param name="respuesta_secreta">Respuesta secreta</param>
        /// <param name="id_usuario_actualiza">Id de Usuario que actualiza</param>
        /// <returns></returns>
        public RetornoOperacion EditaPreguntaSecreta(string pregunta_secreta, string respuesta_secreta, int id_usuario_actualiza)
        {
            //Definiendo objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion();
            //Obteniendo hash de nueva respuesta secreta
            string hashRespuesta = Encriptacion.CalculaHashCadenaEnBase64(respuesta_secreta, Encriptacion.MetodoDigestion.SHA1);

            //Realizando actualización
            resultado = this.editaUsuario(this._nombre, this._email, this._contrasena, this._fecha_contrasena, this._dias_vigencia, this._tiempo_expiracion,
                                          pregunta_secreta, hashRespuesta, this._sesiones_disponibles, id_usuario_actualiza, this._habilitar);
            //Devolviendo resultado
            return(resultado);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Realiza la edición de la contraseña de usuario
        /// </summary>
        /// <param name="contrasena">Nueva contraseña asignada</param>
        /// <param name="id_usuario_actualiza">Id de usuario que actualiza</param>
        /// <returns></returns>
        public RetornoOperacion EditaContrasena(string contrasena, int id_usuario_actualiza)
        {
            //Definiendo objeto de resultado
            RetornoOperacion resultado = new RetornoOperacion();
            //Obteniendo hash de nueva contraseña
            string hashContrasena = Encriptacion.CalculaHashCadenaEnBase64(contrasena, Encriptacion.MetodoDigestion.SHA1);
            //Si se ha modificado la contraseña, se asigna nueva fecha
            DateTime fechaContrasena = hashContrasena != this._contrasena ? DateTime.Today : this._fecha_contrasena;

            //Realizando actualización
            resultado = this.editaUsuario(this._nombre, this._email, hashContrasena, fechaContrasena, this._dias_vigencia, this._tiempo_expiracion, this._pregunta_secreta, this._respuesta_secreta, this._sesiones_disponibles, id_usuario_actualiza, this._habilitar);
            //Devolviendo resultado
            return(resultado);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Reguistra un nuevo usuario en la base de datos
        /// </summary>
        /// <param name="nombre">Nombre del usuario</param>
        /// <param name="email">Email</param>
        /// <param name="contrasena">Contraseña deseada</param>
        /// <param name="fecha_contrasena">Fecha de edición de contraseña</param>
        /// <param name="dias_vigencia">Días de vigencia de la contraseña (0 = Sin límite de vigencia)</param>
        /// <param name="tiempo_expiracion">Tiempo de expiración de la sesión</param>
        /// <param name="pregunta_secreta">Pregunta secreta para recuperación de cuenta</param>
        /// <param name="respuesta_secreta">Respuesta a la pregunta secreta</param>
        /// <param name="sesiones_disponibles">Número de sesiones totales permitidas para el usuario (0 = Sin límite de sesiones)</param>
        /// <param name="id_usuario_actualiza">Id de usuario que registra al nuevo usuario</param>
        /// <returns></returns>
        public static RetornoOperacion InsertaUsuario(string nombre, string email, string contrasena, DateTime fecha_contrasena, byte dias_vigencia, byte tiempo_expiracion, string pregunta_secreta, string respuesta_secreta, byte sesiones_disponibles, int id_usuario_actualiza)
        {
            //Definiendo objeto de retorno
            RetornoOperacion resultado = new RetornoOperacion();

            //Inicializando parámetros para registrar nuevo usuario
            object[] param = { 1,                             0, nombre,           email,                                                    Encriptacion.CalculaHashCadenaEnBase64(contrasena, Encriptacion.MetodoDigestion.SHA1), fecha_contrasena,
                               dias_vigencia, tiempo_expiracion, pregunta_secreta, Encriptacion.CalculaHashCadenaEnBase64(respuesta_secreta, Encriptacion.MetodoDigestion.SHA1),                sesiones_disponibles,               id_usuario_actualiza,true,"", "" };

            //Creando nuevo usuario en BD
            resultado = CapaDatos.m_capaDeDatos.EjecutaProcAlmacenadoObjeto(_nombre_stored_procedure, param);

            //Devolviendo resultado
            return(resultado);
        }
Ejemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id_usuario_registro"></param>
        /// <param name="clave_encriptacion"></param>
        /// <param name="llave_encriptacion"></param>
        /// <param name="id_compania"></param>
        /// <param name="id_usuario"></param>
        /// <param name="token_usuario"></param>
        /// <returns></returns>
        private static RetornoOperacion generaTokenUsuario(int id_usuario_registro, Encriptacion.MetodoDigestion clave_encriptacion, int vigencia, string llave_encriptacion, int id_compania, int id_usuario, out string token_usuario)
        {
            RetornoOperacion retorno      = new RetornoOperacion();
            DateTime         fecha_actual = Fecha.ObtieneFechaEstandarMexicoCentro();

            token_usuario = "";

            if (llave_encriptacion.Length <= 10)
            {
                string llave64 = Encriptacion.CalculaHashCadenaEnBase64(llave_encriptacion, clave_encriptacion);
                //Validando Usuario
                using (Usuario user = new Usuario(id_usuario_registro))
                {
                    if (user.habilitar)
                    {
                        using (TransactionScope scope = Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted))
                        {
                            using (UsuarioToken activo = UsuarioToken.ObtieneTokenActivo(id_usuario_registro, id_compania))
                            {
                                if (!activo.habilitar)
                                {
                                    //Generando Resultado Positivo
                                    retorno = new RetornoOperacion(id_usuario, "Listo para Crear el Token", true);
                                }
                                else
                                {
                                    //Terminando TOKEN
                                    retorno = activo.TerminaUsuarioToken(id_usuario);
                                    if (retorno.OperacionExitosa)
                                    {
                                        //Generando Resultado Positivo
                                        retorno = new RetornoOperacion(id_usuario, "Listo para Crear el Token", true);
                                    }
                                }
                            }

                            if (retorno.OperacionExitosa)
                            {
                                //Creando Clave para encriptación
                                string pre_token = string.Format("{0:0000}{1:yyyyMMdd_HHmm}", user.id_usuario, fecha_actual);
                                //Encriptando en Clave AES
                                token_usuario = Encriptacion.EncriptaCadenaAESEnBase64(pre_token, llave64);
                                if (!token_usuario.Equals(""))
                                {
                                    retorno = new RetornoOperacion(user.id_usuario, "Token generado exitosamente.", true);
                                }
                                else
                                {
                                    retorno = new RetornoOperacion("El token no se genero correctamente");
                                }

                                if (retorno.OperacionExitosa)
                                {
                                    retorno = UsuarioToken.InsertaUsuarioToken(id_usuario_registro, id_compania, 0, (int)clave_encriptacion, llave64, token_usuario, vigencia, fecha_actual, DateTime.MinValue, id_usuario);
                                    if (retorno.OperacionExitosa)
                                    {
                                        retorno = new RetornoOperacion(retorno.IdRegistro, "Token Generado Exitosamente!", true);
                                        //Completando Transacción
                                        scope.Complete();
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        retorno = new RetornoOperacion("El usuario que ingreso así como Clarita, es invalido");
                    }
                }
            }
            else
            {
                retorno = new RetornoOperacion("La llave de encriptación debe de ser de 10 caracteres máximo");
            }

            return(retorno);
        }