-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathserver.js
More file actions
94 lines (77 loc) · 3.22 KB
/
Copy pathserver.js
File metadata and controls
94 lines (77 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
var express = require("express");
var bodyParser = require("body-parser");
var session = require("express-session");
var cookieParser = require("cookie-parser");
const favicon = require("serve-favicon");
const path = require("path");
const config = require("./config/config.js");
const AccountRoutes = require("./controllers/account_controller");
const HomeRoutes = require("./controllers/home_controller");
const ClassifyRoutes = require("./controllers/classify_controller");
const postController = require("./controllers/post_controller");
const fileController = require("./controllers/file_controller");
const tutorialFileController = require("./controllers/tutorial_file_controller");
const authenticate = require("./middleware/authenticate");
// const profileController = require('./controllers/profile_controller');
// Configure express
var app = express(); // Add this line to create an instance of Express
// Apache reverse proxy sits in front of this app on the same host, so trust
// the first hop's X-Forwarded-For header to get the real client IP (used by
// express-rate-limit and req.ip elsewhere).
app.set("trust proxy", 1);
app.use(favicon(path.join(__dirname, "public/images", "favicon.ico")));
console.log("Starting server in " + app.get("env") + " mode.");
// General configuration
app.set("view engine", "ejs");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false })); // Parse URL for key1=value1&key2=value2 etc.
app.set("views", path.join(__dirname, "views"));
const cookieSecret = process.env.COOKIE_SECRET || "randomstringsessionsecret";
app.use(cookieParser(cookieSecret));
app.use(express.static(path.join(__dirname, "public")));
// Expose registration toggle to all views
app.use((req, res, next) => {
res.locals.registrationEnabled = config.registrationEnabled !== false;
next();
});
// session secret to add a level of extra security
// app.use(
// session({
// secret: "randomstringsessionsecret", // Change this to a secure secret
// resave: false,
// saveUninitialized: true,
// cookie: { secure: true, sessionID: null, signed: true, sameSite: "strict" }, // Set to true if using HTTPS
// })
// );
// Set controllers
app.use("/", HomeRoutes);
app.use("/", AccountRoutes);
app.use("/", fileController);
app.use("/", postController);
app.use("/", tutorialFileController);
app.use("/", authenticate, ClassifyRoutes);
app.get("/login", (req, res) => {
const error = req.query.error || null;
res.render("login", { error });
});
if (require.main === module) {
const port = process.env.PORT || 8000;
const isDev = app.get("env") === "development";
const hostname = isDev ? "localhost" : "0.0.0.0";
const startServer = () => {
app.listen(port, hostname, () => {
console.log(`Server is running on port ${port}`);
});
};
if (isDev && config.dialect === "sqlite") {
// SQLite dev setups have no migration step, so sync the schema on every start.
// MySQL dev setups use migrations/database_structure.sql instead (see README).
const models = require("./models");
models.sequelize.sync().then(startServer).catch((err) => {
console.error("Failed to sync database models on startup:", err);
});
} else {
startServer();
}
}
module.exports = app;