diff --git a/.gitignore b/.gitignore index a865156..6e91d34 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules *.swo data *.DS_Store +.env diff --git a/config.js b/config.js index d6fbd3d..ce02df5 100644 --- a/config.js +++ b/config.js @@ -1,6 +1,5 @@ { - "host": "0.0.0.0", "port": 7777, "keyLength": 10, diff --git a/package.json b/package.json index 02dbd52..fc8b6c9 100644 --- a/package.json +++ b/package.json @@ -14,16 +14,21 @@ }, "main": "haste", "dependencies": { - "connect-ratelimit": "0.0.7", - "connect-route": "0.1.5", - "connect": "3.4.1", - "st": "1.1.0", - "winston": "0.6.2", - "redis-url": "0.1.0", - "redis": "0.8.1", - "uglify-js": "1.3.3", "busboy": "0.2.4", - "pg": "4.1.1" + "connect": "3.4.1", + "connect-ensure-login": "^0.1.1", + "connect-query": "^0.2.0", + "connect-ratelimit": "0.0.7", + "connect-redirection": "0.0.1", + "connect-route": "0.1.5", + "dotenv": "^4.0.0", + "nodemon": "^1.11.0", + "pg": "4.1.1", + "redis": "0.8.1", + "redis-url": "0.1.0", + "st": "1.1.0", + "uglify-js": "1.3.3", + "winston": "0.6.2" }, "devDependencies": { "mocha": "*", @@ -49,6 +54,7 @@ }, "scripts": { "start": "node server.js", + "start:dev": "nodemon -V --ignore 'data/*' --ignore 'Profile' --ignore 'static/application.min.js' server.js ", "test": "mocha -r should spec/*" } } diff --git a/server.js b/server.js index 2e138f2..2b12c9b 100644 --- a/server.js +++ b/server.js @@ -7,15 +7,21 @@ var connect = require('connect'); var route = require('connect-route'); var connect_st = require('st'); var connect_rate_limit = require('connect-ratelimit'); +var passport = require('passport'); +var redirect = require('connect-redirection'); +var query = require('connect-query'); + +require('dotenv').config(); var DocumentHandler = require('./lib/document_handler'); // Load the configuration and set some defaults var config = JSON.parse(fs.readFileSync('./config.js', 'utf8')); config.port = process.env.PORT || config.port || 7777; config.host = process.env.HOST || config.host || 'localhost'; +config.origin = 'http://' + config.host + ":" + config.port + "/"; -// Set up the logger +// Set up the loggergg if (config.logging) { try { winston.remove(winston.transports.Console); @@ -103,16 +109,50 @@ var documentHandler = new DocumentHandler({ }); var app = connect(); - +app.use(redirect()); +app.use(query()); // Rate limit all requests if (config.rateLimits) { config.rateLimits.end = true; app.use(connect_rate_limit(config.rateLimits)); } +var GoogleStrategy = require('passport-google-oauth20').Strategy; + +// and deserialized. +passport.serializeUser(function(user, cb) { + cb(null, user); +}); + +passport.deserializeUser(function(obj, cb) { + cb(null, obj); +}); +passport.use(new GoogleStrategy({ + clientID: process.env.GOOGLE_CLIENT_ID, + clientSecret: process.env.GOOGLE_CLIENT_SECRET, + callbackURL: config.origin + 'auth/google/callback' + }, + function(accessToken, refreshToken, profile, cb) { + winston.info('hi logged in') + winston.info(profile); + return cb(null, profile); + } +)); + // first look at API calls +app.use(passport.initialize()); +app.use(passport.session()); + app.use(route(function(router) { // get raw documents - support getting with extension + router.get('/', require('connect-ensure-login').ensureLoggedIn()); + router.get('/login', passport.authenticate('google', { scope: ['profile'] })); + + router.get( '/auth/google/callback', + passport.authenticate( 'google', { scope: ['profile'], + successRedirect: '/loggedin', + failureRedirect: '/auth/failure' + })); router.get('/raw/:id', function(request, response, next) { var skipExpire = !!config.documents[request.params.id]; var key = request.params.id.split('.')[0];