Skip to content

Commit

Permalink
0.2.0
Browse files Browse the repository at this point in the history
- Added default mongoose/schemas
- Added foundation for Facebook signin
- added connect-flash for messaging
  • Loading branch information
framerate committed Mar 25, 2014
1 parent 8354a96 commit 527e930
Show file tree
Hide file tree
Showing 12 changed files with 201 additions and 27 deletions.
27 changes: 24 additions & 3 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,34 @@
'use strict';

// third-party requires
var mongoose = require('mongoose');
var express = require('express');

var passport = require('passport');
var flash = require('connect-flash');
var app = express();

// internal requires
var config = require('./config.json');

// express settings
app.set('views', 'views');
app.set('view engine', 'ejs');
app.use(express.static('static'));
app.use(express.cookieParser('moooooooo!'));
app.use(express.session({ key: 'sid', cookie: { maxAge: 60000 }}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());

app.locals.message = '';

// connect to the local database
mongoose.connect(config.database.ip, config.database.name);

// setup routes
require('./lib/routes')(app);
console.log('Server Listening on port 3000');
app.listen(3000);

// Output is important for grunt to know the
// server has started
app.listen(config.server.port);
console.log(config.project.name + ' listening on port ' + config.server.port);
21 changes: 21 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"project": {
"name": "scltemplates"
},
"database": {
"name": "scltemplates",
"ip": "127.0.0.1"
},

"server": {
"port": 3000
},

"social": {
"facebook": {
"appId": "768637973146375",
"appSecret": "dc55621a5e56045b7c0aed8efd1a04aa"
}

}
}
31 changes: 29 additions & 2 deletions lib/routes.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,36 @@
'use strict';
var setupFacebook = require('./setupFacebook.js');

function requireAuth(req, res, next) {
if (req.isAuthenticated()) {
next();
}
else {
req.flash('info', 'You must be logged in to do that!');
res.redirect('/');
}
}

module.exports = function(app)
{
// setup facbeook login
setupFacebook(app);

// index/root view
app.get('/', function(req, res) {
// index view.
res.render('index.ejs', {text: 'Hello World'});
// console./log(req.flash('info')[0]);
res.render('index.ejs', {message: req.flash('info')[0]});
});

// logout to clear the sessions
app.get('/logout', function(req, res) {

req.session = null;
res.redirect('/');
});

// restricted "home" view
app.get('/home', requireAuth, function(req, res){
res.render('home.ejs');
});
};
21 changes: 21 additions & 0 deletions lib/schemas.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
'use strict';

var mongoose = require('mongoose');

var userSchema = mongoose.Schema({
'version': {
type: Number,
default: 1
},
'username': String,
'email': String,
'realName': String,
'facebookId': String,
'joinDate': Date
});

var User = mongoose.model('user', userSchema);

module.exports = {
User: User
};
65 changes: 65 additions & 0 deletions lib/setupFacebook.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
'use strict';
var passport = require('passport');
var FacebookStrategy = require('passport-facebook').Strategy;
var User = require('./schemas.js').User;
var config = require('../config.json');

// function createFacebookPhotoUrl(facebookId) {
// return 'https://graph.facebook.com/' + facebookId + '/picture';
// }


module.exports = function(app) {
// routes:
app.get('/auth/facebook', passport.authenticate('facebook', {
scope: 'email'
}));

app.get('/auth/facebook/callback', passport.authenticate('facebook', {
failureRedirect: '/',
successRedirect: '/home'
}));

// passport stuff
passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
if (err) {
done(err);
}
if (user) {
done(null, user);
}
});
});

passport.use(new FacebookStrategy({
clientID: config.social.facebook.appId,
clientSecret: config.social.facebook.appSecret,
callbackURL: '/auth/facebook/callback',
profileFields: ['id', 'displayName', 'photos', 'emails', 'username', 'name']
},
function(accessToken, refreshToken, profile, done) {
User.findOne({
email: profile.emails[0].value
}, function(err, user) {
if (user) {
done(null, user);
}
else {
new User({
'username': '',
'email': profile.emails[0].value,
'realName': profile.displayName,
'facebookId': profile.id,
joinDate: new Date()
}).save(function(err, newUser) {
done(null, newUser);
});
}
});
}));
};
29 changes: 16 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,22 @@
"express": "~3.4.8",
"ejs": "~0.8.5",
"mongoose": "~3.8.8",
"underscore": "~1.6.0"
"underscore": "~1.6.0",
"passport": "^0.2.0",
"passport-facebook": "^1.0.3",
"connect-flash": "^0.1.1"
},
"version": "0.1.0",
"version": "0.2.0",
"devDependencies": {
"grunt": "~0.4.2",
"grunt-contrib-uglify": "~0.4.0",
"grunt-contrib-jshint": "~0.8.0",
"grunt-notify": "~0.2.17",
"grunt-bower": "~0.9.0",
"grunt-jsbeautifier": "~0.2.6",
"load-grunt-tasks": "~0.4.0",
"grunt-express-server": "~0.4.13",
"grunt-contrib-watch": "~0.5.3",
"grunt-contrib-cssmin": "~0.9.0"
}
"grunt": "~0.4.2",
"grunt-contrib-uglify": "~0.4.0",
"grunt-contrib-jshint": "~0.8.0",
"grunt-notify": "~0.2.17",
"grunt-bower": "~0.9.0",
"grunt-jsbeautifier": "~0.2.6",
"load-grunt-tasks": "~0.4.0",
"grunt-express-server": "~0.4.13",
"grunt-contrib-watch": "~0.5.3",
"grunt-contrib-cssmin": "~0.9.0"
}
}
4 changes: 2 additions & 2 deletions static/css/scl.min.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion static/js/scl.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions static/js/vendor.min.js

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions views/home.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<% include layout/top %>

<div class="container"><a href="/logout">Logout</a></div>
<% include layout/bottom %>
6 changes: 6 additions & 0 deletions views/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
<i class="fa fa-heart fa-3x"></i> <i class="fa fa-code fa-3x"></i>
</div>


<div class="alert alert-success"><strong>Moo!</strong> - Everything should be loaded, if you see this box rendered properly!</div>
<div class="row">
<div class="col-md-12">
<a href="/auth/facebook">Sign in with Facebook</a>
</div>
</div>
</div>
<% include layout/bottom %>
6 changes: 6 additions & 0 deletions views/layout/top.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,9 @@
<link href="/css/scl.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
<% if (message) { %>
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<strong>Oops!</strong> <%= message %>
</div>
<% } %>

0 comments on commit 527e930

Please sign in to comment.