diff --git a/app/controllers/home.controller.js b/app/controllers/home.controller.js index ee5c993..c80e107 100644 --- a/app/controllers/home.controller.js +++ b/app/controllers/home.controller.js @@ -1,5 +1,5 @@ -"use strict" -var console = process.console +"use strict"; +var console = process.console; var yamlConfig = require('node-yaml-config') var path = require('path') var async = require('async') @@ -90,7 +90,7 @@ function index(req, res) { } else { rms._20000(authUrl) } - }) + }); } function setToken(req, res) { @@ -109,11 +109,18 @@ function setToken(req, res) { function events(req, res) { var rms = new rmsRes(res) - + console.tag().time().file().log(req.body) lib.authorize((err, auth, authUrl) => { if (err) { rms._50000(err) } else { + lib.listCalendar(auth, (err, response) => { + if (err) { + console.error(err); + } else { + console.info(response); + } + }) lib.listEvents(auth, (err, response) => { if (err) { if (authUrl) { @@ -123,9 +130,8 @@ function events(req, res) { rms._50000(err) } } else { - // console.tag().time().file().info(response) - res.jsonp(ggToKendo(response)) - res.end() + res.json(ggToKendo(response)); + res.end(); } }) } @@ -168,7 +174,8 @@ function oauth2callback(req, res) { if (err) { rms._50000(err) } else { - res.redirect('http://localhost:3030/home') + + res.redirect('http://localhost:8000/#!/calendar') } }) } @@ -244,11 +251,93 @@ function checkObjEmpty(obj, parm, name) { } -module.exports.index = index -module.exports.events = events -module.exports.eventCreate = eventCreate -module.exports.eventUpdate = eventUpdate -module.exports.eventDelete = eventDelete -module.exports.home = home -module.exports.setToken = setToken -module.exports.oauth2callback = oauth2callback \ No newline at end of file +function createCalendar(req, res) { + var rms = new rmsRes(res) + let options = {}; + lib.authorize((err, auth) => { + if (err) { + rms._50000(err) + } else { + options.auth = auth; + options.summary = req.body.summary; + lib.createCalendar(options, (err, result) => { + if (err) { + rms._50000(err) + } else { + rms._20000(result) + } + }) + } + }) +} + +function getCalendar(req, res) { + var rms = new rmsRes(res); + + lib.authorize((err, auth) => { + if (err) { + rms._50000(err) + } else { + lib.getCalendar(auth, (err, response) => { + if (err) { + rms._50000(err) + } else { + rms._20000(response) + } + }) + } + }) +} + +function deleteCalendar(req, res) { + var rms = new rmsRes(res); + var options = {}; + lib.authorize((err, auth) => { + if (err) { + rms._50000(err) + } else { + options.auth = auth; + options.calendarId = req.body.id; + lib.deleteCalendar(options, (err, response) => { + if (err) { + rms._50000(err) + } else { + rms._20000(response) + } + }) + } + }) +} + +function refreshToken(req, res) { + var rms = new rmsRes(res); + + lib.authorize((err, auth) => { + if (err) { + rms._50000(err) + } else { + options.auth = auth; + lib.refreshToken(options, (err, response) => { + if (err) { + rms._50000(err) + } else { + rms._20000(response) + } + }) + } + }) +} + +module.exports.index = index; +module.exports.events = events; +module.exports.eventCreate = eventCreate; +module.exports.eventUpdate = eventUpdate; +module.exports.eventDelete = eventDelete; +module.exports.home = home; +module.exports.setToken = setToken; +module.exports.oauth2callback = oauth2callback; +module.exports.createCalendar = createCalendar; +module.exports.getCalendar = getCalendar; +module.exports.deleteCalendar = deleteCalendar; +module.exports.refreshToken = refreshToken; + diff --git a/app/lib/index.js b/app/lib/index.js index 78ee263..7bcc3db 100644 --- a/app/lib/index.js +++ b/app/lib/index.js @@ -12,10 +12,22 @@ const moment = require('moment') const Promise = require('bluebird') const Mongoose = Promise.promisifyAll(require('mongoose')); const Token = Mongoose.model('Token'); - -const CALENDAR_ID = config.ggapi.calendarID -const REDIRECTURL = config.ggapi.redirectUrl - +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; + +/** + * เรียกใช้ oauth2Client + * @type {GoogleAuth} + */ +const auth = google.auth.OAuth2; +const oauth2Client = new auth(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL); const SCOPES = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/userinfo.email']; const TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE) + '/.credentials/'; @@ -80,102 +92,80 @@ function storeToken(token, emails) { module.exports = { authorize: (callback) => { - - fs.readFile('client_secret.json', (err, content) => { - if (err) return callback(err); - - let credentials = JSON.parse(content); - var clientSecret = credentials.installed.client_secret; - 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); - var setToken = {} // set token from callback - Token.findOne({ - email: 'tzbattleboy@gmail.com' - }, function (err, token) { - 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)); - } - }); - // fs.readFile(TOKEN_PATH, (err, token) => { - - // }); + var setToken = {} // set token from callback + Token.findOne({ + email: 'zentoriono@gmail.com' + }, function (err, token) { + 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)); + } }); }, setNewToken: (code, callback) => { - fs.readFile('client_secret.json', (err, content) => { - if (err) return callback(err); - - let credentials = JSON.parse(content); - var clientSecret = credentials.installed.client_secret; - 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); - - Token.findOne({ - email: 'tzbattleboy@gmail.com' - }, function (err, token) { - 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); - } - - }) - } - }); + Token.findOne({ + email: 'zentoriono@gmail.com' + }, function (err, token) { + 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); + } - // fs.readFile(TOKEN_PATH, (err, token) => { - // if (err) { + }) + } + }); + }, - // } else { + listCalendar: (auth, callback) => { + calendar.calendarList.list({ + auth: auth, + minAccessRole: 'owner' + }, (err, response) => { + if (err) return callback(err); - // } - // }); + return callback(null, response); }); }, listEvents: (auth, callback) => { calendar.events.list({ auth: auth, - calendarId: CALENDAR_ID || 'primary', + calendarId: CALENDAR_ID || 'primary', //CALENDAR_ID || 'primary' maxResults: 50, singleEvents: true, orderBy: 'startTime' @@ -279,21 +269,26 @@ module.exports = { } }, + /** + * สร้าง JSON สำหรับส่งไปอัพเดตข้อมูล event ปฏิทิน + * @param payload + * @returns {{}} + */ updateBuilder: (payload) => { - var buildPayload = {} + var buildPayload = {}; try { - buildPayload.calendarId = CALENDAR_ID - buildPayload.eventId = payload.TaskID - buildPayload.summary = payload.Title - buildPayload.description = payload.Description + buildPayload.calendarId = CALENDAR_ID; + buildPayload.eventId = payload.TaskID; + buildPayload.summary = payload.Title; + buildPayload.description = payload.Description; buildPayload.start = { dateTime: moment(payload.Start).format("YYYY-MM-DDTHH:mm:ssZ"), timeZone: hasTimezone(payload.StartTimezone) - } + }; buildPayload.end = { dateTime: moment(payload.End).format("YYYY-MM-DDTHH:mm:ssZ"), timeZone: hasTimezone(payload.EndTimezone) - } + }; if (payload.email) { buildPayload.attendees = [{ email: payload.email @@ -326,5 +321,70 @@ module.exports = { } finally { return buildPayload } + }, + + /** + * 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); + oauth2Client.refreshAccessToken(function(err, tokens) { + // 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); + }); } -} \ No newline at end of file + + +}; diff --git a/app/routes/home.routes.js b/app/routes/home.routes.js index 53b76ca..e71fca0 100644 --- a/app/routes/home.routes.js +++ b/app/routes/home.routes.js @@ -1,16 +1,21 @@ // var console = process.console -var express = require('express') -var router = express.Router() -var home = require('../controllers/home.controller') +var express = require('express'); +var router = express.Router(); +var home = require('../controllers/home.controller'); -router.get('/', home.home) -router.get('/home', home.home) +router.get('/', home.home); +router.get('/home', home.home); -router.get('/events', home.events) -router.post('/events', home.eventCreate) -router.put('/events', home.eventUpdate) -router.delete('/events', home.eventDelete) -router.post('/setToken', home.setToken) -router.get('/oauth2callback', home.oauth2callback) +router.get('/events', home.events); +router.post('/events', home.eventCreate); +router.put('/events', home.eventUpdate); +router.delete('/events', home.eventDelete); +router.post('/setToken', home.setToken); +router.get('/oauth2callback', home.oauth2callback); -module.exports = router \ No newline at end of file +router.post('/calendars', home.createCalendar); +router.get('/calendars', home.getCalendar); +router.delete('/calendars', home.deleteCalendar); + +router.get('/refresh-token', home.refreshToken); +module.exports = router; diff --git a/config/config.yml b/config/config.yml index 5253081..5b3af15 100644 --- a/config/config.yml +++ b/config/config.yml @@ -15,6 +15,12 @@ localhost: pass: timerecheck: '10000' #millisecond apitimeout: 3000 #millisecond - ggapi: - calendarID: 'rvmbg3kg7uqninf7n3au1ku4mc@group.calendar.google.com' - redirectUrl: 'http://localhost:3030/oauth2callback' \ No newline at end of file + google: + calendar_id: 'rvmbg3kg7uqninf7n3au1ku4mc@group.calendar.google.com' + redirect_url: 'http://localhost:3030/oauth2callback' + client_id: "16634359544-7crvssfmpmtp0ng3jbipms65ccl9aol1.apps.googleusercontent.com" + project_id: "psyched-garage-146109" + auth_uri: "https://accounts.google.com/o/oauth2/auth" + token_uri: "https://accounts.google.com/o/oauth2/token" + auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs" + client_secret: "lpIa_7Wwbang6jTypMfCpOR6" -- libgit2 0.21.2