diff options
Diffstat (limited to 'app/index.ts')
| -rw-r--r-- | app/index.ts | 110 |
1 files changed, 19 insertions, 91 deletions
diff --git a/app/index.ts b/app/index.ts index 9a2b693..845b793 100644 --- a/app/index.ts +++ b/app/index.ts @@ -3,6 +3,9 @@ import { PageDirectory, Page, PageMetadata } from './directory.js'; import express from 'express'; import dotenv from 'dotenv'; +import * as page from './routes/page/router.js'; +import * as special from './routes/special/router.js'; +import { navbar } from './middlewares/index.js' dotenv.config() @@ -11,110 +14,35 @@ const directory = new PageDirectory(process.env.PAGES_DIR); directory.rebuild(); -function navbar(current: string = ''): string { - let navbar = ''; - directory.primaryPages.forEach(page => { - navbar += `<div class="navbar-element"><a href="/${page.standardName}"${current == page.standardName ? ' class="highlight"' : ''}>${page.metadata.displayTitle}</a></div>`; - }) - return navbar -} - -function error(res, code) { - res.render('error.ejs', { - code: code, - navbar: navbar() - }); -} - -app.use(express.static('static')); app.set('view engine', 'ejs'); app.set('views', 'views'); -app.get('/:page.wiki', (req, res) => { - let path = req.params.page; - let raw = directory.getRaw(path); - - if (!raw) { - error(res, 404); - return; - } - - res.type('text/plain'); - res.send(raw).end(); -}); - -app.get('/:page?', (req, res) => { - let path = req.params.page ?? 'index'; - let page = directory.get(path); - - if (!page) { - error(res, 404); - return; - } - - res.render('page.ejs', { - navbar: navbar(), - path: path, - content: page.html, - title: page.metadata.displayTitle, - buildTime: new Date(page.buildTime) - }); -}); - -app.get('/special/purge/:page?', (req, res) => { - let path = req.params.page ?? 'index'; - let page = directory.get(path); - - if (!page) { - error(res, 404); - return; - } +app.use(express.static('static')); - res.render('purge.ejs', { - navbar: navbar(), - page: path, - buildTime: new Date(page.buildTime) ?? 'never', - buildTimeRelative: Math.round((Date.now() - page.buildTime) / 1000 / 60) - }); +app.use((req, res, next) => { + res.locals.directory = directory; + next(); }); -app.get('/special/purge/:page/confirm', (req, res) => { - let path = req.params.page; - let page = directory.get(path); - - if (!page) { - error(res, 404); - return; - } +app.use(page.router); +app.use(special.router); - if (directory.purge(path)) { - res.status(200).send(); - } else { - res.status(429).send(); - } -}); - -app.get('/special/rebuild', (req, res) => { - res.render('rebuild.ejs', { - navbar: navbar() +app.use(navbar, (req, res, next) => { + res.render('error.ejs', { + code: '404', + navbar: res.locals.navbarHtml }); }); -app.get('/special/rebuild/confirm', (req, res) => { - if (directory.rebuild()) { - res.status(200).send(); - } else { - res.status(429).send(); - } -}); - -app.listen(process.env.PORT, () => { - console.log(`App listening on ${process.env.PORT}`); +const server = app.listen(process.env.PORT, () => { + console.log(`App listening on port ${process.env.PORT}`); }); const exit = () => { - console.info('Exiting application'); - process.exit(0); + console.info('Stopping server...'); + server.close(() => { + process.exit(0); + }) } process.on('SIGINT', exit); |
