diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-06-17 17:15:31 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-06-17 17:15:31 +0900 |
| commit | 8d81bd0dc010cc09121cf9746bfd1f60a085635c (patch) | |
| tree | ddc61cf30538b423b5a7d69d62a6cf3aa7aa08d0 | |
| parent | Refactor (diff) | |
| parent | Fix #1731 (diff) | |
| download | sharkey-8d81bd0dc010cc09121cf9746bfd1f60a085635c.tar.gz sharkey-8d81bd0dc010cc09121cf9746bfd1f60a085635c.tar.bz2 sharkey-8d81bd0dc010cc09121cf9746bfd1f60a085635c.zip | |
Merge pull request #1732 from rinsuki/fix/1731
Fix #1731
| -rw-r--r-- | src/server/activitypub.ts | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts index c846e28c07..f406328dcb 100644 --- a/src/server/activitypub.ts +++ b/src/server/activitypub.ts @@ -7,7 +7,7 @@ const httpSignature = require('http-signature'); import { createHttp } from '../queue'; import pack from '../remote/activitypub/renderer'; 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 renderKey from '../remote/activitypub/renderer/key'; import renderPerson from '../remote/activitypub/renderer/person'; @@ -41,17 +41,18 @@ function inbox(ctx: Koa.Context) { 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 router.post('/inbox', json(), inbox); router.post('/users/:user/inbox', json(), inbox); // note router.get('/notes/:note', async (ctx, next) => { - const accepted = ctx.accepts('html', 'application/activity+json', 'application/ld+json'); - if (!['application/activity+json', 'application/ld+json'].includes(accepted as string)) { - await next(); - return; - } + if (!isActivityPubReq(ctx)) return await next(); const note = await Note.findOne({ _id: new mongo.ObjectID(ctx.params.note) @@ -112,6 +113,15 @@ router.get('/users/:user/publickey', async ctx => { }); // 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 => { const userId = new mongo.ObjectID(ctx.params.user); @@ -120,12 +130,18 @@ router.get('/users/:user', async ctx => { host: null }); - if (user === null) { - ctx.status = 404; - return; - } + userInfo(ctx, user); +}); - 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 |