Stricter host-meta spec compliance in WebFinger

This commit is contained in:
Laura Hausmann 2023-09-06 01:29:38 +02:00
parent 59571f2372
commit 80035049f9
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -33,15 +33,19 @@ async function hostMetaToWebFingerTemplate(url: string) {
headers: Object.assign( headers: Object.assign(
{ {
"User-Agent": config.userAgent, "User-Agent": config.userAgent,
Accept: "application/xml, text/xml, */*", Accept: "application/xrd+xml.",
}, },
{}, {},
), ),
timeout: 10000, timeout: 10000,
}); });
const parser = new XMLParser({ignoreAttributes: false}); const options = {
ignoreAttributes: false,
isArray: (_name: string, jpath: string) => jpath === 'XRD.Link',
};
const parser = new XMLParser(options);
const hostMeta = parser.parse(await res.text()); const hostMeta = parser.parse(await res.text());
const template = hostMeta['XRD']['Link']['@_template']; const template = (hostMeta['XRD']['Link'] as Array<any>).filter(p => p['@_rel'] === 'lrdd')[0]['@_template'];
return template.indexOf('{uri}') < 0 ? null : template; return template.indexOf('{uri}') < 0 ? null : template;
} }
catch { catch {