diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-04-01 14:13:21 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-01 14:13:21 +0900 |
| commit | cbe544a97bb98cb9c49d73322e2abb838ebb8d16 (patch) | |
| tree | 05fc0cc7a2798abd79cc0fd3e2cc6231d5670449 /src/server/webfinger.ts | |
| parent | Merge pull request #1347 from akihikodaki/user (diff) | |
| parent | Implement WebFinger (diff) | |
| download | misskey-cbe544a97bb98cb9c49d73322e2abb838ebb8d16.tar.gz misskey-cbe544a97bb98cb9c49d73322e2abb838ebb8d16.tar.bz2 misskey-cbe544a97bb98cb9c49d73322e2abb838ebb8d16.zip | |
Merge pull request #1348 from akihikodaki/webfinger
Implement WebFinger
Diffstat (limited to 'src/server/webfinger.ts')
| -rw-r--r-- | src/server/webfinger.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/server/webfinger.ts b/src/server/webfinger.ts new file mode 100644 index 0000000000..864bb4af52 --- /dev/null +++ b/src/server/webfinger.ts @@ -0,0 +1,47 @@ +import config from '../conf'; +import parseAcct from '../common/user/parse-acct'; +import User from '../models/user'; +const express = require('express'); + +const app = express(); + +app.get('/.well-known/webfinger', async (req, res) => { + if (typeof req.query.resource !== 'string') { + return res.sendStatus(400); + } + + const resourceLower = req.query.resource.toLowerCase(); + const webPrefix = config.url.toLowerCase() + '/@'; + let acctLower; + + if (resourceLower.startsWith(webPrefix)) { + acctLower = resourceLower.slice(webPrefix.length); + } else if (resourceLower.startsWith('acct:')) { + acctLower = resourceLower.slice('acct:'.length); + } else { + acctLower = resourceLower; + } + + const parsedAcctLower = parseAcct(acctLower); + if (![null, config.host.toLowerCase()].includes(parsedAcctLower.host)) { + return res.sendStatus(422); + } + + const user = await User.findOne({ usernameLower: parsedAcctLower.username, host: null }); + if (user === null) { + return res.sendStatus(404); + } + + return res.json({ + subject: `acct:${user.username}@${config.host}`, + links: [ + { + rel: 'self', + type: 'application/activity+json', + href: `${config.url}/@${user.username}` + } + ] + }); +}); + +export default app; |