X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fwebfinger.ts;h=688bf2bab8106ed1f2983e4f511799e5d062d2d3;hb=2769e297ca6703f761f9b57792585eb1fc5aac49;hp=31417e72883469d31d904ddcba2d63b72d2b003a;hpb=608624252466acf9f1d9ee1c1170bd4fe4d18d18;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/webfinger.ts b/server/helpers/webfinger.ts index 31417e728..688bf2bab 100644 --- a/server/helpers/webfinger.ts +++ b/server/helpers/webfinger.ts @@ -1,9 +1,8 @@ import * as WebFinger from 'webfinger.js' - -import { isTestInstance } from './core-utils' -import { isActivityPubUrlValid } from './custom-validators' import { WebFingerData } from '../../shared' -import { fetchRemoteAccountAndCreateServer } from './activitypub' +import { ActorModel } from '../models/activitypub/actor' +import { isTestInstance } from './core-utils' +import { isActivityPubUrlValid } from './custom-validators/activitypub/misc' const webfinger = new WebFinger({ webfist_fallback: false, @@ -12,30 +11,38 @@ const webfinger = new WebFinger({ request_timeout: 3000 }) -async function getAccountFromWebfinger (nameWithHost: string) { - const webfingerData: WebFingerData = await webfingerLookup(nameWithHost) - - if (Array.isArray(webfingerData.links) === false) throw new Error('WebFinger links is not an array.') - - const selfLink = webfingerData.links.find(l => l.rel === 'self') - if (selfLink === undefined || isActivityPubUrlValid(selfLink.href) === false) { - throw new Error('Cannot find self link or href is not a valid URL.') - } +async function loadActorUrlOrGetFromWebfinger (name: string, host: string) { + const actor = await ActorModel.loadByNameAndHost(name, host) + if (actor) return actor.url - const res = await fetchRemoteAccountAndCreateServer(selfLink.href) - if (res === undefined) throw new Error('Cannot fetch and create server of remote account ' + selfLink.href) + return getUrlFromWebfinger(name, host) +} - return res.account +async function getUrlFromWebfinger (name: string, host: string) { + const webfingerData: WebFingerData = await webfingerLookup(name + '@' + host) + return getLinkOrThrow(webfingerData) } // --------------------------------------------------------------------------- export { - getAccountFromWebfinger + getUrlFromWebfinger, + loadActorUrlOrGetFromWebfinger } // --------------------------------------------------------------------------- +function getLinkOrThrow (webfingerData: WebFingerData) { + if (Array.isArray(webfingerData.links) === false) throw new Error('WebFinger links is not an array.') + + const selfLink = webfingerData.links.find(l => l.rel === 'self') + if (selfLink === undefined || isActivityPubUrlValid(selfLink.href) === false) { + throw new Error('Cannot find self link or href is not a valid URL.') + } + + return selfLink.href +} + function webfingerLookup (nameWithHost: string) { return new Promise((res, rej) => { webfinger.lookup(nameWithHost, (err, p) => {