-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
154 lines (136 loc) · 4.47 KB
/
Copy pathapp.js
File metadata and controls
154 lines (136 loc) · 4.47 KB
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
147
148
149
150
151
152
153
154
/**
* Module dependencies.
*/
var express = require('express')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy
, MongoStore = require('connect-mongodb')
, mongodb = require('mongodb')
, mongoose = require('mongoose')
, createUser = require('./schemas/user')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, conf = require('./conf')
, User;
User = createUser(mongoose);
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(passport.initialize());
app.use(passport.session({
maxAge: new Date(Date.now() + 3600000),
store: new MongoStore(
{
db: mongodb.Db(
conf.mongodbName,
new mongodb.Server(
'localhost',
27017,
{
auto_reconnect: true,
native_parser: true
}
),
{
journal: true
}
)
},
function(error) {
if(error) {
return console.error('Failed connecting mongostore for storing session data. %s', error.stack);
}
return console.log('Connected mongostore for storing session data');
}
)
}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
console.log('Connecting to MongoDB database');
mongoose.connect(conf.mongodbURL, function (error) {
if(error) {
console.error('Could not connect to MongoDB database. Exiting. %s', error.stack);
return process.exit(1);
}
return console.log('Connected Mongoose to MongoDB database');
});
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
console.log('user %s attempting to authenticated', email);
return User.findOne({email:email}, function(error, user) {
if(error) {
console.error('Failed saving user %s. %s', user.id, error.stack);
return done(error);
}
if(!user) {
return done(null, false);
}
console.log('user %s logged in successfully', user.id);
return done(null, { //passed to callback of passport.serializeUser
id : user.id
});
});
}
));
passport.serializeUser(function(user, done) {
return done(null, user.id); //this is the 'user' property saved in req.session.passport.user
});
passport.deserializeUser(function (id, done) {
return User.findOne({ id: id }, function (error, user) {
return done(error, user);
});
});
app.configure('development', function(){
app.use(express.errorHandler());
});
app.post('/login', function(req, res, next) {
console.log('/login');
next();
}, passport.authenticate('local', {
successRedirect : '/json/login/success',
failureRedirect : '/json/login/failure'
}));
app.post('/json/logout', function(req, res) {
console.log('/json/logout');
req.logout();
return res.send(200);
});
app.get('/json/login/success', function(req, res) {
console.log('/json/login/success');
return User.findOne({id : req.session.passport.user }, function(error, user) {
var props;
if(error) {
console.error('Failed finding user %s. %s', req.session.passport.user, error.stack);
return res.send(500);
}
if(!user) {
console.error('Could not find user %s', req.session.passport.user);
return res.send(404);
}
return res.send(200);
});
});
app.get('/json/login/failure', function(req, res) {
console.log('/json/login/failure');
return res.send(401);
});
app.get('/', routes.index);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});