f6a4415a
Apichat.Tum
start smart-rms-c...
|
1
2
3
|
'use strict';
const google = require('googleapis');
|
d360cefc
TUM.Apichat
move save google ...
|
4
|
const plus = google.plus('v1');
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
5
6
|
const googleAuth = require('google-auth-library');
const calendar = google.calendar('v3');
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
7
|
const fs = require('fs');
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
8
9
10
|
const path = require('path');
const yamlConfig = require('node-yaml-config');
const config = yamlConfig.load(path.join(__dirname, '/../../config/config.yml'));
|
77034810
Apichat.Tum
fix REST API
|
11
|
const moment = require('moment')
|
d360cefc
TUM.Apichat
move save google ...
|
12
13
14
|
const Promise = require('bluebird')
const Mongoose = Promise.promisifyAll(require('mongoose'));
const Token = Mongoose.model('Token');
|
fbe7f7a7
Apichat.Tum
add api google
|
15
16
17
18
19
20
21
22
23
|
const console = process.console;
/**
* ดึงค่ามาจาก config.yml
*/
const CALENDAR_ID = config.google.calendar_id;
const REDIRECT_URL = config.google.redirect_url;
const CLIENT_ID = config.google.client_id;
const CLIENT_SECRET = config.google.client_secret;
|
f3f14fef
TUM.Apichat
add value config ...
|
24
|
|
fbe7f7a7
Apichat.Tum
add api google
|
25
26
27
28
29
30
31
|
/**
* เรียกใช้ oauth2Client
* @type {GoogleAuth}
*/
const auth = google.auth.OAuth2;
const oauth2Client = new auth(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
32
|
const SCOPES = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/userinfo.email'];
|
d360cefc
TUM.Apichat
move save google ...
|
33
|
const TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/.credentials/';
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
34
35
36
|
const TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';
function hasTimezone(timezone) {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
37
38
39
40
41
42
43
44
|
if (timezone) {
return timezone
} else {
return 'Asia/Bangkok'
}
}
function getNewToken(oauth2Client, callback) {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
var authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES
});
// console.log('Authorize this app by visiting this url: ', authUrl);
return authUrl;
}
function setNewToken(code) {
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);
})
}
function storeToken(token, emails) {
|
d360cefc
TUM.Apichat
move save google ...
|
66
67
68
|
var tokendb;
token.email = emails[0].value
try {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
69
|
// ** new
|
d360cefc
TUM.Apichat
move save google ...
|
70
71
72
73
|
tokendb = new Token(token);
// -- old
// fs.mkdirSync(TOKEN_DIR);
} catch (err) {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
74
|
throw err;
|
d360cefc
TUM.Apichat
move save google ...
|
75
|
}
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
76
|
// ** new
|
d360cefc
TUM.Apichat
move save google ...
|
77
|
Promise.try(function () {})
|
48a9a246
Apichat.Tum
fix auth
|
78
|
.then(function () {
|
d360cefc
TUM.Apichat
move save google ...
|
79
80
81
82
83
84
85
86
87
88
89
90
91
|
tokendb.save(function (err, result) {
if (err) {
console.error(err)
} else {
console.log(result);
}
});
});
// -- old
// fs.writeFile(TOKEN_PATH, JSON.stringify(token));
// console.log('Token stored to ' + TOKEN_PATH);
}
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
92
93
|
module.exports = {
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
94
|
authorize: (callback) => {
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
95
|
var setToken = {} // set token from callback
|
fbe7f7a7
Apichat.Tum
add api google
|
96
97
|
Token.findOne({
email: 'zentoriono@gmail.com'
|
f3f14fef
TUM.Apichat
add value config ...
|
98
|
}, function (err, token) {
|
fbe7f7a7
Apichat.Tum
add api google
|
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
if (err) {
return callback(null, null, getNewToken(oauth2Client, callback));
} else if (token) {
setToken = {
access_token: token.access_token,
refresh_token: token.refresh_token,
token_type: token.token_type,
expiry_date: token.expiry_date
};
// console.log(setToken)
oauth2Client.credentials = setToken;
return callback(null, oauth2Client);
} else {
return callback(null, null, getNewToken(oauth2Client, callback));
}
});
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
115
|
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
116
|
},
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
117
118
|
setNewToken: (code, callback) => {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
119
|
Token.findOne({
|
fbe7f7a7
Apichat.Tum
add api google
|
120
|
email: 'zentoriono@gmail.com'
|
f3f14fef
TUM.Apichat
add value config ...
|
121
|
}, function (err, token) {
|
fbe7f7a7
Apichat.Tum
add api google
|
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
if (token) {
oauth2Client.credentials = JSON.parse(token);
return callback(null, oauth2Client);
} else {
oauth2Client.getToken(code, function (err, token) {
if (err) {
console.log('Error while trying to retrieve access token', err);
return;
} else {
oauth2Client.credentials = token;
var params = {
userId: 'me',
fields: 'emails',
auth: oauth2Client
};
plus.people.get(params, function (err, response) {
if (err) {
console.error(err)
} else {
storeToken(token, response.emails);
}
});
return callback(null, oauth2Client);
}
|
48a9a246
Apichat.Tum
fix auth
|
149
|
})
|
fbe7f7a7
Apichat.Tum
add api google
|
150
151
152
153
|
}
});
},
|
48a9a246
Apichat.Tum
fix auth
|
154
|
listCalendar: (auth, callback) => {
|
fbe7f7a7
Apichat.Tum
add api google
|
155
156
157
158
159
160
|
calendar.calendarList.list({
auth: auth,
minAccessRole: 'owner'
}, (err, response) => {
if (err) return callback(err);
|
48a9a246
Apichat.Tum
fix auth
|
161
|
return callback(null, response);
|
fbe7f7a7
Apichat.Tum
add api google
|
162
|
});
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
163
164
165
|
},
listEvents: (auth, callback) => {
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
166
167
168
|
calendar.events.list({
auth: auth,
calendarId: CALENDAR_ID || 'primary', //CALENDAR_ID || 'primary'
|
fbe7f7a7
Apichat.Tum
add api google
|
169
|
maxResults: 50,
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
170
171
172
173
|
singleEvents: true,
orderBy: 'startTime'
}, (err, response) => {
if (err) return callback(err);
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
174
175
|
return callback(null, response);
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
176
177
178
179
|
});
},
createEvent: (options, callback) => {
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
180
|
calendar.events.insert({
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
181
|
auth: options.auth,
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
calendarId: CALENDAR_ID || 'primary',
resource: options
}, (err, response) => {
if (err) return callback(err);
return callback(null, response);
});
},
deleteEvent: (options, callback) => {
calendar.events.delete({
auth: options.auth,
calendarId: CALENDAR_ID || 'primary',
eventId: options.eventId
}, (err, response) => {
if (err) return callback(err);
return callback(null, response);
});
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
201
|
},
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
202
203
|
updateEvent: (options, callback) => {
|
77034810
Apichat.Tum
fix REST API
|
204
205
206
207
|
calendar.events.update({
auth: options.auth,
calendarId: CALENDAR_ID || 'primary',
eventId: options.eventId,
|
7598c58f
Apichat.Tum
add eventTypeID /...
|
208
209
|
resource: options
}, (err, response) => {
|
77034810
Apichat.Tum
fix REST API
|
210
211
212
213
214
215
216
|
if (err) return callback(err);
return callback(null, response);
});
},
eventBuilder: (payload) => {
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
217
|
var buildPayload = {}
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
218
219
|
try {
buildPayload.summary = payload.Title
|
77034810
Apichat.Tum
fix REST API
|
220
221
|
buildPayload.description = payload.Description
buildPayload.start = {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
222
|
dateTime: new Date(payload.Start),
|
21a1ff19
Apichat.Tum
fix follow smartr...
|
223
|
timezone: hasTimezone(payload.StartTimezone)
|
77034810
Apichat.Tum
fix REST API
|
224
|
}
|
77034810
Apichat.Tum
fix REST API
|
225
226
|
buildPayload.end = {
dateTime: new Date(payload.End),
|
21a1ff19
Apichat.Tum
fix follow smartr...
|
227
|
timeZone: hasTimezone(payload.EndTimezone)
|
77034810
Apichat.Tum
fix REST API
|
228
229
230
|
}
if (payload.email) {
buildPayload.attendees = [{
|
21a1ff19
Apichat.Tum
fix follow smartr...
|
231
232
233
|
email: payload.email
}]
}
|
77034810
Apichat.Tum
fix REST API
|
234
235
236
237
|
if (payload.reminders) {
buildPayload.reminders = {
useDefault: false,
overrides: [{
|
21a1ff19
Apichat.Tum
fix follow smartr...
|
238
239
240
241
|
method: 'email',
minutes: 24 * 60
}]
}
|
77034810
Apichat.Tum
fix REST API
|
242
243
|
}
if (payload.EventTypeID) {
|
7598c58f
Apichat.Tum
add eventTypeID /...
|
244
245
246
247
248
249
|
buildPayload.extendedProperties = {
"private": {
"eventTypeID": payload.EventTypeID
}
}
}
|
77034810
Apichat.Tum
fix REST API
|
250
|
if (payload.PropertyID) {
|
1244ae71
Apichat.Tum
new response
|
251
252
253
|
buildPayload.extendedProperties.private.propertyID = payload.PropertyID;
}
} catch (error) {
|
77034810
Apichat.Tum
fix REST API
|
254
255
256
257
258
259
|
console.error(error.message)
} finally {
return buildPayload
}
},
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
260
|
deleteBuilder: (payload) => {
|
77034810
Apichat.Tum
fix REST API
|
261
262
263
264
265
266
267
268
269
270
271
272
|
var buildPayload = {}
try {
buildPayload.calendarId = CALENDAR_ID
buildPayload.eventId = payload.TaskID
} catch (error) {
console.error(error.message)
} finally {
return buildPayload
}
},
/**
|
fbe7f7a7
Apichat.Tum
add api google
|
273
274
275
276
277
|
* สร้าง JSON สำหรับส่งไปอัพเดตข้อมูล event ปฏิทิน
* @param payload
* @returns {{}}
*/
updateBuilder: (payload) => {
|
77034810
Apichat.Tum
fix REST API
|
278
|
var buildPayload = {};
|
fbe7f7a7
Apichat.Tum
add api google
|
279
|
try {
|
77034810
Apichat.Tum
fix REST API
|
280
|
buildPayload.calendarId = CALENDAR_ID;
|
fbe7f7a7
Apichat.Tum
add api google
|
281
282
283
284
|
buildPayload.eventId = payload.TaskID;
buildPayload.summary = payload.Title;
buildPayload.description = payload.Description;
buildPayload.start = {
|
77034810
Apichat.Tum
fix REST API
|
285
286
287
|
dateTime: moment(payload.Start).format("YYYY-MM-DDTHH:mm:ssZ"),
timeZone: hasTimezone(payload.StartTimezone)
};
|
fbe7f7a7
Apichat.Tum
add api google
|
288
|
buildPayload.end = {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
289
|
dateTime: moment(payload.End).format("YYYY-MM-DDTHH:mm:ssZ"),
|
77034810
Apichat.Tum
fix REST API
|
290
291
|
timeZone: hasTimezone(payload.EndTimezone)
};
|
fbe7f7a7
Apichat.Tum
add api google
|
292
|
if (payload.email) {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
293
|
buildPayload.attendees = [{
|
21a1ff19
Apichat.Tum
fix follow smartr...
|
294
295
296
|
email: payload.email
}]
}
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
297
298
299
300
|
if (payload.reminders) {
buildPayload.reminders = {
useDefault: false,
overrides: [{
|
21a1ff19
Apichat.Tum
fix follow smartr...
|
301
302
303
304
|
method: 'email',
minutes: 24 * 60
}]
}
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
305
306
|
}
if (payload.EventTypeID) {
|
7598c58f
Apichat.Tum
add eventTypeID /...
|
307
308
309
310
311
312
313
|
buildPayload.extendedProperties = {
"private": {
"eventTypeID": payload.EventTypeID
}
}
}
if (payload.PropertyID) {
|
1244ae71
Apichat.Tum
new response
|
314
315
316
|
buildPayload.extendedProperties.private.propertyID = payload.PropertyID;
}
if (payload.extendedProperties) {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
317
318
|
buildPayload.extendedProperties = payload.extendedProperties
}
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
319
|
} catch (error) {
|
cf86e9a3
Apichat.Tum
- ui with oauth2 ...
|
320
321
322
323
|
console.error(error.message)
} finally {
return buildPayload
}
|
a54f2679
DESKTOP-RBJDHSM\ADMIN
fix API
|
324
|
},
|
fbe7f7a7
Apichat.Tum
add api google
|
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
|
/**
* API สร้างปฏิทิน อิงตาม summary(จะกลายเป็นชื่อของปฏิทิน) ที่มาจาก request
* @googleAPI https://developers.google.com/apis-explorer/#p/calendar/v3/calendar.calendars.insert
* @param options
* @param callback
*/
createCalendar: (options, callback) => {
calendar.calendars.insert({
auth: options.auth,
resource: options
}, (err, response) => {
if (err) return callback(err);
return callback(null, response);
});
},
/**
* API เรียกข้อมูลปฏิทิน อิงตาม id ที่มาจาก request
* @googleAPI https://developers.google.com/apis-explorer/#p/calendar/v3/calendar.calendarList.get
* @param auth
* @param callback
*/
getCalendar: (auth, callback) => {
calendar.calendars.get({
auth: auth,
calendarId: CALENDAR_ID || 'primary'
}, (err, response) => {
if (err) return callback(err);
return callback(null, response);
});
},
/**
* API ลบปฏิทินโดย อิงตาม id ที่มาจาก request
* @googleAPI https://developers.google.com/apis-explorer/#p/calendar/v3/calendar.calendars.delete
* @param options
* @param callback
*/
deleteCalendar: (options, callback) => {
calendar.calendars.delete({
auth: options.auth,
calendarId: options.calendarId
}, (err, response) => {
if (err) return callback(err);
return callback(null, response);
});
},
refreshToken: (options, callback) => {
oauth2Client.setCredentials(options.auth);
|
f3f14fef
TUM.Apichat
add value config ...
|
380
|
oauth2Client.refreshAccessToken(function(err, tokens) {
|
fbe7f7a7
Apichat.Tum
add api google
|
381
382
383
384
385
386
387
|
// your access_token is now refreshed and stored in oauth2Client
// store these new tokens in a safe place (e.g. database)
if (err) return callback(err);
return callback(null, tokens);
});
}
|
f6a4415a
Apichat.Tum
start smart-rms-c...
|
388
|
|
fbe7f7a7
Apichat.Tum
add api google
|
389
390
|
};
|