Skip to content
Snippets Groups Projects
Commit 9a71a8b9 authored by Akihiko Odaki's avatar Akihiko Odaki
Browse files

Implement WebFinger

parent e0a736a2
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@ import * as morgan from 'morgan';
import Accesses from 'accesses';
import activityPub from './activitypub';
import webFinger from './webfinger';
import log from './log-request';
import config from '../conf';
......@@ -55,6 +56,7 @@ app.use((req, res, next) => {
app.use('/api', require('./api'));
app.use('/files', require('./file'));
app.use(activityPub);
app.use(webFinger);
app.use(require('./web'));
function createServer() {
......
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;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment