-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.js
145 lines (111 loc) · 4.13 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
/**
* Web Atelier 2021 Final Project : DoX
*
* Main Server Application
*
*/
// require framework and middleware dependencies
const express = require('express');
const path = require('path');
const logger = require('morgan');
const methodOverride = require('method-override');
const fileUpload = require('express-fileupload');
// Application config import
const {webserver, cookie} = require('./config/config.js')
const crypto = require("crypto");
const { xss } = require('express-xss-sanitizer');
var setDomain = require('express-set-domain');
// Passport and Express-Session library
const passport = require('passport');
const session = require('express-session');
// Passport strategies for authentication
const passportStrategies = require('./modules/auth_strategies.js');
//Import the secondary "Strategy" library
const LocalStrategy = require('passport-local').Strategy;
// Custom middleware authentication and flash message view middleware
const flash = require('connect-flash');
const serve_auth_info_toViews = require('./modules/auth_middleware/auth_info_views_middleware.js')
/////////////////////////////////////////////////////////////////////////////////////
// INIT framework
const app = express();
app.use(webserver.rate.generic_limiter)
app.use(logger('dev'));
app.use(xss()) // Parses req attributes to make sure they can't be considered part of an XSS attack
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.urlencoded({extended: false})); // parse application/x-www-form-urlencoded
app.use(express.json()); // parse application/json
app.use(methodOverride('_method'));
app.use(fileUpload());
require('./ejs-compile.js')
app.set('view engine', 'ejs');
// INIT session
app.sessionMid = session({
secret: crypto.randomBytes(20).toString('hex'), // Regenerates the secret key everytime and therefore invalidates the previous stored cookies
name: cookie.name,
resave: false,
saveUninitialized: true,
cookie: {
httpOnly: true,
expires: cookie.expires
}
})
app.set('trust proxy', 1)
app.use(app.sessionMid);
// INIT passport on every route call.
app.use(passport.initialize());
// allow passport to use "express-session".
app.use(passport.session());
// log-in
passport.use('local-login', new LocalStrategy(passportStrategies.authUser))
// register
passport.use('local-signup',
new LocalStrategy(
{passReqToCallback: true}, // we pass the re to the callback to be able to read the email (req.body.email)
passportStrategies.registerUser)
);
// attach the {authenticate_user} to req.session.passport.user.{authenticated_user}
passport.serializeUser((userObj, done) => {
done(null, userObj)
})
// get the {authenticated_user} for the session from "req.session.passport.user.{authenticated_user}, and attach it to req.user.{authenticated_user}
passport.deserializeUser((userObj, done) => {
done(null, userObj)
})
// flash messages
app.use(flash());
// Custom middleware authentication and flash message view middleware
app.use(serve_auth_info_toViews);
/////////////////////////////////////////////////////////////////////////////////////
// CONTROLLERS
//this will automatically load all routers found in the routes folder
const routers = require('./routes');
const {Step} = require("prosemirror-transform");
app.use('/auth', routers.router_auth);
app.use('/', routers.root);
// Static folders
app.use('/', express.static('public'));
//default fallback handlers
// catch 404 and forward to error handler
app.use(function (req, res, next) {
const err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.json({
message: err.message,
error: err
});
});
/////////////////////////////////////////////////////////////////////////////////////
// Start server
app.set('port', webserver.listen_port)
const server = require('http').createServer(app);
server.on('listening', function () {
console.log(`Express server listening on port ${server.address().port}`);
});
module.exports = app