social-butterfly
Version:
Incorporate federated social network protocols easily. Used with Hello, world federated blog.
66 lines (49 loc) • 1.81 kB
JavaScript
;
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;