summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-18 19:24:09 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-18 19:24:09 +0900
commit7410aa9b37d3d3318e9a1d751a62d25327cc6b0e (patch)
tree9766470aaeba232119ad46fcd2934bd8c40191db /src/server
parentFix #1510 (diff)
downloadsharkey-7410aa9b37d3d3318e9a1d751a62d25327cc6b0e.tar.gz
sharkey-7410aa9b37d3d3318e9a1d751a62d25327cc6b0e.tar.bz2
sharkey-7410aa9b37d3d3318e9a1d751a62d25327cc6b0e.zip
Fix #1438
Diffstat (limited to 'src/server')
-rw-r--r--src/server/webfinger.ts38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/server/webfinger.ts b/src/server/webfinger.ts
index e72592351b..ce0cb82fe2 100644
--- a/src/server/webfinger.ts
+++ b/src/server/webfinger.ts
@@ -1,8 +1,9 @@
+import * as mongo from 'mongodb';
import * as Router from 'koa-router';
import config from '../config';
import parseAcct from '../acct/parse';
-import User from '../models/user';
+import User, { IUser } from '../models/user';
// Init router
const router = new Router();
@@ -14,27 +15,38 @@ router.get('/.well-known/webfinger', async ctx => {
}
const resourceLower = ctx.query.resource.toLowerCase();
- const webPrefix = config.url.toLowerCase() + '/@';
let acctLower;
+ let id;
- if (resourceLower.startsWith(webPrefix)) {
- acctLower = resourceLower.slice(webPrefix.length);
+ if (resourceLower.startsWith(config.url.toLowerCase() + '/@')) {
+ acctLower = resourceLower.split('/').pop();
+ } else if (resourceLower.startsWith(config.url.toLowerCase() + '/users/')) {
+ id = new mongo.ObjectID(resourceLower.split('/').pop());
} 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)) {
- ctx.status = 422;
- return;
- }
+ let user: IUser;
+
+ if (acctLower) {
+ const parsedAcctLower = parseAcct(acctLower);
+ if (![null, config.host.toLowerCase()].includes(parsedAcctLower.host)) {
+ ctx.status = 422;
+ return;
+ }
- const user = await User.findOne({
- usernameLower: parsedAcctLower.username,
- host: null
- });
+ user = await User.findOne({
+ usernameLower: parsedAcctLower.username,
+ host: null
+ });
+ } else {
+ user = await User.findOne({
+ _id: id,
+ host: null
+ });
+ }
if (user === null) {
ctx.status = 404;