mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 15:34:13 +00:00 
			
		
		
		
	Accept remote follow
This commit is contained in:
		
							parent
							
								
									32c008d008
								
							
						
					
					
						commit
						cc3704c3e9
					
				
					 2 changed files with 32 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -4,11 +4,13 @@ import Following from '../../../models/following';
 | 
			
		|||
import User from '../../../models/user';
 | 
			
		||||
import config from '../../../config';
 | 
			
		||||
import queue from '../../../queue';
 | 
			
		||||
import context from '../renderer/context';
 | 
			
		||||
import renderAccept from '../renderer/accept';
 | 
			
		||||
import request from '../../request';
 | 
			
		||||
 | 
			
		||||
export default async (actor, activity) => {
 | 
			
		||||
	const prefix = config.url + '/@';
 | 
			
		||||
	const id = activity.object.id || activity.object;
 | 
			
		||||
	let following;
 | 
			
		||||
 | 
			
		||||
	if (!id.startsWith(prefix)) {
 | 
			
		||||
		return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,28 +26,33 @@ export default async (actor, activity) => {
 | 
			
		|||
		throw new Error();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	try {
 | 
			
		||||
		following = await Following.insert({
 | 
			
		||||
	const accept = renderAccept(activity);
 | 
			
		||||
	accept['@context'] = context;
 | 
			
		||||
 | 
			
		||||
	await Promise.all([
 | 
			
		||||
		request(followee, actor.account.inbox, accept),
 | 
			
		||||
 | 
			
		||||
		Following.insert({
 | 
			
		||||
			createdAt: new Date(),
 | 
			
		||||
			followerId: actor._id,
 | 
			
		||||
			followeeId: followee._id
 | 
			
		||||
		});
 | 
			
		||||
	} catch (exception) {
 | 
			
		||||
		// duplicate key error
 | 
			
		||||
		if (exception instanceof MongoError && exception.code === 11000) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		throw exception;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	await new Promise((resolve, reject) => {
 | 
			
		||||
		queue.create('http', { type: 'follow', following: following._id }).save(error => {
 | 
			
		||||
			if (error) {
 | 
			
		||||
				reject(error);
 | 
			
		||||
			} else {
 | 
			
		||||
				resolve(null);
 | 
			
		||||
		}).then(following => new Promise((resolve, reject) => {
 | 
			
		||||
			queue.create('http', { type: 'follow', following: following._id }).save(error => {
 | 
			
		||||
				if (error) {
 | 
			
		||||
					reject(error);
 | 
			
		||||
				} else {
 | 
			
		||||
					resolve();
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		}), error => {
 | 
			
		||||
			// duplicate key error
 | 
			
		||||
			if (error instanceof MongoError && error.code === 11000) {
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
			throw error;
 | 
			
		||||
		})
 | 
			
		||||
	]);
 | 
			
		||||
 | 
			
		||||
	return null;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								src/remote/activitypub/renderer/accept.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/remote/activitypub/renderer/accept.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
export default object => ({
 | 
			
		||||
	type: 'Accept',
 | 
			
		||||
	object
 | 
			
		||||
});
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue