2019-02-20 22:12:29 +00:00
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" ;
2019-02-20 22:12:29 +00:00
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" ;
2019-02-20 22:12:29 +00:00
2019-08-17 18:50:18 +00:00
//import sqlite3 from "sqlite3";
import "reflect-metadata" ;
import { createConnection } from "typeorm" ;
2019-02-20 22:12:29 +00:00
2019-08-17 18:50:18 +00:00
//createConnection().then(async connection => {
//}).catch(console.error);
2019-02-20 22:12:29 +00:00
2019-08-17 18:50:18 +00:00
//const db = new (sqlite3.verbose().Database)(process.env.DB_PATH!);
//db.run("CREATE TABLE IF NOT EXISTS followers (id TEXT PRIMARY KEY, inbox TEXT)");
//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)");
//db.run("CREATE TABLE IF NOT EXISTS actors (id TEXT PRIMARY KEY, display_name TEXT, inbox TEXT, icon_url TEXT, public_key_pem TEXT)")
2019-02-20 22:12:29 +00:00
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 ) ;
2019-02-20 22:12:29 +00:00
return posts ;
2019-01-04 18:14:53 +00:00
}
2019-08-17 18:50:18 +00:00
//const app = express();
//app.set("db", db);
//app.use(morgan("dev"));
//app.use(bodyParser.json({ type: "application/activity+json" }));
2019-02-20 22:12:29 +00:00
//db.run("DELETE FROM articles");
( async ( ) = > {
2019-08-17 18:50:18 +00:00
const app = express ( ) ;
app . use ( morgan ( "dev" ) )
app . use ( bodyParser . json ( { type : "application/activity+json" } ) ) ;
const connection = await createConnection ( ) ;
2019-02-20 22:12:29 +00:00
const posts = await generate ( ) ;
2019-08-17 18:50:18 +00:00
await activitypub . articles . setup ( posts ) ;
const toFederate = await activitypub . articles . toFederate ( ) ;
2019-02-20 22:12:29 +00:00
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 ) ;
2019-02-20 22:12:29 +00:00
app . use ( express . static ( "out" ) ) ;
const port = process . env . PORT || 8083 ;
app . listen ( port , ( ) = > {
console . log ( ` Listening on port ${ port } ` ) ;
2019-08-17 18:50:18 +00:00
activitypub . federate ( toFederate ) ;
2019-02-20 22:12:29 +00:00
} ) ;
} ) ( ) ;