google auth

This commit is contained in:
Anthony Metzidis 2017-01-26 14:47:44 -08:00
parent a29d5a3ede
commit 024f13996a
4 changed files with 58 additions and 12 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@ node_modules
*.swo
data
*.DS_Store
.env

View File

@ -1,6 +1,5 @@
{
"host": "0.0.0.0",
"port": 7777,
"keyLength": 10,

View File

@ -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/*"
}
}

View File

@ -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];