shadowfacts.net/lib/index.ts

67 lines
2.0 KiB
TypeScript
Raw Normal View History

import { Page } from "./metadata";
import generators from "./generate";
2019-01-04 18:14:53 +00:00
2019-02-20 23:07:29 +00:00
import express, { Router } from "express";
import morgan from "morgan";
import bodyParser from "body-parser";
import activitypub from "./activitypub";
2019-02-20 23:07:29 +00:00
import validateHttpSig from "./activitypub/middleware/http-signature";
import sqlite3 from "sqlite3";
const db = new (sqlite3.verbose().Database)(process.env.DB_PATH!);
db.run("CREATE TABLE IF NOT EXISTS followers (id TEXT PRIMARY KEY, inbox TEXT)");
2019-02-22 00:17:59 +00:00
db.run("CREATE TABLE IF NOT EXISTS articles (id TEXT PRIMARY KEY, article_doc TEXT, conversation TEXT, has_federated INT)");
db.run("CREATE TABLE IF NOT EXISTS notes (id TEXT PRIMARY KEY, content TEXT, attributed_to TEXT, in_reply_to TEXT, conversation TEXT, published TEXT)");
2019-02-24 15:21:14 +00:00
db.run("CREATE TABLE IF NOT EXISTS actors (id TEXT PRIMARY KEY, display_name TEXT, inbox TEXT, icon_url TEXT, public_key_pem TEXT)")
async function generate(): Promise<Page[]> {
2019-01-04 18:36:40 +00:00
generators.copy();
2019-01-04 18:14:53 +00:00
generators.css();
generators.missing();
const tutorials = await generators.tutorials();
const posts = await generators.posts();
generators.homepage(posts);
generators.redirects(posts);
const categories = await generators.categories(posts);
2019-02-18 18:47:43 +00:00
await generators.rss(posts, categories, tutorials);
return posts;
2019-01-04 18:14:53 +00:00
}
const app = express();
app.set("db", db);
app.use(morgan("dev"));
app.use(bodyParser.json({ type: "application/activity+json" }));
//db.run("DELETE FROM articles");
(async () => {
const posts = await generate();
await activitypub.articles.setup(posts, db);
const toFederate = await activitypub.articles.toFederate(db);
2019-02-20 23:07:29 +00:00
const apRouter = Router();
apRouter.use(validateHttpSig);
await activitypub.actor(apRouter);
2019-03-01 23:42:28 +00:00
activitypub.comments(apRouter);
2019-02-20 23:07:29 +00:00
activitypub.followers(apRouter);
activitypub.inbox(apRouter);
activitypub.webfinger(apRouter);
activitypub.articles.route(apRouter);
app.use(apRouter);
app.use(express.static("out"));
const port = process.env.PORT || 8083;
app.listen(port, () => {
console.log(`Listening on port ${port}`);
activitypub.federate(toFederate, db);
});
})();