-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalendar.js
119 lines (106 loc) · 3.26 KB
/
calendar.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const config = require("./config");
const fs = require("fs");
const readline = require("readline");
const { google } = require("googleapis");
const delay = require("delay");
const prettyMilliseconds = require('pretty-ms');
const SCOPES = ["https://www.googleapis.com/auth/calendar"];
const TOKEN_PATH = "token.json";
const login = loggedInCallback => {
fs.readFile("credentials.json", (err, content) => {
if (err) return console.log("Error loading client secret file:", err);
authorize(JSON.parse(content), loggedInCallback);
});
function authorize(credentials, callback) {
const { client_secret, client_id, redirect_uris } = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(
client_id,
client_secret,
redirect_uris[0]
);
fs.readFile(TOKEN_PATH, (err, token) => {
if (err) return getAccessToken(oAuth2Client, callback);
oAuth2Client.setCredentials(JSON.parse(token));
callback(oAuth2Client);
});
}
function getAccessToken(oAuth2Client, callback) {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: "offline",
scope: SCOPES
});
console.log("Authorize this app by visiting this url:", authUrl);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Enter the code from that page here: ", code => {
rl.close();
oAuth2Client.getToken(code, (err, token) => {
if (err) return console.error("Error retrieving access token", err);
oAuth2Client.setCredentials(token);
fs.writeFile(TOKEN_PATH, JSON.stringify(token), err => {
if (err) return console.error(err);
console.log("Token stored to", TOKEN_PATH);
});
callback(oAuth2Client);
});
});
}
};
async function createEvent(auth, event) {
const calendar = google.calendar({ version: "v3", auth });
await calendar.events.insert(
{
auth: auth,
calendarId: config.calendar.id,
resource: event
},
function(err) {
if (err && err.response.data.error.code === 409) {
updateEvent(auth, event);
return;
}
if (err) {
console.log(
"There was an error contacting the Calendar service: " + err
);
return;
}
console.log("Event created: %s", event.summary);
}
);
}
async function updateEvent(auth, event) {
const calendar = google.calendar({ version: "v3", auth });
await calendar.events.update(
{
auth: auth,
calendarId: config.calendar.id,
eventId: event.id,
resource: event
},
function(err) {
if (err) {
console.log(
"There was an error contacting the Calendar service: " + err
);
return;
}
console.log("Event updated: %s", event.summary);
}
);
}
const addEvents = async events => {
login(async auth => {
console.log(`Ok! Will create/update ${events.length} events! This will need ${prettyMilliseconds(events.length*250, 'ms')}`);
for (let index = 0; index < events.length; index++) {
const event = events[index];
await delay(250);
await createEvent(auth, event);
}
});
};
exports.login = login;
exports.createEvent = createEvent;
exports.addEvents = addEvents;