-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathapp.js
More file actions
executable file
Β·133 lines (119 loc) Β· 3.88 KB
/
app.js
File metadata and controls
executable file
Β·133 lines (119 loc) Β· 3.88 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
123
124
125
126
127
128
129
130
131
132
133
"use strict";
const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const cookieSession = require("cookie-session");
const cors = require("cors");
const Services = {
log: require("./services/logger.service"),
db: require("./services/database.service"),
auth: require("./services/auth.service"),
env: require("./services/env.service")
};
const envLoadResult = Services.env.load(path.join(__dirname, "./.env"));
if (envLoadResult.error) {
Services.log.error(envLoadResult.error);
}
const passport = require("passport");
passport.use("emailAndPass", Services.auth.emailAndPassStrategy);
/* Routes here */
const indexRouter = require("./routes/index");
const accountRouter = require("./routes/api/account");
const authRouter = require("./routes/api/auth");
const hackerRouter = require("./routes/api/hacker");
const teamRouter = require("./routes/api/team");
const travelRouter = require("./routes/api/travel");
const sponsorRouter = require("./routes/api/sponsor");
const searchRouter = require("./routes/api/search");
const settingsRouter = require("./routes/api/settings");
const volunteerRouter = require("./routes/api/volunteer");
const roleRouter = require("./routes/api/role");
const app = express();
Services.db.connect(app);
let corsOptions = {};
if (!Services.env.isProduction()) {
corsOptions = {
origin: [`http://${process.env.FRONTEND_ADDRESS_DEV}`],
credentials: true
};
} else {
// TODO: change this when necessary
corsOptions = {
origin: [
`https://${process.env.FRONTEND_ADDRESS_DEPLOY}`,
`https://${process.env.FRONTEND_ADDRESS_BETA}`,
`https://docs.mchacks.ca`
],
credentials: true
};
}
app.use(cors(corsOptions));
app.use(Services.log.requestLogger);
app.use(Services.log.errorLogger);
app.use(express.json());
app.use(
express.urlencoded({
extended: false
})
);
app.use(cookieParser());
//Cookie-based session tracking
app.use(
cookieSession({
name: "session",
keys: [process.env.COOKIE_SECRET],
// Cookie Options
maxAge: 48 * 60 * 60 * 1000 //Logged in for 48 hours
})
);
app.use(passport.initialize());
app.use(passport.session()); //persistent login session
app.use(express.static(path.join(__dirname, "public")));
var apiRouter = express.Router();
accountRouter.activate(apiRouter);
Services.log.info("Account router activated");
authRouter.activate(apiRouter);
Services.log.info("Auth router activated");
hackerRouter.activate(apiRouter);
Services.log.info("Hacker router activated");
teamRouter.activate(apiRouter);
Services.log.info("Team router activated");
travelRouter.activate(apiRouter);
Services.log.info("Travel router activated")
sponsorRouter.activate(apiRouter);
Services.log.info("Sponsor router activated");
volunteerRouter.activate(apiRouter);
Services.log.info("Volunteer router activated");
searchRouter.activate(apiRouter);
Services.log.info("Search router activated");
settingsRouter.activate(apiRouter);
Services.log.info("Settings router activated");
roleRouter.activate(apiRouter);
Services.log.info("Role router activated");
apiRouter.use("/", indexRouter);
app.use("/", indexRouter);
app.use("/api", apiRouter);
//Custom error handler
app.use((err, req, res, next) => {
// log the error...
const status = err.status ? err.status : 500;
const message = err.message ? err.message : "Internal Server Error";
//Only show bad error when we're not in deployment
let errorContents;
if (status === 500 && Services.env.isProduction) {
errorContents = {};
} else if (err.error) {
errorContents = err.error;
} else if (err.data) {
errorContents = err.data;
} else {
errorContents = err;
}
res.status(status).json({
message: message,
data: errorContents
});
});
module.exports = {
app: app
};