UNPKG

social-butterfly

Version:

Incorporate federated social network protocols easily. Used with Hello, world federated blog.

66 lines (49 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.send = send; exports.default = void 0; var _activitystreams = require("./activitystreams"); var _nodeFetch = _interopRequireDefault(require("node-fetch")); var _discover_user = require("./discover_user"); var _magicSignatures = _interopRequireDefault(require("magic-signatures")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function send(req, userRemote, contentOwner, data) { data = JSON.stringify(data); const body = _magicSignatures.default.sign({ data, data_type: 'application/ld+json' }, contentOwner.private_key); body.sigs[0].value = _magicSignatures.default.btob64u(body.sigs[0].value); await (0, _nodeFetch.default)(userRemote.salmon_url, { method: 'POST', body: JSON.stringify(body), headers: { 'Content-Type': 'application/magic-envelope+json' } }); } var _default = options => async (req, res) => { if (!req.query.resource) { return res.sendStatus(400); } const user = await options.getLocalUser(req.query.resource, req); if (!user) { return res.sendStatus(404); } const activityPubJSON = JSON.parse(_magicSignatures.default.b64utob(req.body.data).toString('utf8')); const userRemote = await (0, _activitystreams.findUserRemote)(options, activityPubJSON, res, user); if (!userRemote) { console.log('salmon fail: ', activityPubJSON); return res.sendStatus(401); } try { _magicSignatures.default.verify(req.body, userRemote.magic_key); } catch (ex) { return res.sendStatus(401); } await (0, _activitystreams.handle)(activityPubJSON.type, options, req, res, activityPubJSON, user, userRemote); res.sendStatus(204); }; exports.default = _default;