//Instalación normal mediante NPM const { google } = require('googleapis'); const googleAuth = require('google-auth-library'); const fs = require('fs'); require('../config/config'); drive = google.drive('v3'); credenciales = JSON.parse(fs.readFileSync('./cred.json', 'utf8')); //Crear objeto de autorización JWT jwtClient = new google.auth.JWT( credenciales.client_email, null, credenciales.private_key, ['https://www.googleapis.com/auth/drive'] ); const list = (pageToken) => { return new Promise((resolve, reject) => { jwtClient.authorize((err, tokens) => { if (err) reject('Error de autorización: ' + err); drive.files.list( { auth: jwtClient, corpora: 'user', supportsTeamDrives: true, includeTeamDriveItems: true, spaces: 'drive', pageSize: 100, pageToken, fields: '*', orderBy: 'name', }, (err, resp) => { if (err) reject('Ha habido un error en la petición: ' + err); resolve(resp.data); } ); }); }); }; // Buscar carpeta const buscarCarpeta = async (name) => { const data = []; let pageToken = ''; do { let response = await list(pageToken); let files = response.files; for (let i = 0; i < files.length; i++) if ( files[i].name === name //&& // files[i].mimeType === 'application/vnd.google-apps.folder' ) data.push(files[i]); if (response.nextPageToken) pageToken = response.nextPageToken; else pageToken = ''; } while (pageToken); return data; }; const archivosCarpeta = async (id) => { let pageToken = ''; const data = []; do { let response = await list(pageToken); let files = response.files; for (let i = 0; i < files.length; i++) if (files[i].parents[0] === id) data.push(files[i]); if (response.nextPageToken) pageToken = response.nextPageToken; else pageToken = ''; } while (pageToken); return data; }; // Borrar archivo const deleteFile = (fileId) => { return new Promise((resolve, reject) => { jwtClient.authorize(async (err, tokens) => { if (err) reject(err); drive.files.delete( { fileId, auth: jwtClient, }, (err, resp) => { if (err) reject(err); resolve(resp); } ); }); }); }; // CREAR CARPETA const mkDir = (name) => { return new Promise((resolve, reject) => { jwtClient.authorize((err, tokens) => { if (err) reject('Error de autorización: ' + err); let requestBody = { name, mimeType: 'application/vnd.google-apps.folder', parents: [process.env.CARPETA], }; drive.files.create( { fields: 'id', auth: jwtClient, requestBody, }, (err, res) => { if (err) reject(err); resolve(res.data.id); } ); }); }); }; // CREAR ARCHIVO const uploadFile = (path, name, mimeType, parent) => { return new Promise((resolve, reject) => { jwtClient.authorize(function (err, tokens) { if (err) reject('Error de autorización: ' + err); let requestBody = { name, parents: [parent], }; let media = { mimeType: mimeType, body: fs.createReadStream(`${path}`), }; drive.files.create( { media: media, fields: 'id', requestBody, auth: jwtClient, }, (err, file) => { if (err) reject(err); fs.unlinkSync(path); resolve(file.data.id); } ); }); }); }; //deleteFile(""); //mkDir("316313528"); //uploadFile("arturo.jpg","image/jpeg","1DswUbL4uWE2RlB01XHLAIlPwh_0AXBHw"); //list() const folder = (numeroCuenta) => { return list() .then((res) => { for (let i = 0; i < res.length; i++) { if ( res[i].mimeType === 'application/vnd.google-apps.folder' && res[i].name === numeroCuenta ) return res[i].id; } return mkDir(numeroCuenta); }) .then((res) => { return res; }); }; const borrarTodo = () => { return list().then(async (res) => { console.log(res); // for (let i = 0; i < res.length; i++) // if (res[i].name !== 'Babyhelon') await deleteFile(res[i].id); }); }; // borrarTodo(); module.exports = { folder, uploadFile, buscarCarpeta, archivosCarpeta, };