usebeq.wrappers.google-drive 1.0.2

dotnet add package usebeq.wrappers.google-drive --version 1.0.2                
NuGet\Install-Package usebeq.wrappers.google-drive -Version 1.0.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="usebeq.wrappers.google-drive" Version="1.0.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add usebeq.wrappers.google-drive --version 1.0.2                
#r "nuget: usebeq.wrappers.google-drive, 1.0.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install usebeq.wrappers.google-drive as a Cake Addin
#addin nuget:?package=usebeq.wrappers.google-drive&version=1.0.2

// Install usebeq.wrappers.google-drive as a Cake Tool
#tool nuget:?package=usebeq.wrappers.google-drive&version=1.0.2                

GoogleDriveWrapper

El paquete GoogleDriveWrapper es una interfaz de la API de Google Drive que te permite gestionar archivos y carpetas de tu cuenta de Google Drive haciendo uso de una Cuenta de Servicio de Google.

Marco Teórico

Los Servicios de Google son una serie de herramientas y plataformas ofrecidas por Google que permiten a los desarrolladores crear aplicaciones que utilizan la funcionalidad de los servicios de Google, como Google Drive, Gmail, Google Calendar, Google Maps y muchos otros.

Google Drive es el servicio de almacenamiento en la nube de Google que permite a los usuarios almacenar y compartir archivos en línea. La API de Google Drive permite a los desarrolladores acceder a los archivos y carpetas almacenados en Google Drive y realizar operaciones como subir, descargar, buscar y compartir archivos.

Para hacer uso de la API de Google Drive, es necesario tener una cuenta de Google y configurar las credenciales de autenticación. Puedes elegir utilizar una cuenta de servicio o una cuenta personal de Google. Si utilizas una cuenta de servicio, necesitas crear una en la consola de desarrolladores de Google y descargar las credenciales de autenticación en forma de archivo JSON o P12. Si usas una cuenta personal de Google, necesitas crear un proyecto en la consola de desarrolladores de Google, habilitar la API de Google Drive y descargar las credenciales de autenticación en forma de archivo JSON.

Si vas a trabajar con una cuenta de servicio, adicional a lo anterior, debes otorgar a la cuenta, acceso a los datos de tu organización mediante la delegación de todo el dominio. Pide ayuda a un administrador avanzado del dominio de Google Workspace para delegar la autoridad de todo el dominio a una cuenta de servicio.

Una vez que se tienen las credenciales de autenticación, se pueden utilizar para autenticar las solicitudes a la API de Google Drive y realizar operaciones de archivo y carpeta. Por ejemplo, puedes utilizar la API de Google Drive para cargar archivos a la nube, compartir archivos con otros usuarios o descargar archivos de la nube.

Este es un ejemplo de como se ven las credenciales de autenticación de una cuenta de servicio de Google en formato JSON:

{
  "type": "service_account",
  "project_id": "project-id",
  "private_key_id": "private-key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n",
  "client_email": "service-account-email@project-id.iam.gserviceaccount.com",
  "client_id": "client-id",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email%40project-id.iam.gserviceaccount.com"
}

Ten en cuenta que los valores de project_id, private_key_id, private_key, client_email y client_id son específicos de tu cuenta de servicio de Google y deben ser reemplazados con tus propias credenciales.

Para mayor información acerca de la creación de cuentas de servicio y creación de claves consulta la siguiente liga Autorización para Cuentas de Servicio de Google

Credenciales de Autenticación

Las credenciales de autenticación se utilizan para autenticar tu aplicación con Google Drive y obtener acceso a las funciones de la API. Las credenciales pueden ser obtenidas a través de la consola de desarrollador de Google Cloud Platform. Una vez obtenidas, puedes almacenarlas en un archivo JSON y utilizarlas en tu aplicación para autenticar las solicitudes a la API

Cuentas de Servicio de Google

Las cuentas de servicio de Google son cuentas de Google que se utilizan para autenticar y autorizar solicitudes a las APIs de Google. A diferencia de las cuentas de usuario normales de Google, que están asociadas a una persona física, las cuentas de servicio están diseñadas para ser utilizadas por aplicaciones y procesos automatizados.

Las cuentas de servicio se utilizan comúnmente en aplicaciones y servicios en la nube que necesitan acceder a los recursos de Google en nombre de un usuario o una organización. Por ejemplo, una aplicación web que necesita acceder a los archivos de Google Drive de un usuario para leer o escribir datos, o un proceso automatizado que necesita acceder a los recursos de Google Cloud Platform para realizar tareas de procesamiento de datos.

Es importante tener en cuenta que las cuentas de servicio tienen sus propios permisos de acceso, que se pueden configurar a través de la consola de desarrollador de Google Cloud Platform. Es importante revisar y configurar adecuadamente los permisos de la cuenta de servicio para asegurarse de que tenga acceso solo a los recursos necesarios y que no tenga acceso no autorizado a otros recursos.

Sobre el uso de este wrapper

La clase DriveWrapper implementa la interfaz IDriveWrapper, la cual proporciona métodos para autenticar, cargar y descargar archivos, crear y borrar directorios, entre otros.

La clase DriveWrapper utiliza la clase DriveConnection para establecer la conexión con los servicios de Google Drive al proporcionar credenciales correctas.

Descripción y uso de las propiedades de la clase Credentials

Propiedad Default Descripción
IsImpersonate bool false Configurar a true para crear conexiones con suplantación de identidad.
EmailAccount string null Valor obligado, cuenta de correo del usuario físico o la institución con la que se creó el proyecto y la cuenta de servicio.
AppName string null Valor obligado, el nombre que se le asignó al proyecto en la Google Developer Console.
ServiceEmailAccount string null Valor obligado para autenticación con cuenta de servicio y suplantación de identidad, la dirección de correo de la cuenta servicio creada para autenticar nuestra aplicación.
ClientSecretsPath string null Valor obligado para autenticación con cuenta de usuario, ruta donde se localizan los secretos de usuario de la cuenta de correo del usuario u organización a la que deseamos autenticarnos.
PrivateKey string null Valor obligado para autenticación con cuenta de servicio y suplantación de identidad, contenido de la llave privada de usuario presente en el archivo credentials.json

Paso 1: Proporcionar las credenciales de autenticación

Creación de una instancia de la clase Credentials para autenticación haciendo uso de una cuenta de servicio para suplantación de identidad.

Ten en cuenta que los valores de EmailAccount, AppName, PrivateKey y ServiceEmailAccount son específicos de tu cuenta de servicio de Google y deben ser reemplazados con tus propias credenciales.

Credentials credentials = new Credentials {
  EmailAccount = "cuenta-de-usuario@dominio.edu.mx",
  AppName = "Google Login",
  PrivateKey = "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n",
  ServiceEmailAccount = "quickstart-service-account@project-id.iam.gserviceaccount.com",
  IsImpersonate = true
};

Paso 2. Usamos el método Authenticate para proporcionar las credenciales al wrapper

private IDriveWrapper wrapper = new DriveWrapper();
...
wrapper?.Authenticate(credentials);

Paso 3. Cargar archivos

Los métodos Upload y UploadAsync permiten cargar un archivo localmente a un directorio en Google Drive. Se comprueba si existe una carpeta remota identificada con el argumento de Identificador de Carpeta Remota y si la extensión de archivo es reconocida.

...
private string remotePathId = "187MxXsOVCxzM_AB0IBXeoe90cyvTKJ-u";
private string localPath = @"C:\Users\usebeq\Downloads\demo.jpeg";
...
// Método síncrono para cargar un archivo
// Se proporciona el directorio donde se encuentra el archivo a cargar
// Se proporciona el id la carpeta remota donde será alojado el archivo
wrapper.Upload(localPath, remotePathId);

// Método asíncrono para cargar un archivo
// Se proporciona el directorio donde se encuentra el archivo a cargar
// Se proporciona el id la carpeta remota donde será alojado el archivo
await wrapper.UploadAsync(localPath, remotePathId);

// Método síncrono para cargar un Stream
// Se proporciona el stream para cargar
// Se proporciona el id de la carpeta remota donde será alojado el archivo
// Se proporciona el MimeType del archivo contenido en el Stream
// Se proporciona un nombre para el archivo
string mimeType = MimeTypes.MimeTypes.GetMimeType(localPath);
using (FileStream stream = new FileStream(localPath, FileMode.Open)) {
  string fileName = Path.GetFileName(localPath);
  wrapper.Upload(stream, remotePathId, mimeType, fileName);
}

// Método asíncrono para cargar un Stream
// Se proporciona el stream para cargar
// Se proporciona el id de la carpeta remota donde será alojado el archivo
// Se proporciona el MimeType del archivo contenido en el Stream
// Se proporciona un nombre para el archivo
using (FileStream stream = new FileStream(localPath, FileMode.Open)) {
  string fileName = Path.GetFileName(localPath);
  await wrapper.UploadAsync(stream, remotePathId, mimeType, fileName);
}

Paso 4. Descargar archivos

Los métodos Download y DownloadAsync permiten descargar un archivo alojado en Google Drive.

...
private string remoteFileId = "1_PbdOc9yTenw9xizN7Pw53Mp8i7kDv1w";
...

// Método síncrono para descargar un archivo
// Se proporciona el id del archivo a descargar
public FileStreamResult DownloadImage() {
  Stream stream = wrapper.Download(remoteFileId);
  return File(stream, "image/jpeg");
}

// Método asíncrono para descargar un archivo
// Se proporciona el id del archivo a descargar
public async Task<FileStreamResult> AsyncDownloadImage() {
  Stream stream = await wrapper.DownloadAsync(remoteFileId);
  return File(stream, "image/jpeg");
}

Los métodos ExistFolder y GetFolderId comprueban que exista un directorio en la cuenta de Google Drive y obtienen el id de un directorio proporcionando el nombre de la carpeta.

// Comprobar que existe una carpeta proporcionando el id de Google Drive
bool exist = driveWrapper.ExistFolder(remotePath);

bool exist = await driveWrapper.ExistFolderAsync(remotePath);

// Obtener los ids de archivo de las carpetas que tengan el nombre proporcionando
string[] ids = driveWrapper.GetFolderId(remotePathName);

string[] ids = await driveWrapper.GetFolderIdAsync(remotePathName);

El método CreateFolder crea un directorio, opcionalmente, se proporciona el id de la carpeta que donde se alojara, nulo para crear la carpeta en raíz.

string folderId = driveWrapper.CreateFolder("NuevaCarpeta", remotePath);

string folderId = await driveWrapper.CreateFolderAsync("NuevaCarpeta", remotePath);

El método Delete borra el archivo o directorio con el id proporcionado.

string[] ids = driveWrapper.DeleteFolder(remotePathId);

string[] ids = await driveWrapper.DeleteFolderAsync(remotePathId);

En resumen, esta clase encapsula los detalles de implementación de la API de Google Drive y proporciona una interfaz de alto nivel para cargar, descargar y manipular archivos y directorios de Google Drive de manera fácil y rápida.

Contribuciones

Las contribuciones son bienvenidas. Por favor, envía una solicitud de extracción con tus cambios.

Licencia

Este proyecto está licenciado bajo la licencia MIT.

EL SOFTWARE SE PROPORCIONA TAL CUAL, SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUIDAS, ENTRE OTRAS, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO TIPO, QUE SURJA DE, FUERA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTROS TRATOS EN EL SOFTWARE.

Licencias de terceros Este proyecto utiliza los siguientes paquetes de terceros:

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.2 155 5/25/2023
1.0.1 123 4/27/2023