-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
140 lines (103 loc) · 3.55 KB
/
index.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
/**
* Created by TBS on 12/02/2017.
*/
/*********************************************
* Modules import *
*********************************************/
let http = require('http');
let express = require('express');
let session = require('express-session');
let cors = require('cors');
let mongoose = require('mongoose');
let winston = require('winston');
let bodyParser = require('body-parser');
let cookieParser = require('cookie-parser');
let passport = require('passport');
let LocalStrategy = require('passport-local').Strategy;
let RememberMeStrategy = require('passport-remember-me').Strategy;
let debug = require('debug')('app');
let debug_w = require('debug')('worker');
let MongoStore = require('connect-mongo')(session);
let router = express.Router();
let initRouters = require('./app/routers');
let logger = require("./app/helpers/logger");
let config = require('./config');
let configDB = config.database;
let apiPort = config.infra['qwirk-api'].port;
/*********************************************
* Db connection *
*********************************************/
let sessionStore = new MongoStore({
url: configDB.uri,
collection: 'sessions'
});
mongoose.connect(configDB.uri, configDB.options);
let conn = mongoose.connection;
conn.on('error', function onError(err){
debug('Error with DB connection', err);
});
conn.once('open', function onOpen(){
debug('Mongoose connected');
});
/************************************************
* Passport *
************************************************/
require('./app/config/passport');
/* Fake, in-memory database of remember me tokens */
let tokens = {}
function consumeRememberMeToken(token, fn) {
let uid = tokens[token];
// invalidate the single-use token
delete tokens[token];
return fn(null, uid);
}
function saveRememberMeToken(token, uid, fn) {
tokens[token] = uid;
return fn();
}
// Passport session setup.
// To support persistent login sessions, Passport needs to be able to
// serialize users into and deserialize users out of the session. Typically,
// this will be as simple as storing the user ID when serializing, and finding
// the user by ID when deserializing.
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
findById(id, function (err, user) {
done(err, user);
});
});
/************************************************
* Express *
************************************************/
let app = express();
for (let route in initRouters) {
initRouters[route](router);
}
let server = http.createServer(app);
app.use(cors());
logger.debug("Overriding 'Express' logger");
app.use(require('morgan')("default", { "stream": logger.stream }));
app.use(function setResponseHeader(req, res, next){
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
return next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(passport.initialize());
app.use(router);
// error handlers
// Catch unauthorised errors
app.use(function (err, req, res, next) {
if (err.name === 'UnauthorizedError') {
res.status(401);
res.json({"message" : err.name + ": " + err.message});
}
});
app.listen(apiPort, function listening(){
debug_w('Express server listening on port ' + apiPort);
});
module.exports = server;