aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/config.js25
-rw-r--r--config/express.js60
-rw-r--r--config/passport.js109
3 files changed, 194 insertions, 0 deletions
diff --git a/config/config.js b/config/config.js
new file mode 100644
index 0000000..f932387
--- /dev/null
+++ b/config/config.js
@@ -0,0 +1,25 @@
+var path = require('path')
+ , rootPath = path.normalize(__dirname + '/..');
+
+
+module.exports = {
+ development: {
+ db: 'mongodb://localhost/test',
+ root: rootPath,
+ app: {
+ name: 'Divid'
+ },
+ facebook: {
+ clientID: "504825706245603",
+ clientSecret: "e5ea0faed85d8749cafd38732530ef35",
+ callbackURL: "https://divid.no/auth/facebook/callback"
+ }
+ twitter: {
+ clientID: "CONSUMER KEY",
+ clientSecret: "CONSUMER SECRET",
+ callbackURL: "https://divid.no/auth/twitter/callback"
+ }
+ }
+}
+
+
diff --git a/config/express.js b/config/express.js
new file mode 100644
index 0000000..4afd827
--- /dev/null
+++ b/config/express.js
@@ -0,0 +1,60 @@
+
+/**
+ * Module dependencies
+ */
+
+var express = require('express');
+
+
+/**
+ * Module
+ */
+
+module.exports = function (app, config, passport) {
+
+ //sets view engine and path
+ app.set('views', config.root + '/views');
+ app.set('view engine', 'ejs');
+
+ app.use(express.static(config.root + '/public'));
+
+ // don't use logger for test enc
+ if (process.env.NODE_ENV !== 'test') app.use(express.logger('dev'));
+
+
+ app.configure(function () {
+
+ app.use(express.cookieParser()); //must be above sessions
+
+ app.use(express.bodyParser()); //must be above methodOverride
+
+ app.use(express.methodOverride());
+
+ app.use(express.session({ secret: 'lsdrghoi4hgqio42nqf2uqi32f3bilu23fl23b' }));
+
+ // use passport session
+ app.use(passport.initialize());
+ app.use(passport.session());
+
+ app.use(express.favicon(__dirname + '/public/faviconb.ico'));
+
+ // use LESS for CSS
+ app.use(require('less-middleware')({ src: config.root + '/public' }));
+
+ app.use(app.router);
+
+ app.use(function(err, req, res, next) {
+ if (~err.message.indexOf('not fount')) return next(); // treat like 404
+
+ console.error(err.stack);
+
+ res.status(500).render('500', { error: err.stack }); // render page
+ });
+
+ app.use(function(req, res, next) {
+ res.status(404).render('404', { url: req.originalUrl, error: 'Not found' }); // render page
+ });
+ });
+}
+
+
diff --git a/config/passport.js b/config/passport.js
new file mode 100644
index 0000000..9518409
--- /dev/null
+++ b/config/passport.js
@@ -0,0 +1,109 @@
+// dependencies
+var mongoose = require('mongoose')
+ , LocalStrategy = require('passport-local').Strategy
+ , FacebookStrategy = require('passport-facebook').Strategy
+ , TwitterStrategy = require('passport-twitter').Strategy
+ , User = mongoose.model('User');
+
+/**
+ * This is where the magic happends
+ */
+
+module.exports = function (passport, config) {
+
+ // serialize sessions
+ passport.serializeUser( function(user, done) {
+ done(null, user.id);
+ });
+ passport.deserializeUser( function(id, done) {
+ User.findOne({ _id: id }, function(err, user) {
+ done(err, user);
+ });
+ });
+
+
+ /**
+ * Local strategy
+ */
+ passport.use(new LocalStrategy({
+ usernameField: 'email',
+ passwordField: 'password'
+ }, function(email, password, done) {
+
+ // looks up the user in the database, and check if password matches
+ User.findOne({ email: email }, function(err, user) {
+ if (err) return done(err);
+ if (!user) return done(null, false, { message: 'Unknown user' });
+ if (!user.authenticate(password)) return done(null, false, { message: 'Invalid password' });
+ return done(null, user);
+ });
+ }));
+
+
+ /**
+ * Facebook strategy
+ */
+ passport.use(new FacebookStrategy({
+ clientID: config.facebook.clientID
+ , clientSecret: config.facebook.clientSecret
+ , callbackURL: config.facebook.callbackURL
+ }, function(accessToken, refreshToken, profile, done) {
+
+ // looks up the user in the database. Will create the user if it does not exist
+ User.findOne({ 'facebook.id': profile.id }, function(err, user) {
+ if(err) return done(err);
+ if (!user) {
+ user = new User({
+ name: profile.displayName
+ , email: profile.emails[0].value
+ , username: profile.username
+ , provider: 'facebook'
+ , facebook: profile._json
+ });
+ user.save(function(err) {
+ if (err) console.log(err);
+ return done(err, user);
+ });
+ } else {
+ return done(err, user);
+ }
+ });
+ }));
+
+
+ /**
+ * Twitter strategy
+ */
+ passport.use(new TwitterStrategy({
+ consumerKey: config.twitter.clientID
+ , consumerSecret: config.twitter.clientSecret
+ , callbackURL: config.twitter.callbackURL
+ }, function(token, tokenSecret, profile, done) {
+
+ // looks up the user in the database. Will create the user if it does not exist
+ User.findOne({ 'twitter.id': profile.id }, function(err, user) {
+ if (err) return done(err);
+ if (!user) {
+ user = new User({
+ name: profile.displayName
+ , username: profile.username
+ , provider: 'twitter'
+ , twitter: profile._json
+ });
+ user.save(function(err) {
+ if (err) console.log(err);
+ return done(err, user);
+ });
+ } else {
+ return done(err, user);
+ }
+ });
+ }));
+
+
+
+
+
+
+}
+