2023-05-17 13:13:30 -04:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
const nconf = require('nconf');
|
|
|
|
|
|
2023-06-23 14:59:47 -04:00
|
|
|
const user = require('../../user');
|
2023-06-21 17:16:37 -04:00
|
|
|
const activitypub = require('../../activitypub');
|
2023-05-17 13:13:30 -04:00
|
|
|
|
|
|
|
|
const Controller = module.exports;
|
|
|
|
|
|
2024-01-22 16:18:49 -05:00
|
|
|
Controller.actors = require('./actors');
|
2024-01-12 15:23:30 -05:00
|
|
|
Controller.topics = require('./topics');
|
2023-06-21 17:16:37 -04:00
|
|
|
|
2023-05-28 15:42:29 -04:00
|
|
|
Controller.getFollowing = async (req, res) => {
|
|
|
|
|
const { followingCount: totalItems } = await user.getUserFields(res.locals.uid, ['followingCount']);
|
|
|
|
|
|
|
|
|
|
const page = parseInt(req.query.page, 10) || 1;
|
|
|
|
|
const resultsPerPage = 50;
|
|
|
|
|
const start = Math.max(0, page - 1) * resultsPerPage;
|
|
|
|
|
const stop = start + resultsPerPage - 1;
|
|
|
|
|
|
|
|
|
|
let orderedItems = await user.getFollowing(res.locals.uid, start, stop);
|
|
|
|
|
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
|
|
|
|
type: 'OrderedCollection',
|
|
|
|
|
totalItems,
|
|
|
|
|
orderedItems,
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Controller.getFollowers = async (req, res) => {
|
|
|
|
|
const { followerCount: totalItems } = await user.getUserFields(res.locals.uid, ['followerCount']);
|
|
|
|
|
|
|
|
|
|
const page = parseInt(req.query.page, 10) || 1;
|
|
|
|
|
const resultsPerPage = 50;
|
|
|
|
|
const start = Math.max(0, page - 1) * resultsPerPage;
|
|
|
|
|
const stop = start + resultsPerPage - 1;
|
|
|
|
|
|
|
|
|
|
let orderedItems = await user.getFollowers(res.locals.uid, start, stop);
|
|
|
|
|
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
|
|
|
|
type: 'OrderedCollection',
|
|
|
|
|
totalItems,
|
|
|
|
|
orderedItems,
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-25 14:29:06 -04:00
|
|
|
Controller.getOutbox = async (req, res) => {
|
|
|
|
|
// stub
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
|
|
|
|
type: 'OrderedCollection',
|
|
|
|
|
totalItems: 0,
|
|
|
|
|
orderedItems: [],
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Controller.postOutbox = async (req, res) => {
|
|
|
|
|
// This is a client-to-server feature so it is deliberately not implemented at this time.
|
|
|
|
|
res.sendStatus(405);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Controller.getInbox = async (req, res) => {
|
|
|
|
|
// This is a client-to-server feature so it is deliberately not implemented at this time.
|
|
|
|
|
res.sendStatus(405);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Controller.postInbox = async (req, res) => {
|
2023-12-21 15:49:51 -05:00
|
|
|
// Note: underlying methods are internal use only, hence no exposure via src/api
|
2023-06-28 14:59:39 -04:00
|
|
|
switch (req.body.type) {
|
2024-01-16 12:00:50 -05:00
|
|
|
case 'Create': {
|
|
|
|
|
await activitypub.inbox.create(req);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-16 13:55:58 -05:00
|
|
|
case 'Update': {
|
|
|
|
|
await activitypub.inbox.update(req);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-28 14:59:39 -04:00
|
|
|
case 'Follow': {
|
2023-12-22 13:35:09 -05:00
|
|
|
await activitypub.inbox.follow(req);
|
2023-06-28 14:59:39 -04:00
|
|
|
break;
|
|
|
|
|
}
|
2023-12-13 13:15:03 -05:00
|
|
|
|
|
|
|
|
case 'Accept': {
|
|
|
|
|
await activitypub.inbox.accept(req);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case 'Undo': {
|
|
|
|
|
await activitypub.inbox.undo(req);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
default: {
|
2024-01-26 11:20:14 -05:00
|
|
|
res.sendStatus(501);
|
2024-01-26 11:44:44 -05:00
|
|
|
break;
|
2023-12-13 13:15:03 -05:00
|
|
|
}
|
2023-06-28 14:59:39 -04:00
|
|
|
}
|
2024-01-26 21:39:20 -05:00
|
|
|
|
|
|
|
|
res.sendStatus(200);
|
2023-05-25 14:29:06 -04:00
|
|
|
};
|