'use strict'; const google = require('googleapis'); const googleAuth = require('google-auth-library'); const calendar = google.calendar('v3'); const fs = require('fs'); const SCOPES = [process.env.SCOPES]; const TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/.credentials/'; const TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json'; module.exports = { authorize: (callback) => { fs.readFile('client_secret.json', function processClientSecrets(err, content) { if (err) { console.log('Error loading client secret file: ' + err); return; } let credentials = JSON.parse(content); var clientSecret = credentials.installed.client_secret; var clientId = credentials.installed.client_id; var redirectUrl = credentials.installed.redirect_uris[0]; var auth = new googleAuth(); var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl); // Check if we have previously stored a token. fs.readFile(TOKEN_PATH, function (err, token) { if (err) { return callback(err); } else { oauth2Client.credentials = JSON.parse(token); return callback(null, oauth2Client); } }); }); }, getNewToken: (oauth2Client, callback) => { var authUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: SCOPES }); console.log('Authorize this app by visiting this url: ', authUrl); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('Enter the code from that page here: ', function (code) { rl.close(); oauth2Client.getToken(code, function (err, token) { if (err) { console.log('Error while trying to retrieve access token', err); return; } oauth2Client.credentials = token; storeToken(token); callback(oauth2Client); }); }); }, listEvents: (auth, callback) => { calendar.events.list({ auth: auth, calendarId: process.env.CALENDAR_ID, timeMin: (new Date()).toISOString(), maxResults: 50, singleEvents: true, orderBy: 'startTime' }, (err, response) => { if (err) { return callback(err); } return callback(null, response); }); }, createEvent: (auth, event, callback) => { calendar.events.insert({ auth: auth, calendarId: process.env.CALENDAR_ID, resource: event, }, (err, event) => { if (err) { return callback('There was an error contacting the Calendar service: ' + err); } return callback(null, event.htmlLink); }); } }