diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-04-01 19:57:36 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-01 19:57:36 +0900 |
| commit | fabda94932ebdd012b0772ce1e63ac515f546d84 (patch) | |
| tree | 1c5ffb9d42ebdb9f1830b331d3c1611b8ebc13ae /src/server/activitypub/user.ts | |
| parent | fix(package): update html-minifier to version 3.5.13 (diff) | |
| parent | Merge pull request #1354 from syuilo/greenkeeper/bootstrap-vue-2.0.0-rc.4 (diff) | |
| download | misskey-fabda94932ebdd012b0772ce1e63ac515f546d84.tar.gz misskey-fabda94932ebdd012b0772ce1e63ac515f546d84.tar.bz2 misskey-fabda94932ebdd012b0772ce1e63ac515f546d84.zip | |
Merge branch 'master' into greenkeeper/html-minifier-3.5.13
Diffstat (limited to 'src/server/activitypub/user.ts')
| -rw-r--r-- | src/server/activitypub/user.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/server/activitypub/user.ts b/src/server/activitypub/user.ts new file mode 100644 index 0000000000..d43a9793d4 --- /dev/null +++ b/src/server/activitypub/user.ts @@ -0,0 +1,40 @@ +import * as express from 'express'; +import config from '../../conf'; +import context from '../../common/remote/activitypub/renderer/context'; +import render from '../../common/remote/activitypub/renderer/person'; +import parseAcct from '../../common/user/parse-acct'; +import User from '../../models/user'; + +const app = express(); +app.disable('x-powered-by'); + +app.get('/@:user', async (req, res, next) => { + const accepted = req.accepts(['html', 'application/activity+json', 'application/ld+json']); + if (!(['application/activity+json', 'application/ld+json'] as Array<any>).includes(accepted)) { + return next(); + } + + const { username, host } = parseAcct(req.params.user); + if (host !== null) { + return res.sendStatus(422); + } + + const user = await User.findOne({ + usernameLower: username.toLowerCase(), + host: null + }); + if (user === null) { + return res.sendStatus(404); + } + + if (username !== user.username) { + return res.redirect(`${config.url}/@${user.username}`); + } + + const rendered = render(user); + rendered['@context'] = context; + + res.json(rendered); +}); + +export default app; |