commit
						8d81bd0dc0
					
				
					 1 changed files with 27 additions and 11 deletions
				
			
		| 
						 | 
					@ -7,7 +7,7 @@ const httpSignature = require('http-signature');
 | 
				
			||||||
import { createHttp } from '../queue';
 | 
					import { createHttp } from '../queue';
 | 
				
			||||||
import pack from '../remote/activitypub/renderer';
 | 
					import pack from '../remote/activitypub/renderer';
 | 
				
			||||||
import Note from '../models/note';
 | 
					import Note from '../models/note';
 | 
				
			||||||
import User, { isLocalUser, ILocalUser } from '../models/user';
 | 
					import User, { isLocalUser, ILocalUser, IUser } from '../models/user';
 | 
				
			||||||
import renderNote from '../remote/activitypub/renderer/note';
 | 
					import renderNote from '../remote/activitypub/renderer/note';
 | 
				
			||||||
import renderKey from '../remote/activitypub/renderer/key';
 | 
					import renderKey from '../remote/activitypub/renderer/key';
 | 
				
			||||||
import renderPerson from '../remote/activitypub/renderer/person';
 | 
					import renderPerson from '../remote/activitypub/renderer/person';
 | 
				
			||||||
| 
						 | 
					@ -41,17 +41,18 @@ function inbox(ctx: Koa.Context) {
 | 
				
			||||||
	ctx.status = 202;
 | 
						ctx.status = 202;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function isActivityPubReq(ctx: Router.IRouterContext) {
 | 
				
			||||||
 | 
						const accepted = ctx.accepts('html', 'application/activity+json', 'application/ld+json');
 | 
				
			||||||
 | 
						return ['application/activity+json', 'application/ld+json'].includes(accepted as string);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// inbox
 | 
					// inbox
 | 
				
			||||||
router.post('/inbox', json(), inbox);
 | 
					router.post('/inbox', json(), inbox);
 | 
				
			||||||
router.post('/users/:user/inbox', json(), inbox);
 | 
					router.post('/users/:user/inbox', json(), inbox);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// note
 | 
					// note
 | 
				
			||||||
router.get('/notes/:note', async (ctx, next) => {
 | 
					router.get('/notes/:note', async (ctx, next) => {
 | 
				
			||||||
	const accepted = ctx.accepts('html', 'application/activity+json', 'application/ld+json');
 | 
						if (!isActivityPubReq(ctx)) return await next();
 | 
				
			||||||
	if (!['application/activity+json', 'application/ld+json'].includes(accepted as string)) {
 | 
					 | 
				
			||||||
		await next();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const note = await Note.findOne({
 | 
						const note = await Note.findOne({
 | 
				
			||||||
		_id: new mongo.ObjectID(ctx.params.note)
 | 
							_id: new mongo.ObjectID(ctx.params.note)
 | 
				
			||||||
| 
						 | 
					@ -112,6 +113,15 @@ router.get('/users/:user/publickey', async ctx => {
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// user
 | 
					// user
 | 
				
			||||||
 | 
					function userInfo(ctx: Router.IRouterContext, user: IUser) {
 | 
				
			||||||
 | 
						if (user === null) {
 | 
				
			||||||
 | 
							ctx.status = 404;
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.body = pack(renderPerson(user as ILocalUser));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.get('/users/:user', async ctx => {
 | 
					router.get('/users/:user', async ctx => {
 | 
				
			||||||
	const userId = new mongo.ObjectID(ctx.params.user);
 | 
						const userId = new mongo.ObjectID(ctx.params.user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,12 +130,18 @@ router.get('/users/:user', async ctx => {
 | 
				
			||||||
		host: null
 | 
							host: null
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (user === null) {
 | 
						userInfo(ctx, user);
 | 
				
			||||||
		ctx.status = 404;
 | 
					});
 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.body = pack(renderPerson(user as ILocalUser));
 | 
					router.get('/@:user', async (ctx, next) => {
 | 
				
			||||||
 | 
						if (!isActivityPubReq(ctx)) return await next();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const user = await User.findOne({
 | 
				
			||||||
 | 
							usernameLower: ctx.params.user.toLowerCase(),
 | 
				
			||||||
 | 
							host: null
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						userInfo(ctx, user);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// follow form
 | 
					// follow form
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue