social-butterfly
Version:
Incorporate federated social network protocols easily. Used with Hello, world federated blog.
87 lines (69 loc) • 2.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _feeds = require("./util/feeds");
var _follow_confirm = _interopRequireDefault(require("./follow_confirm"));
var _activitystreams = require("./activitystreams");
var _url_factory = require("./util/url_factory");
var _discover_user = require("./discover_user");
var _express = _interopRequireDefault(require("express"));
var _server = require("react-dom/server");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = options => {
const followRouter = _express.default.Router();
followRouter.get('/', async (req, res) => {
const {
resource
} = req.query;
res.send(`<!doctype html>` + (0, _server.renderToString)( /*#__PURE__*/React.createElement(_follow_confirm.default, {
req: req,
resource: resource
})));
});
followRouter.post('/', async (req, res) => {
await follow(req, req.session.user, req.query.resource);
res.redirect('/');
});
followRouter.use('/websub', options.webSubSubscriberServer.listener()); // `req` might be null if we're doing initial setup of the server.
async function follow(req, currentUser, profileUrl) {
let userRemote;
try {
userRemote = await (0, _discover_user.discoverUserRemoteInfoSaveAndSubscribe)(req, options, profileUrl, currentUser.model.username);
const feedResponseText = await (0, _feeds.retrieveFeed)(userRemote.feed_url);
await (0, _feeds.parseFeedAndInsertIntoDb)(options, userRemote, feedResponseText);
} catch (ex) {
console.error(ex);
}
req && (0, _activitystreams.follow)(req, currentUser.model, userRemote, true
/* isFollow */
);
return userRemote;
}
async function unfollow(req, currentUser, userRemote, hub_url, profileUrl) {
try {
const userRemoteParams = {
localUsername: currentUser.model.username,
remoteProfileUrl: profileUrl
};
const callbackUrl = (0, _url_factory.buildUrl)({
req,
pathname: '/websub',
searchParams: userRemoteParams
});
await options.webSubSubscriberServer.unsubscribe(hub_url, options.constants.webSubHub, callbackUrl);
} catch (ex) {
console.error(ex);
}
(0, _activitystreams.follow)(req, currentUser.model, userRemote, false
/* isFollow */
);
}
return {
followRouter,
follow,
unfollow
};
};
exports.default = _default;