summaryrefslogtreecommitdiff
path: root/src/server/webfinger.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-04-01 19:57:36 +0900
committerGitHub <noreply@github.com>2018-04-01 19:57:36 +0900
commitfabda94932ebdd012b0772ce1e63ac515f546d84 (patch)
tree1c5ffb9d42ebdb9f1830b331d3c1611b8ebc13ae /src/server/webfinger.ts
parentfix(package): update html-minifier to version 3.5.13 (diff)
parentMerge pull request #1354 from syuilo/greenkeeper/bootstrap-vue-2.0.0-rc.4 (diff)
downloadmisskey-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/webfinger.ts')
-rw-r--r--src/server/webfinger.ts47
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;