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
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)" )
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-02-20 22:12:29 +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-02-22 00:17:59 +00:00
activitypub . conversation ( 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 } ` ) ;
activitypub . federate ( toFederate , db ) ;
} ) ;
} ) ( ) ;