index.js 3.08 KB
'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);
        });
    }
}