mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	fix: accept and undo logic saving improper id into database, updated follow logic so remote follow is not added to collection until an accept is received
This commit is contained in:
		| @@ -48,9 +48,11 @@ inbox.isFollowed = async (actorId, uid) => { | ||||
| }; | ||||
|  | ||||
| inbox.accept = async (req) => { | ||||
| 	const { actor, object } = req.body; | ||||
| 	let { actor, object } = req.body; | ||||
| 	const { type } = object; | ||||
|  | ||||
| 	actor = await activitypub.getActor(actor); | ||||
|  | ||||
| 	if (type === 'Follow') { | ||||
| 		// todo: should check that actor and object.actor are the same person? | ||||
| 		const uid = await helpers.resolveLocalUid(object.actor); | ||||
| @@ -60,25 +62,27 @@ inbox.accept = async (req) => { | ||||
|  | ||||
| 		const now = Date.now(); | ||||
| 		await Promise.all([ | ||||
| 			db.sortedSetAdd(`followingRemote:${uid}`, now, actor.name), | ||||
| 			db.sortedSetAdd(`followingRemote:${uid}`, now, actor.id), | ||||
| 			db.incrObjectField(`user:${uid}`, 'followingRemoteCount'), | ||||
| 		]); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| inbox.undo = async (req) => { | ||||
| 	const { actor, object } = req.body; | ||||
| 	let { actor, object } = req.body; | ||||
| 	const { type } = object; | ||||
|  | ||||
| 	actor = await activitypub.getActor(actor); | ||||
|  | ||||
| 	if (type === 'Follow') { | ||||
| 		// todo: should check that actor and object.actor are the same person? | ||||
| 		const uid = await helpers.resolveLocalUid(object.actor); | ||||
| 		const uid = await helpers.resolveLocalUid(object.object); | ||||
| 		if (!uid) { | ||||
| 			throw new Error('[[error:invalid-uid]]'); | ||||
| 		} | ||||
|  | ||||
| 		await Promise.all([ | ||||
| 			db.sortedSetRemove(`followingRemote:${uid}`, actor.name), | ||||
| 			db.sortedSetRemove(`followingRemote:${uid}`, actor.id), | ||||
| 			db.decrObjectField(`user:${uid}`, 'followingRemoteCount'), | ||||
| 		]); | ||||
| 	} | ||||
|   | ||||
| @@ -26,12 +26,6 @@ activitypubApi.follow = async (caller, { actorId } = {}) => { | ||||
| 		type: 'Follow', | ||||
| 		object: object.id, | ||||
| 	}); | ||||
|  | ||||
| 	const now = Date.now(); | ||||
| 	await Promise.all([ | ||||
| 		db.sortedSetAdd(`followingRemote:${caller.uid}`, now, actorId), | ||||
| 		db.incrObjectField(`user:${caller.uid}`, 'followingRemoteCount'), | ||||
| 	]); | ||||
| }; | ||||
|  | ||||
| activitypubApi.unfollow = async (caller, { actorId }) => { | ||||
| @@ -51,7 +45,7 @@ activitypubApi.unfollow = async (caller, { actorId }) => { | ||||
| 	}); | ||||
|  | ||||
| 	await Promise.all([ | ||||
| 		db.sortedSetRemove(`followingRemote:${caller.uid}`, actorId), | ||||
| 		db.sortedSetRemove(`followingRemote:${caller.uid}`, object.id), | ||||
| 		db.decrObjectField(`user:${caller.uid}`, 'followingRemoteCount'), | ||||
| 	]); | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user