var http = require('http') var express = require('express') var passport = require('passport') var logger = require('../../../util/logger') var urlutil = require('../../../util/urlutil') var jwtutil = require('../../../util/jwtutil') var Strategy = require('./strategy') module.exports = function(options) { var log = logger.createLogger('auth-oauth2') , app = express() , server = http.createServer(app) app.set('strict routing', true) app.set('case sensitive routing', true) function verify(accessToken, refreshToken, profile, done) { done(null, profile) } passport.use(new Strategy(options.oauth, verify)) app.use(passport.initialize()) app.use(passport.authenticate('oauth2', { failureRedirect: '/auth/oauth/' , session: false })) app.get( '/auth/oauth/callback' , function(req, res) { if (req.user.email) { res.redirect(urlutil.addParams(options.appUrl, { jwt: jwtutil.encode({ payload: { email: req.user.email , name: req.user.email.split('@', 1).join('') } , secret: options.secret , header: { exp: Date.now() + 24 * 3600 } }) })) } else { log.warn('Missing email in profile', req.user) res.redirect('/auth/oauth/') } } ) server.listen(options.port) log.info('Listening on port %d', options.port) }