go-jamming/jsfork/src/serve.js

41 lines
1.1 KiB
JavaScript

"use strict";
const Koa = require("koa");
const pino = require('koa-pino-logger')()
const log = require('pino')()
const bodyParser = require('koa-body');
const koaRouter = require("koa-router");
const helmet = require("koa-helmet");
const { RateLimit } = require('koa2-ratelimit');
// koa docs: https://koajs.com/#application
const app = new Koa();
const router = new koaRouter();
// see https://www.npmjs.com/package/koa2-ratelimit, simple brute-force with helmet will suffice.
app.use(RateLimit.middleware({
interval: { min: 15 },
max: 100
}));
app.use(helmet());
app.use(pino);
// enable ctx.request.body parsing for x-www-form-urlencoded webmentions etc
app.use(bodyParser({
multipart: true,
urlencoded: true
}));
// route docs: https://github.com/koajs/router/blob/HEAD/API.md#module_koa-router--Router+get%7Cput%7Cpost%7Cpatch%7Cdelete%7Cdel
require("./webmention/route").route(router);
require("./pingback/route").route(router);
const config = require("./config");
config.setupDataDirs();
app.use(router.routes()).use(router.allowedMethods());
app.listen(config.port, config.host, () => {
log.info(`Started localhost at port ${config.port}`)
});