Repository navigation
Expand file tree
/
Copy pathserver.js
More file actions
122 lines (109 loc) · 3.22 KB
/
Copy pathserver.js
File metadata and controls
122 lines (109 loc) · 3.22 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
const express = require('express');
const app = express();
const session = require('express-session');
const FileStore = require('session-file-store')(session);
const path = require('path');
const port = process.env.PORT || 8080;
const os = require('os');
const ifaces = os.networkInterfaces();
const authService = require('./API/session-minder.auth');
const connectDB = require('./DB/Connection');
const User = require('./DB/models/User');
const SurveyRouter = require('./API/Survey');
const FeedbackRouter = require('./API/Feedback');
const DashboardRouter = require('./API/Dashboard');
let cookieId;
require('dotenv').config();
cookieId = process.env.COOKIE_SECRET
/**
* Get IPv4 Address of the System
*/
const getIPV4 = () => {
let ipv4Address;
Object.keys(ifaces).forEach(function (ifname) {
ifaces[ifname].forEach(function (iface) {
if ('IPv4' !== iface.family || iface.internal !== false) {
return;
}
ipv4Address = iface.address;
});
});
return ipv4Address;
}
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, '')));
app.use(express.json());
app.use(session({
store: new FileStore({}),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
rolling: true,
cookie: {
expires: 60000 * 5,
sameSite: true
},
name: cookieId
}));
sessionCheck = (req, res, next) => {
if (req.session.user) {
next();
} else {
res.sendStatus(401);
}
};
app.use('/survey', sessionCheck, SurveyRouter);
app.use('/feedback', FeedbackRouter);
app.use('/dashboard', sessionCheck, DashboardRouter);
app.get('/web-uri', (req, res) => {
res.end(uri);
});
app.post('/sign-in', async (req, response) => {
if (!req.session.user) {
const verifiedUSer = await authService.verify(req.body.token);
console.info(`User verified from Authservice!`);
req.session.user = verifiedUSer;
}
let mongoUser = await User.findOne({ email: req.session.user.email });
if (!mongoUser) {
console.log('Creating record for ' + req.session.user.name);
let newUSer = new User({
email: req.session.user.email,
userid: req.session.user.id
});
mongoUser = await newUSer.save();
}
req.session.user.id = mongoUser._id;
response.send(req.session.user);
});
app.get('/sign-out', (req, res) => {
req.session.destroy((err) => {
if (err) {
console.error(err);
} else {
res.clearCookie(cookieId);
res.sendStatus(200);
}
});
});
app.get('/*', (req, res) => {
const destPath = path.join(__dirname, 'index.html');
res.sendFile(destPath);
});
/**
* Starts the express server
*
* @param {boolean} [isLocal] - This parameter is optional.
* It is used to determine if the uri:port is displayed in console once
* the application is up
*/
const runServer = async () => {
console.log(`=========|> Starting Feefo Server`);
await connectDB();
uri = "http://" + getIPV4() + ":" + port;
app.listen(port, () => {
console.log(`=========|> Server listening on ${uri}`);
});
return uri;
}
runServer();