require('../config/config'); const fs = require('fs'); const { google } = require('googleapis'); const drive = google.drive('v3'); const credenciales = JSON.parse(fs.readFileSync('./cred.json', 'utf8')); const jwtClient = new google.auth.JWT( credenciales.client_email, null, credenciales.private_key, ['https://www.googleapis.com/auth/drive'] ); // 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); } ); }); }); }; // SUBIR 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); } ); }); }); }; // 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); } ); }); }); }; 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: 1000, pageToken, // fields: '*', orderBy: 'name', }, (err, resp) => { if (err) reject('Ha habido un error en la petición: ' + err); resolve(resp.data); } ); }); }); }; // Update File const update = (fileId, addParents, removeParents) => { return new Promise((resolve, reject) => { jwtClient.authorize((err, tokens) => { if (err) reject('Error de autorización: ' + err); drive.files.update( { auth: jwtClient, fileId, addParents, removeParents }, (err, resp) => { if (err) reject('Ha habido un error en la petición: ' + err); resolve(resp.data); } ); }); }); }; const folder = async (numeroCuenta) => { let pageToken = ''; do { let response = await list(pageToken); let files = response.files; for (let i = 0; i < files.length; i++) if ( files[i].name === numeroCuenta && files[i].mimeType === 'application/vnd.google-apps.folder' ) return files[i].id; pageToken = ''; if (response.nextPageToken) pageToken = response.nextPageToken; } while (pageToken); return mkDir(numeroCuenta); }; const borrarTodo = () => { return list().then(async (res) => { console.log(res); // for (let i = 0; i < res.files.length; i++) // if (res.files[i].name !== 'Babyhelon') await deleteFile(res.files[i].id); }); }; // borrarTodo(); const archivosFicheros = async () => { let pageToken = ''; const pdf = []; const carpetas = []; do { let response = await list(pageToken); for (let i = 0; i < response.files.length; i++) { if (response.files[i].mimeType === 'application/vnd.google-apps.folder') carpetas.push(response.files[i]); else pdf.push(response.files[i]); } if (response.nextPageToken) pageToken = response.nextPageToken; else pageToken = ''; } while (pageToken); return { pdf, carpetas }; }; // archivosFicheros(); module.exports = { folder, uploadFile, deleteFile, update, archivosFicheros, };