mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 08:36:12 +01:00
fix: move all actor object urls to immutable variants
This commit is contained in:
@@ -94,9 +94,15 @@ Helpers.resolveLocalUid = async (input) => {
|
||||
const { host, pathname } = new URL(input);
|
||||
|
||||
if (host === nconf.get('url_parsed').host) {
|
||||
return pathname.replace(nconf.get('relative_path'), '').split('/').filter(Boolean)[1];
|
||||
const [type, value] = pathname.replace(nconf.get('relative_path'), '').split('/').filter(Boolean)[1];
|
||||
if (type === 'uid') {
|
||||
return value;
|
||||
}
|
||||
|
||||
slug = value;
|
||||
} else {
|
||||
throw new Error('[[error:activitypub.invalid-id]]');
|
||||
}
|
||||
} else if (input.indexOf('@') !== -1) { // Webfinger
|
||||
([slug] = input.replace(/^acct:/, '').split('@'));
|
||||
} else {
|
||||
|
||||
@@ -87,8 +87,7 @@ ActivityPub.sign = async (uid, url, payload) => {
|
||||
const { host, pathname } = new URL(url);
|
||||
const date = new Date().toUTCString();
|
||||
const key = await ActivityPub.getPrivateKey(uid);
|
||||
const userslug = await user.getUserField(uid, 'userslug');
|
||||
const keyId = `${nconf.get('url')}${uid > 0 ? `/user/${userslug}` : '/actor'}#key`;
|
||||
const keyId = `${nconf.get('url')}${uid > 0 ? `/uid/${uid}` : '/actor'}#key`;
|
||||
let digest = null;
|
||||
|
||||
let headers = '(request-target) host date';
|
||||
|
||||
@@ -137,10 +137,10 @@ Mocks.actor = async (uid) => {
|
||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||
id: `${nconf.get('url')}/uid/${uid}`,
|
||||
url: `${nconf.get('url')}/user/${userslug}`,
|
||||
followers: `${nconf.get('url')}/user/${userslug}/followers`,
|
||||
following: `${nconf.get('url')}/user/${userslug}/following`,
|
||||
inbox: `${nconf.get('url')}/user/${userslug}/inbox`,
|
||||
outbox: `${nconf.get('url')}/user/${userslug}/outbox`,
|
||||
followers: `${nconf.get('url')}/uid/${uid}/followers`,
|
||||
following: `${nconf.get('url')}/uid/${uid}/following`,
|
||||
inbox: `${nconf.get('url')}/uid/${uid}/inbox`,
|
||||
outbox: `${nconf.get('url')}/uid/${uid}/outbox`,
|
||||
|
||||
type: 'Person',
|
||||
name,
|
||||
@@ -150,8 +150,8 @@ Mocks.actor = async (uid) => {
|
||||
image: cover,
|
||||
|
||||
publicKey: {
|
||||
id: `${nconf.get('url')}/user/${userslug}#key`,
|
||||
owner: `${nconf.get('url')}/user/${userslug}`,
|
||||
id: `${nconf.get('url')}/uid/${uid}#key`,
|
||||
owner: `${nconf.get('url')}/uid/${uid}`,
|
||||
publicKeyPem: publicKey,
|
||||
},
|
||||
};
|
||||
@@ -161,14 +161,11 @@ Mocks.note = async (post) => {
|
||||
const id = `${nconf.get('url')}/post/${post.pid}`;
|
||||
const published = new Date(parseInt(post.timestamp, 10)).toISOString();
|
||||
|
||||
const [raw, userslug] = await Promise.all([
|
||||
posts.getPostField(post.pid, 'content'),
|
||||
user.getUserField(post.user.uid, 'userslug'),
|
||||
]);
|
||||
const raw = await posts.getPostField(post.pid, 'content');
|
||||
|
||||
// todo: post visibility, category privileges integration
|
||||
const to = [activitypub._constants.publicAddress];
|
||||
const cc = [`${nconf.get('url')}/user/${userslug}/followers`];
|
||||
const cc = [`${nconf.get('url')}/uid/${post.user.uid}/followers`];
|
||||
|
||||
let inReplyTo = null;
|
||||
let name = null;
|
||||
|
||||
@@ -11,14 +11,14 @@ Controller.actors = require('./actors');
|
||||
Controller.topics = require('./topics');
|
||||
|
||||
Controller.getFollowing = async (req, res) => {
|
||||
const { followingCount: totalItems } = await user.getUserFields(res.locals.uid, ['followingCount']);
|
||||
const { followingCount: totalItems } = await user.getUserFields(req.params.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);
|
||||
let orderedItems = await user.getFollowing(req.params.uid, start, stop);
|
||||
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
|
||||
res.status(200).json({
|
||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||
@@ -29,14 +29,14 @@ Controller.getFollowing = async (req, res) => {
|
||||
};
|
||||
|
||||
Controller.getFollowers = async (req, res) => {
|
||||
const { followerCount: totalItems } = await user.getUserFields(res.locals.uid, ['followerCount']);
|
||||
const { followerCount: totalItems } = await user.getUserFields(req.params.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);
|
||||
let orderedItems = await user.getFollowers(req.params.uid, start, stop);
|
||||
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
|
||||
res.status(200).json({
|
||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||
|
||||
@@ -18,14 +18,14 @@ module.exports = function (app, middleware, controllers) {
|
||||
app.get('/uid/:uid', middlewares, controllers.activitypub.actors.user);
|
||||
app.get('/user/:userslug', [...middlewares, middleware.exposeUid], controllers.activitypub.actors.userBySlug);
|
||||
|
||||
app.get('/user/:userslug/inbox', [...middlewares, middleware.exposeUid], controllers.activitypub.getInbox);
|
||||
app.post('/user/:userslug/inbox', [...middlewares, middleware.activitypub.validate, middleware.exposeUid], controllers.activitypub.postInbox);
|
||||
app.get('/uid/:uid/inbox', middlewares, controllers.activitypub.getInbox);
|
||||
app.post('/uid/:uid/inbox', [...middlewares, middleware.activitypub.validate], controllers.activitypub.postInbox);
|
||||
|
||||
app.get('/user/:userslug/outbox', [...middlewares, middleware.exposeUid], controllers.activitypub.getOutbox);
|
||||
app.post('/user/:userslug/outbox', [...middlewares, middleware.exposeUid], controllers.activitypub.postOutbox);
|
||||
app.get('/uid/:uid/outbox', middlewares, controllers.activitypub.getOutbox);
|
||||
app.post('/uid/:uid/outbox', middlewares, controllers.activitypub.postOutbox);
|
||||
|
||||
app.get('/user/:userslug/following', [...middlewares, middleware.exposeUid], controllers.activitypub.getFollowing);
|
||||
app.get('/user/:userslug/followers', [...middlewares, middleware.exposeUid], controllers.activitypub.getFollowers);
|
||||
app.get('/uid/:uid/following', middlewares, controllers.activitypub.getFollowing);
|
||||
app.get('/uid/:uid/followers', middlewares, controllers.activitypub.getFollowers);
|
||||
|
||||
app.get('/post/:pid', middlewares, controllers.activitypub.actors.note);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user