-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
executable file
·146 lines (109 loc) · 3.37 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
var express = require('express'),
passport = require('passport'),
util = require('util'),
LocalStrategy = require('passport-local').Strategy,
User = require('./models/user.js');
var app = module.exports = express();
/**
* Authentication via Passport
*/
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({'username' : username}, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown user: ' + username }); }
if (!user.authenticate(password)) { return done(null, false, { message: 'Invalid password' }); }
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findOne({_id: id}, function(err, user) {
done(err, user);
});
});
// map .renderFile to ".html" files
app.engine('html', require('ejs').renderFile);
// make ".jade" the default
app.set('view engine', 'jade');
// set views for error and 404 pages
app.set('views', __dirname + '/views');
// define a custom res.message() method
// which stores messages in the session
app.response.message = function(msg){
// reference `req.session` via the `this.req` reference
var sess = this.req.session;
// simply add the msg to an array for later
sess.messages = sess.messages || [];
sess.messages.push(msg);
return this;
};
// log
if (!module.parent) app.use(express.logger('dev'));
// serve static files
app.use(express.static(__dirname + '/public'));
// session support
app.use(express.cookieParser('some secret here'));
app.use(express.session());
// parse request bodies (req.body)
app.use(express.bodyParser());
// support _method (PUT in forms etc)
app.use(express.methodOverride());
// expose the "messages" local variable when views are rendered
app.use(function(req, res, next){
var msgs = req.session.messages || [];
// expose "messages" local variable
res.locals.messages = msgs;
// expose "hasMessages"
res.locals.hasMessages = !! msgs.length;
// empty or "flush" the messages so they
// don't build up
req.session.messages = [];
next();
});
var mongoose = require('mongoose');
mongoose.connect('localhost', 'devnology');
// assume "not found" in the error msgs
// is a 404. this is somewhat silly, but
// valid, you can do whatever you like, set
// properties, use instanceof etc.
app.use(function(err, req, res, next){
// treat as 404
if (~err.message.indexOf('not found')) return next();
// log it
console.error(err.stack);
// error page
res.status(500).render('5xx');
});
app.use(passport.initialize());
app.use(passport.session());
/**
* Route definitions
*/
app.get('/login', function(req, res){
res.render('login', { user: req.user, message: req.message });
});
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login', failureFlash: false }),
function(req, res) {
res.redirect(req.session.returnTo);
});
app.all('/event/*',function(req, res, next){
if (req.isAuthenticated()) { return next(); }
req.session.returnTo = req.url;
res.redirect('/login');
});
require('./lib/boot')(app, { verbose: !module.parent });
app.get('/about', function(req, res){
res.render('about', { title: 'About' });
});
/**
* Start webserver
*/
if (!module.parent) {
app.listen(3000);
console.log('\n listening on port 3000\n');
}