From 3f91a121b33151cd466de930d0e68bdf87f4d19e Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Mon, 20 Dec 2021 14:48:04 +0000 Subject: Convert to typescript --- app/index.ts | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 app/index.ts (limited to 'app/index.ts') diff --git a/app/index.ts b/app/index.ts new file mode 100644 index 0000000..9b16ec5 --- /dev/null +++ b/app/index.ts @@ -0,0 +1,113 @@ +'use strict'; + +import { PageDirectory, Page, PageMetadata } from './directory.js'; +import express from 'express'; +import dotenv from 'dotenv'; + +dotenv.config() + +const app = express(); +const directory = new PageDirectory(process.env.PAGES_DIR); + +directory.rebuild(); + +function navbar(current: string = ''): string { + let navbar = ''; + directory.primaryPages.forEach(page => { + navbar += ``; + }) + return 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; + } + + res.render('purge.ejs', { + navbar: navbar(), + page: path, + buildTime: new Date(page.buildTime) ?? 'never', + buildTimeRelative: Math.round((Date.now() - page.buildTime) / 1000 / 60) + }); +}); + +app.get('/special/purge/:page/confirm', (req, res) => { + let path = req.params.page; + let page = directory.get(path); + + if (!page) { + error(res, 404); + return; + } + + 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.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}`); +}); + +function error(res, code) { + res.render('error.ejs', { + code: code, + navbar: navbar() + }); +} -- cgit v1.2.3-70-g09d2