feedless/app/lib/express.js

84 lines
2.1 KiB
JavaScript
Raw Normal View History

2020-04-04 15:32:27 +02:00
const express = require("express");
const app = express();
2020-04-04 17:15:43 +02:00
const port = process.env.EXPRESS_PORT || 3000;
2020-04-04 16:01:11 +02:00
const bodyParser = require("body-parser");
const pull = require("pull-stream");
const Client = require("ssb-client");
2020-04-04 17:15:43 +02:00
const ssbKeys = require("ssb-keys");
const ssbConfig = require("./ssb-config");
const { promisify, asyncRouter } = require("./utils");
2020-04-04 15:32:27 +02:00
2020-04-04 16:01:11 +02:00
let ssbServer;
2020-04-04 17:15:43 +02:00
let profile;
let homeFolder =
process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE;
let ssbSecret = ssbKeys.loadOrCreateSync(
`${homeFolder}/.${process.env.CONFIG_FOLDER || "social"}/secret`
2020-04-04 17:15:43 +02:00
);
Client(ssbSecret, ssbConfig, async (err, server) => {
2020-04-04 16:01:11 +02:00
if (err) throw err;
ssbServer = server;
profile = await promisify(ssbServer.whoami);
console.log(
"nearby pubs",
await promisify(ssbServer.peerInvites.getNearbyPubs)
);
console.log("getState", await promisify(ssbServer.deviceAddress.getState));
console.log("ssbServer", ssbServer);
2020-04-04 16:01:11 +02:00
});
2020-04-04 15:32:27 +02:00
2020-04-04 16:01:11 +02:00
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "ejs");
2020-04-04 15:32:27 +02:00
app.use(express.static("public"));
const router = asyncRouter(app);
router.get("/", (_req, res) => {
if (!ssbServer) {
setTimeout(() => {
res.redirect("/");
}, 500);
return;
}
2020-04-04 16:01:11 +02:00
pull(
ssbServer.query.read({ limit: 10, reverse: true }),
2020-04-04 17:15:43 +02:00
pull.collect((_err, msgs) => {
2020-04-04 16:01:11 +02:00
const posts = msgs.map((x) => x.value.content);
2020-04-04 17:15:43 +02:00
res.render("index", { posts, profile });
2020-04-04 16:01:11 +02:00
})
);
2020-04-04 15:32:27 +02:00
});
router.post("/publish", async (req, res) => {
await promisify(ssbServer.publish, { type: "post", text: req.body.message });
res.redirect("/");
2020-04-04 15:32:27 +02:00
});
router.get("/pubs", async (_req, res) => {
const invite = await promisify(ssbServer.invite.create, { uses: 10 });
const peers = await promisify(ssbServer.gossip.peers);
2020-04-04 17:15:43 +02:00
res.render("pubs", { invite, peers });
2020-04-04 17:15:43 +02:00
});
router.post("/pubs/add", async (req, res) => {
2020-04-04 17:15:43 +02:00
const inviteCode = req.body.invite_code;
await promisify(ssbServer.invite.accept, inviteCode);
2020-04-04 17:15:43 +02:00
res.redirect("/");
2020-04-04 17:15:43 +02:00
});
2020-04-04 16:01:11 +02:00
const expressServer = app.listen(port, () =>
2020-04-04 15:32:27 +02:00
console.log(`Example app listening at http://localhost:${port}`)
);
2020-04-04 16:01:11 +02:00
module.exports = expressServer;