-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
125 lines (108 loc) · 3.23 KB
/
server.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
'use strict';
var path = require('path');
var url = require('url');
var express = require('express');
var browserify = require('connect-browserify');
var api = require('./api');
var Session = require('./Session');
var morgan = require('morgan');
var User = require('./User');
var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var _ = require('underscore');
var session = require('express-session')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
var development = process.env.NODE_ENV !== 'production';
function renderApp(req, res, next) {
var document =
'<!doctype html public>\n' +
'<html>\n' +
'<head>\n' +
'<title>Grandeur</title>\n' +
'<link href="/assets/style.css" rel="stylesheet"/>\n' +
'<script>window.__session = <%= session_data %></script>\n' +
'</head>\n' +
'<body>\n' +
' <div id="content" />\n' +
'</body>\n' +
'<script src="/assets/bundle.js"></script>\n' +
'</html>\n';
var path = url.parse(req.url).pathname;
var session = Session.fetchServerSession(req, function(err, session) {
if (err) {
return next(err);
}
var session_data = session ? session.toJSON() : '';
res.send(_.template(document)({session_data: JSON.stringify(session_data)}));
return;
});
}
var app = express();
if (development) {
app.get('/assets/bundle.js',
browserify('./client', {
debug: true,
watch: true
}));
}
var error_handler = function(err, req, res, next) {
};
api.createApi(function (api) {
passport.use(new LocalStrategy(
function(username, password, done) {
var user = User.loginUser(username);
return done(null, user);
/*
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
*/
}));
passport.serializeUser(function(user, done) {
done(null, user.getID());
});
passport.deserializeUser(function(user_id, done) {
var user = User.getUser(user_id);
var err = !user ? new Error('user not found') : null;
done(err, user);
});
var ensureAuthorized = function(req, res, next) {
if (!req.isAuthenticated()) {
var err = new Error('Unauthorized');
err.status = 403;
return next(err);
}
return next();
};
app
.use(cookieParser())
.use(session({ secret: 'lj209nasdnfpvuadsfnvp' }))
.use(bodyParser.urlencoded({ extended: false }))
.use(bodyParser.json())
.use(passport.initialize())
.use(passport.session());
app.post('/login',
passport.authenticate('local', {
failureRedirect: '../login',
failureFlash: false,
}),
function(req, res, next) {
console.log('User', req.user);
res.send({user: req.user, redirect: '/'});
});
app
.use(morgan('short'))
.use('/assets', express.static(path.join(__dirname, 'assets')))
.use('/api', api)
.use(renderApp)
.listen(3000, function() {
console.log('Point your browser at http://localhost:3000');
});
});