Blame view

app/lib/index.js 8.32 KB
f6a4415a   Apichat.Tum   start smart-rms-c...
1
2
3
'use strict';

const google = require('googleapis');
d360cefc   TUM.Apichat   move save google ...
4
const googleAuth = require('google-auth-library');
f6a4415a   Apichat.Tum   start smart-rms-c...
5
6
const calendar = google.calendar('v3');
const fs = require('fs');
f6a4415a   Apichat.Tum   start smart-rms-c...
7
const path = require('path');
a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API
8
9
10
const yamlConfig = require('node-yaml-config');
const config = yamlConfig.load(path.join(__dirname, '/../../config/config.yml'));
const moment = require('moment')
77034810   Apichat.Tum   fix REST API
11
const CALENDAR_ID = config.ggapi.calendarID
d360cefc   TUM.Apichat   move save google ...
12
13
14
const REDIRECTURL = config.ggapi.redirectUrl


fbe7f7a7   Apichat.Tum   add api google
15
16
17
18
19
20
21
22
23
const SCOPES = ['https://www.googleapis.com/auth/calendar'];
const TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/.credentials/';
const TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';

function hasTimezone(timezone) {
    if (timezone) {
        return timezone
    } else {
        return 'Asia/Bangkok'
f3f14fef   TUM.Apichat   add value config ...
24
    }
fbe7f7a7   Apichat.Tum   add api google
25
26
27
28
29
30
31
}



function getNewToken(oauth2Client, callback) {
    var authUrl = oauth2Client.generateAuthUrl({
        access_type: 'offline',
f6a4415a   Apichat.Tum   start smart-rms-c...
32
        scope: SCOPES
d360cefc   TUM.Apichat   move save google ...
33
    });
f6a4415a   Apichat.Tum   start smart-rms-c...
34
35
36
    // console.log('Authorize this app by visiting this url: ', authUrl);
    return authUrl;
}
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
37
38
39
40
41
42
43
44

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;
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
        storeToken(token);
        callback(oauth2Client);
    })
}

function storeToken(token) {
    try {
        fs.mkdirSync(TOKEN_DIR);
    } catch (err) {
        if (err.code != 'EEXIST') {
            throw err;
        }
    }
    fs.writeFile(TOKEN_PATH, JSON.stringify(token));
    console.log('Token stored to ' + TOKEN_PATH);
}

module.exports = {
    authorize: (callback) => {

        fs.readFile('client_secret.json', (err, content) => {
d360cefc   TUM.Apichat   move save google ...
66
67
68
            if (err) return callback(err);

            let credentials = JSON.parse(content);
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
69
            var clientSecret = credentials.installed.client_secret;
d360cefc   TUM.Apichat   move save google ...
70
71
72
73
            var clientId = credentials.installed.client_id;
            var redirectUrl = credentials.installed.redirect_uris[1];
            var auth = new googleAuth();
            var oauth2Client = new auth.OAuth2(clientId, clientSecret, REDIRECTURL);
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
74

d360cefc   TUM.Apichat   move save google ...
75
            fs.readFile(TOKEN_PATH, (err, token) => {
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
76
                if (err) {
d360cefc   TUM.Apichat   move save google ...
77
                    return callback(null, null, getNewToken(oauth2Client, callback));
48a9a246   Apichat.Tum   fix auth
78
                } else {
d360cefc   TUM.Apichat   move save google ...
79
80
81
82
83
84
85
86
87
88
89
90
91
                    oauth2Client.credentials = JSON.parse(token);
                    return callback(null, oauth2Client);
                }
            });
        });

    },

    setNewToken: (code, callback) => {
        fs.readFile('client_secret.json', (err, content) => {
            if (err) return callback(err);

            let credentials = JSON.parse(content);
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
92
93
            var clientSecret = credentials.installed.client_secret;
            var clientId = credentials.installed.client_id;
f6a4415a   Apichat.Tum   start smart-rms-c...
94
            var redirectUrl = credentials.installed.redirect_uris[1];
f6a4415a   Apichat.Tum   start smart-rms-c...
95
            var auth = new googleAuth();
fbe7f7a7   Apichat.Tum   add api google
96
97
            var oauth2Client = new auth.OAuth2(clientId, clientSecret, REDIRECTURL);

f3f14fef   TUM.Apichat   add value config ...
98
            fs.readFile(TOKEN_PATH, (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) {
                    oauth2Client.getToken(code, function (err, token) {
                        if (err) {
                            console.log('Error while trying to retrieve access token', err);
                            return;
                        } else {
                            oauth2Client.credentials = token;
                            storeToken(token);
                            return callback(null, oauth2Client);
                        }

                    })
                } else {
                    oauth2Client.credentials = JSON.parse(token);
                    return callback(null, oauth2Client);
                }
f6a4415a   Apichat.Tum   start smart-rms-c...
115
            });
a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API
116
        });
f6a4415a   Apichat.Tum   start smart-rms-c...
117
118
    },

cf86e9a3   Apichat.Tum   - ui with oauth2 ...
119
    listEvents: (auth, callback) => {
fbe7f7a7   Apichat.Tum   add api google
120
        calendar.events.list({
f3f14fef   TUM.Apichat   add value config ...
121
            auth: auth,
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
            calendarId: CALENDAR_ID || 'primary',
            maxResults: 50,
            singleEvents: true,
            orderBy: 'startTime'
        }, (err, response) => {
            if (err) return callback(err);

            return callback(null, response);
        });
    },

    createEvent: (options, callback) => {
        calendar.events.insert({
            auth: options.auth,
            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',
48a9a246   Apichat.Tum   fix auth
149
            eventId: options.eventId
fbe7f7a7   Apichat.Tum   add api google
150
151
152
153
        }, (err, response) => {
            if (err) return callback(err);

            return callback(null, response);
48a9a246   Apichat.Tum   fix auth
154
        });
fbe7f7a7   Apichat.Tum   add api google
155
156
157
158
159
160
    },

    updateEvent: (options, callback) => {
        calendar.events.update({
            auth: options.auth,
            calendarId: CALENDAR_ID || 'primary',
48a9a246   Apichat.Tum   fix auth
161
            eventId: options.eventId,
fbe7f7a7   Apichat.Tum   add api google
162
            resource: options
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
163
164
165
        }, (err, response) => {
            if (err) return callback(err);

f6a4415a   Apichat.Tum   start smart-rms-c...
166
167
168
            return callback(null, response);
        });
    },
fbe7f7a7   Apichat.Tum   add api google
169

f6a4415a   Apichat.Tum   start smart-rms-c...
170
171
172
173
    eventBuilder: (payload) => {
        var buildPayload = {}
        try {
            buildPayload.summary = payload.Title
a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API
174
175
            buildPayload.description = payload.Description
            buildPayload.start = {
f6a4415a   Apichat.Tum   start smart-rms-c...
176
177
178
179
                dateTime: new Date(payload.Start),
                timezone: hasTimezone(payload.StartTimezone)
            }
            buildPayload.end = {
a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API
180
                dateTime: new Date(payload.End),
f6a4415a   Apichat.Tum   start smart-rms-c...
181
                timeZone: hasTimezone(payload.EndTimezone)
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
            }
            if (payload.email) {
                buildPayload.attendees = [{
                    email: payload.email
                }]
            }
            if (payload.reminders) {
                buildPayload.reminders = {
                    useDefault: false,
                    overrides: [{
                        method: 'email',
                        minutes: 24 * 60
                    }]
                }
            }
            if (payload.EventTypeID) {
                buildPayload.extendedProperties = {
                    "private": {
                        "eventTypeID": payload.EventTypeID
f6a4415a   Apichat.Tum   start smart-rms-c...
201
                    }
a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API
202
203
                }
            }
77034810   Apichat.Tum   fix REST API
204
205
206
207
        } catch (error) {
            console.error(error.message)
        } finally {
            return buildPayload
7598c58f   Apichat.Tum   add eventTypeID /...
208
209
        }
    },
77034810   Apichat.Tum   fix REST API
210
211
212
213
214
215
216

    deleteBuilder: (payload) => {
        var buildPayload = {}
        try {
            buildPayload.calendarId = CALENDAR_ID
            buildPayload.eventId = payload.TaskID
        } catch (error) {
a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API
217
            console.error(error.message)
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
218
219
        } finally {
            return buildPayload
77034810   Apichat.Tum   fix REST API
220
221
        }
    },
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
222

21a1ff19   Apichat.Tum   fix follow smartr...
223
    updateBuilder: (payload) => {
77034810   Apichat.Tum   fix REST API
224
        var buildPayload = {}
77034810   Apichat.Tum   fix REST API
225
226
        try {
            buildPayload.calendarId = CALENDAR_ID
21a1ff19   Apichat.Tum   fix follow smartr...
227
            buildPayload.eventId = payload.TaskID
77034810   Apichat.Tum   fix REST API
228
229
230
            buildPayload.summary = payload.Title
            buildPayload.description = payload.Description
            buildPayload.start = {
21a1ff19   Apichat.Tum   fix follow smartr...
231
232
233
                dateTime: moment(payload.Start).format("YYYY-MM-DDTHH:mm:ssZ"),
                timeZone: hasTimezone(payload.StartTimezone)
            }
77034810   Apichat.Tum   fix REST API
234
235
236
237
            buildPayload.end = {
                dateTime: moment(payload.End).format("YYYY-MM-DDTHH:mm:ssZ"),
                timeZone: hasTimezone(payload.EndTimezone)
            }
21a1ff19   Apichat.Tum   fix follow smartr...
238
239
240
241
            if (payload.email) {
                buildPayload.attendees = [{
                    email: payload.email
                }]
77034810   Apichat.Tum   fix REST API
242
243
            }
            if (payload.reminders) {
7598c58f   Apichat.Tum   add eventTypeID /...
244
245
246
247
248
249
                buildPayload.reminders = {
                    useDefault: false,
                    overrides: [{
                        method: 'email',
                        minutes: 24 * 60
                    }]
77034810   Apichat.Tum   fix REST API
250
                }
1244ae71   Apichat.Tum   new response
251
252
253
            }
            if (payload.EventTypeID) {
                buildPayload.extendedProperties = {
77034810   Apichat.Tum   fix REST API
254
255
256
257
258
259
                    "private": {
                        "eventTypeID": payload.EventTypeID
                    }
                }
            }
            if (payload.extendedProperties) {
cf86e9a3   Apichat.Tum   - ui with oauth2 ...
260
                buildPayload.extendedProperties = payload.extendedProperties
77034810   Apichat.Tum   fix REST API
261
262
263
264
265
266
267
268
            }
        } catch (error) {
            console.error(error.message)
        } finally {
            return buildPayload
        }
    }
}
fbe7f7a7   Apichat.Tum   add api google

77034810   Apichat.Tum   fix REST API

fbe7f7a7   Apichat.Tum   add api google

77034810   Apichat.Tum   fix REST API

fbe7f7a7   Apichat.Tum   add api google

77034810   Apichat.Tum   fix REST API

fbe7f7a7   Apichat.Tum   add api google

cf86e9a3   Apichat.Tum   - ui with oauth2 ...

77034810   Apichat.Tum   fix REST API

fbe7f7a7   Apichat.Tum   add api google

cf86e9a3   Apichat.Tum   - ui with oauth2 ...

21a1ff19   Apichat.Tum   fix follow smartr...

cf86e9a3   Apichat.Tum   - ui with oauth2 ...

21a1ff19   Apichat.Tum   fix follow smartr...

cf86e9a3   Apichat.Tum   - ui with oauth2 ...

7598c58f   Apichat.Tum   add eventTypeID /...

1244ae71   Apichat.Tum   new response

cf86e9a3   Apichat.Tum   - ui with oauth2 ...

a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API

cf86e9a3   Apichat.Tum   - ui with oauth2 ...

a54f2679   DESKTOP-RBJDHSM\ADMIN   fix API

fbe7f7a7   Apichat.Tum   add api google

f3f14fef   TUM.Apichat   add value config ...

fbe7f7a7   Apichat.Tum   add api google

f6a4415a   Apichat.Tum   start smart-rms-c...

fbe7f7a7   Apichat.Tum   add api google