This repository has been archived by the owner on Jun 21, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
167 lines (152 loc) · 4.82 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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//load packages
var express = require('express'),
bodyParser = require('body-parser'),
app = express(),
path = require('path'),
http = require('http').Server(app),
session = require('express-session'),
FileStore = require('session-file-store')(session),
multer = require('multer'),
mysql = require('mysql'),
hbs = require('hbs'),
cookieParser = require('cookie-parser'),
myConnection = require('express-myconnection'),
//own modules
generateUUID = require('./modules/generateUUID.js'),
//get files for routes for not loged in
index = require('./routes/index'),
// get files for login
userAcounts = require('./routes/users/users'),
//get files for admin
dashboard = require('./routes/admin/index'),
displaysAdmin = require('./routes/admin/displays/index'),
content = require('./routes/admin/content/index'),
slideshows = require('./routes/admin/slideshows/index'),
display = require('./routes/display/index'),
users = require('./routes/admin/users/index'),
api = require('./routes/api/index');
//import config
require('./config/config.js')({
key: 'pinpoint',
port: 3010,
base: '/'
});
// inport libs
require('./lib/hsbHelper.js'); //register hbs helpers
require('./lib/socketConnection.js')(http); //starting web socket
//set vieuw enging
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
hbs.registerPartials(__dirname + '/views/partials');
//define body parser
app.use(bodyParser.urlencoded({
extended: false
})); //set body parser for the post requests
app.use(bodyParser.json()); //create json from body
//define cookies
app.use(cookieParser()); //enable cookies
app.use('/', function(req, res, next) { //add a cookie that the page is loaded once for the style
res.cookie('style', 'true', {
maxAge: 90000,
httpOnly: true
});
next();
});
//define static paths
app.use(express.static(path.join(__dirname, 'public/dist')));
app.use('/download', express.static(path.join(__dirname, 'uploads')));
//dont serve on / and '' the same content but redirect for search engine
app.use(function(req, res, next) {
if (req.url.substr(-1) == '/' && req.url.length > 1) {
res.redirect(301, req.url.slice(0, -1));
} else {
next(); //go to next functiton
}
});
// Add session support
app.use(session({
secret: config.session.secret,
genid: function(req) {
return generateUUID() // use UUIDs for session IDs
},
store: new FileStore(), //store the session in a file
saveUninitialized: true,
resave: false
}));
// Setup Multer to accept uploads
app.use(multer({
dest: './uploads/',
// If file that is to be uploaded is not an image don't upload
onFileUploadStart: function(file) {
if (file.mimetype.indexOf('image') === -1) {
return false;
}
}
}));
//connection database
var dbOptions = {
host: config.dbOptions.host,
user: config.dbOptions.user,
password: config.dbOptions.password,
database: config.dbOptions.database,
port: config.dbOptions.port
};
// Add connection middleware
app.use(myConnection(mysql, dbOptions, 'single'));
//check if the user is loged in others redirect to the login page
app.use('/admin', function(req, res, next) {
var userId = req.session.user_id;
var role = req.session.role;
//set all roles to false
req.admin = false;
req.editor = false;
if (userId === null || userId === undefined) { //check if a user id is set if not go to the login page
res.redirect('/users/login');
} else {
req.userId = userId; //set the user id
if (role === 'admin') { //set the rigths of the user
req.admin = true;
req.editor = true;
} else if (role === 'editor') {
req.editor = true;
}
next(); //go to the route
}
});
//use routes
app.use('/', index);
// get files for login
app.use('/users', userAcounts);
//get files for admin
app.use('/admin', dashboard);
app.use('/admin/displays', displaysAdmin);
app.use('/admin/content', content);
app.use('/admin/slideshows', slideshows);
app.use('/admin/users', users);
//get files for slidewhows
app.use('/display', display);
app.use('/api', api);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
res.status(err.status || 404);
res.render('error', {
errornumber: err.status,
message: err.message,
error: {}
});
});
// error handlers
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
http.listen(config.app.port, function() {
console.log('listening on *:' + config.app.port);
});