]> Untitled Git - lemmy-ui.git/blob - src/server/index.tsx
aecd78bb76e78153955221ae48df875d8a6ba743
[lemmy-ui.git] / src / server / index.tsx
1 import setDefaultOptions from "date-fns/setDefaultOptions";
2 import express from "express";
3 import path from "path";
4 import process from "process";
5 import { I18NextService } from "../shared/services";
6 import CatchAllHandler from "./handlers/catch-all-handler";
7 import ManifestHandler from "./handlers/manifest-handler";
8 import RobotsHandler from "./handlers/robots-handler";
9 import ServiceWorkerHandler from "./handlers/service-worker-handler";
10 import ThemeHandler from "./handlers/theme-handler";
11 import ThemesListHandler from "./handlers/themes-list-handler";
12 import setDefaultCsp from "./middleware/set-default-csp";
13
14 const server = express();
15
16 const [hostname, port] = process.env["LEMMY_UI_HOST"]
17   ? process.env["LEMMY_UI_HOST"].split(":")
18   : ["0.0.0.0", "1234"];
19
20 server.use(express.json());
21 server.use(express.urlencoded({ extended: false }));
22 server.use("/static", express.static(path.resolve("./dist")));
23
24 if (!process.env["LEMMY_UI_DISABLE_CSP"] && !process.env["LEMMY_UI_DEBUG"]) {
25   server.use(setDefaultCsp);
26 }
27
28 server.get("/robots.txt", RobotsHandler);
29 server.get("/service-worker.js", ServiceWorkerHandler);
30 server.get("/manifest.webmanifest", ManifestHandler);
31 server.get("/css/themes/:name", ThemeHandler);
32 server.get("/css/themelist", ThemesListHandler);
33 server.get("/*", CatchAllHandler);
34
35 server.listen(Number(port), hostname, () => {
36   console.log(`http://${hostname}:${port}`);
37 });
38
39 process.on("SIGINT", async () => {
40   const lang = I18NextService.i18n.language;
41   const locale = (
42     await import(
43       /* webpackExclude: /\.js\.flow$/ */
44       `date-fns/locale/${lang}`
45     )
46   ).default;
47   setDefaultOptions({
48     locale,
49   });
50   console.info("Interrupted");
51   process.exit(0);
52 });