src/app.js (view raw)
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | "use strict";
const Koa = require("koa");
const app = new Koa();
const helmet = require("koa-helmet");
const actions = require("./actions.js");
const responders = require("./responders.js");
const Router = require("koa-router");
const router = new Router();
const makeTagURI = (authority, startDate) => specific =>
`tag:${authority},${startDate}:${specific}`;
module.exports = async function(config) {
const Posts = await require("./domain/posts.js")(config.posts, basename =>
router.url("post", basename)
);
app.context.getURL = router.url.bind(router);
app.context.makeTagURI = makeTagURI(
config.feed.originalDomainName,
config.feed.domainStartDate
);
router.get("home", "/", actions.home(config, responders.home, Posts.posts));
router.get(
"posts",
"/post",
actions.posts(config, responders.list, Posts.posts)
);
router.get(
"highlight-theme",
"/css/code.css",
actions.highlightTheme(config)
);
router.get(
"feed",
"/index.xml",
actions.posts(config, responders.feed, Posts.posts)
);
router.get(
"post",
"/post/:filename",
actions.post(config, responders.post, Posts.posts)
);
router.get("tags", "/tag", actions.tags(config, responders.tags, Posts.tags));
router.get(
"tag",
"/tag/:name",
actions.tag(config, responders.list, Posts.tags)
);
app.use(
helmet({
hsts: {
setIf: ctx => ctx.secure
}
})
);
app.use(router.routes()).use(router.allowedMethods());
app.use(actions.serveFiles);
return app;
};
|