aboutsummaryrefslogtreecommitdiffstats
path: root/app/routes/special/router.ts
blob: 26130c59f6da60ea6ac395d8a82cb0e1d21f9e8e (plain)
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
import express from 'express';
import { navbar, page } from '../../middlewares/index.js';
import { logger } from './../../logger.js'

export const router = express.Router({ mergeParams: true });

router.use('/special/purge/:page?', page);
router.use('/special/purge/:page/confirm', page);

router.get('/special/purge/:page?', navbar, (req, res, next) => {
    const page = res.locals.page;

    if (!page) {
        next();
        return;
    }

    res.render('purge.ejs', {
        navbar: res.locals.navbarHtml,
        page: res.locals.path,
        buildTime: new Date(page.buildTime) ?? 'never',
        buildTimeRelative: Math.round((Date.now() - page.buildTime) / 1000 / 60)
    });
});

router.get('/special/purge/:page/confirm', (req, res, next) => {
    const page = res.locals.page;

    if (!page) {
        next();
        return;
    }

    logger.info(`Purge for page ${page.standardName} requested by ${req.headers['x-forwarded-for'] || req.socket.remoteAddress }`)
    if (res.locals.directory.purge(res.locals.path)) {
        res.status(200).send();
    } else {
        res.status(429).send();
    }
});

router.get('/special/rebuild', navbar, (req, res) => {
    res.render('rebuild.ejs', {
        navbar: res.locals.navbarHtml
    });
});

router.get('/special/rebuild/confirm', (req, res) => {
    logger.info(`Directory rebuild requested by ${req.headers['x-forwarded-for'] || req.socket.remoteAddress }`)
    if (res.locals.directory.rebuild()) {
        res.status(200).send();
    } else {
        res.status(429).send();
    }
});