X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fwebfinger.ts;h=da7e880778a07e03abaebe93369f1e395dcfd466;hb=d223dca0cd50010d1c4455e5eec1736b1c591aed;hp=76444fbe305e77e2eec5efb1650fdaa9636efd40;hpb=50d6de9c286abcb34ff4234d56d9cbb803db7665;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/webfinger.ts b/server/helpers/webfinger.ts index 76444fbe3..da7e88077 100644 --- a/server/helpers/webfinger.ts +++ b/server/helpers/webfinger.ts @@ -2,7 +2,9 @@ import * as WebFinger from 'webfinger.js' import { WebFingerData } from '../../shared' import { ActorModel } from '../models/activitypub/actor' import { isTestInstance } from './core-utils' -import { isActivityPubUrlValid } from './custom-validators/activitypub' +import { isActivityPubUrlValid } from './custom-validators/activitypub/misc' +import { WEBSERVER } from '../initializers/constants' +import { MActorFull } from '../types/models' const webfinger = new WebFinger({ webfist_fallback: false, @@ -11,17 +13,33 @@ const webfinger = new WebFinger({ request_timeout: 3000 }) -async function loadActorUrlOrGetFromWebfinger (name: string, host: string) { - const actor = await ActorModel.loadByNameAndHost(name, host) +async function loadActorUrlOrGetFromWebfinger (uriArg: string) { + // Handle strings like @toto@example.com + const uri = uriArg.startsWith('@') ? uriArg.slice(1) : uriArg + + const [ name, host ] = uri.split('@') + let actor: MActorFull + + if (!host || host === WEBSERVER.HOST) { + actor = await ActorModel.loadLocalByName(name) + } else { + actor = await ActorModel.loadByNameAndHost(name, host) + } + if (actor) return actor.url - const webfingerData: WebFingerData = await webfingerLookup(name + '@' + host) + return getUrlFromWebfinger(uri) +} + +async function getUrlFromWebfinger (uri: string) { + const webfingerData: WebFingerData = await webfingerLookup(uri) return getLinkOrThrow(webfingerData) } // --------------------------------------------------------------------------- export { + getUrlFromWebfinger, loadActorUrlOrGetFromWebfinger }