oh-my-posh/website/api/webfinger/index.js
2023-04-28 11:13:52 +02:00

84 lines
2 KiB
JavaScript

// GET https://${MASTODON_DOMAIN}/.well-known/webfinger?resource=acct:${MASTODON_USER}@${MASTODON_DOMAIN}
function trimPrefix(str, prefix) {
if (str.startsWith(prefix)) {
return str.slice(prefix.length)
}
return str
}
function webfinger(username) {
return {
"subject": `acct:${username}@hachyderm.io`,
"aliases": [
`https://hachyderm.io/@${username}`,
`https://hachyderm.io/users/${username}`
],
"links": [
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": `https://hachyderm.io/@${username}`
},
{
"rel": "self",
"type": "application/activity+json",
"href": `https://hachyderm.io/users/${username}`
},
{
"rel": "http://ostatus.org/schema/1.0/subscribe",
"template": "https://hachyderm.io/authorize_interaction?uri={uri}"
}
]
};
}
module.exports = async function (context, req) {
context.log('Webfinger function processed a request');
try {
let resource = req.query.resource;
if (!resource) {
resource = "[email protected]";
}
resource = trimPrefix(resource, "acct:");
context.log(`Creating Mastodon user info for ${resource}`);
let body;
switch (resource) {
case "[email protected]":
body = webfinger("releasebot");
break;
case "[email protected]":
body = webfinger("jandedobbeleer");
break;
default:
context.log(`Unknown resource: ${resource}`);
context.res = {
body: "Unknown resource",
status: 400
};
return;
}
// return body as application/jrd+json
context.res = {
body: body,
headers: {
"Content-Type": "application/jrd+json"
}
};
} catch (error) {
context.log(error);
context.res = {
body: {
"message": (error.message) ? error.message : "unable to create webfinger"
},
status: 500
};
}
}