/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }