]> Untitled Git - lemmy-ui.git/blob - src/server/index.tsx
458d7f03e388aee6ccdc07edad21f99ad9a31d61
[lemmy-ui.git] / src / server / index.tsx
1 import { setupDateFns } from "@utils/app";
2 import { getStaticDir } from "@utils/env";
3 import express from "express";
4 import path from "path";
5 import process from "process";
6 import CatchAllHandler from "./handlers/catch-all-handler";
7 import ManifestHandler from "./handlers/manifest-handler";
8 import RobotsHandler from "./handlers/robots-handler";
9 import SecurityHandler from "./handlers/security-handler";
10 import ServiceWorkerHandler from "./handlers/service-worker-handler";
11 import ThemeHandler from "./handlers/theme-handler";
12 import ThemesListHandler from "./handlers/themes-list-handler";
13 import { setCacheControl, setDefaultCsp } from "./middleware";
14
15 const server = express();
16
17 const [hostname, port] = process.env["LEMMY_UI_HOST"]
18   ? process.env["LEMMY_UI_HOST"].split(":")
19   : ["0.0.0.0", "1234"];
20
21 server.use(express.json());
22 server.use(express.urlencoded({ extended: false }));
23 server.use(
24   getStaticDir(),
25   express.static(path.resolve("./dist"), {
26     maxAge: 24 * 60 * 60 * 1000, // 1 day
27     immutable: true,
28   })
29 );
30 server.use(setCacheControl);
31
32 if (!process.env["LEMMY_UI_DISABLE_CSP"] && !process.env["LEMMY_UI_DEBUG"]) {
33   server.use(setDefaultCsp);
34 }
35
36 server.get("/.well-known/security.txt", SecurityHandler);
37 server.get("/robots.txt", RobotsHandler);
38 server.get("/service-worker.js", ServiceWorkerHandler);
39 server.get("/manifest.webmanifest", ManifestHandler);
40 server.get("/css/themes/:name", ThemeHandler);
41 server.get("/css/themelist", ThemesListHandler);
42 server.get("/*", CatchAllHandler);
43
44 server.listen(Number(port), hostname, () => {
45   setupDateFns();
46   console.log(`http://${hostname}:${port}`);
47 });
48
49 process.on("SIGINT", () => {
50   console.info("Interrupted");
51   process.exit(0);
52 });