-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
53 lines (45 loc) · 1.38 KB
/
index.js
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
import express from "express"
import rateLimit from "express-rate-limit"
import fs from "fs/promises"
import hljs from "highlight.js"
import { marked } from "marked"
import njk from "nunjucks"
import njkMarkdown from "nunjucks-markdown"
import { ROUTES } from "./routes/routes.js"
import generateRSS from "./generateRSS.js"
const SERVER = express()
const SETTINGS = JSON.parse((await fs.readFile("data/settings.json")).toString())
// Set up Nunjucks...
const NUNJUCKS_ENV = njk.configure(
"views",
{
autoescape: true,
express: SERVER,
lstripBlocks: true,
trimBlocks: true,
watch: true,
}
)
// Set up markdown...
marked.use({
gfm: true,
highlight: (code, lang) => hljs.highlight(code, { language: hljs.getLanguage(lang) ? lang : "plaintext" }).value
})
njkMarkdown.register(NUNJUCKS_ENV, marked)
const RATE_LIMIT = rateLimit({
windowMs: 500,
max: 100,
})
const ASSETS_RATE_LIMIT = rateLimit({
windowMs: 500,
max: 200,
})
SERVER.use("/assets", ASSETS_RATE_LIMIT, express.static("assets"))
SERVER.use("/", RATE_LIMIT, ROUTES)
SERVER.get("/rss.xml", (_, res) => {
res.setHeader("Content-Type", "application/rss+xml").send(generateRSS())
})
SERVER.listen(
SETTINGS.port,
() => console.log(`Server started on http://localhost:${SETTINGS.port}!\nThe admin interface is available on http://localhost:${SETTINGS.port}/control`)
)