|
const express = require('express') |
|
, http = require('http') |
|
, path = require('path') |
|
, cookieParser = require('cookie-parser') |
|
, bodyParser = require('body-parser') |
|
, mongoose = require('mongoose') |
|
, port = 3000 |
|
, Token = require('./token') |
|
, google = require('googleapis') |
|
, clientId = process.env.CLIENT_ID |
|
, clientSecret = process.env.CLIENT_SECRET |
|
, redirectUrl = process.env.DOMAIN_URL + '/create' |
|
, oauth2Client = new google.auth.OAuth2(clientId, clientSecret, redirectUrl) |
|
, authConfig = { |
|
access_type: 'offline', |
|
scope: [ |
|
'https://www.googleapis.com/auth/plus.me', |
|
'https://www.googleapis.com/auth/calendar', |
|
'https://www.googleapis.com/auth/gmail.modify' |
|
], |
|
approval_prompt: 'force' |
|
} |
|
, app = express(); |
|
|
|
app.set('port', port); |
|
app.set('views', path.join(__dirname)); |
|
app.set('view engine', 'pug'); |
|
app.use(bodyParser.json()); |
|
app.use(bodyParser.urlencoded({ extended: false })); |
|
app.use(cookieParser()); |
|
|
|
app.get('/', (req, res) => { |
|
const url = oauth2Client.generateAuthUrl(authConfig); |
|
|
|
res.send(`<a href="${url}">Click here to login with your Google Account</a>`); |
|
}); |
|
|
|
app.get('/create', (req, res, next) => { |
|
oauth2Client.getToken(req.query.code, (err, tokens) => { |
|
if (err) return next(err); |
|
|
|
oauth2Client.setCredentials(tokens); |
|
const query = { accessToken: tokens['access_token'] }; |
|
const entity = { |
|
accessToken: tokens['access_token'], |
|
refreshToken: tokens['refresh_token'], |
|
expiresAt: new Date(tokens['expiry_date']) |
|
}; |
|
const opts = { upsert: true }; |
|
const cb = (err, info) => { |
|
if (err) next(err); |
|
|
|
Token.findOne((err, token) => (err) ? next(err) : res.send(token)); |
|
}; |
|
|
|
Token.update(query, entity, opts, cb); |
|
}); |
|
}); |
|
|
|
mongoose.connect('mongodb://localhost/gmail-alerts-node'); |
|
|
|
http.createServer(app).listen(port); |
|
console.log(`App up and running on port ${port}`); |
|
|
|
module.exports = app; |