X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=server%2Flib%2Factivitypub%2Factor.ts;h=f27733418fc83bc176394a0a6bd3f73f92c94742;hb=16f29007dc6ad9c539195d7a7c1cde45d626ce91;hp=b0cf9bb17b0c31652afad0b150add4e52f6474b1;hpb=d5b7d9110dd637a7f67ce9e430145314812a8df1;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/actor.ts b/server/lib/activitypub/actor.ts index b0cf9bb17..f27733418 100644 --- a/server/lib/activitypub/actor.ts +++ b/server/lib/activitypub/actor.ts @@ -6,20 +6,21 @@ import * as uuidv4 from 'uuid/v4' import { ActivityPubActor, ActivityPubActorType } from '../../../shared/models/activitypub' import { ActivityPubAttributedTo } from '../../../shared/models/activitypub/objects' import { getActorUrl } from '../../helpers/activitypub' -import { isActorObjectValid } from '../../helpers/custom-validators/activitypub/actor' +import { isActorObjectValid, normalizeActor } from '../../helpers/custom-validators/activitypub/actor' import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' import { retryTransactionWrapper, updateInstanceWithAnother } from '../../helpers/database-utils' import { logger } from '../../helpers/logger' import { createPrivateAndPublicKeys } from '../../helpers/peertube-crypto' import { doRequest, doRequestAndSaveToFile } from '../../helpers/requests' import { getUrlFromWebfinger } from '../../helpers/webfinger' -import { IMAGE_MIMETYPE_EXT, CONFIG, sequelizeTypescript, CONSTRAINTS_FIELDS } from '../../initializers' +import { CONFIG, IMAGE_MIMETYPE_EXT, sequelizeTypescript } from '../../initializers' import { AccountModel } from '../../models/account/account' import { ActorModel } from '../../models/activitypub/actor' import { AvatarModel } from '../../models/avatar/avatar' import { ServerModel } from '../../models/server/server' import { VideoChannelModel } from '../../models/video/video-channel' -import { truncate } from 'lodash' +import { JobQueue } from '../job-queue' +import { getServerActor } from '../../helpers/utils' // Set account keys, this could be long so process after the account creation and do not block the client function setAsyncActorKeys (actor: ActorModel) { @@ -170,22 +171,19 @@ async function fetchAvatarIfExists (actorJSON: ActivityPubActor) { return undefined } -function normalizeActor (actor: any) { - if (!actor) return - - if (!actor.url || typeof actor.url !== 'string') { - actor.url = actor.url.href || actor.url.url +async function addFetchOutboxJob (actor: ActorModel) { + // Don't fetch ourselves + const serverActor = await getServerActor() + if (serverActor.id === actor.id) { + logger.error('Cannot fetch our own outbox!') + return undefined } - if (actor.summary && typeof actor.summary === 'string') { - actor.summary = truncate(actor.summary, { length: CONSTRAINTS_FIELDS.USERS.DESCRIPTION.max }) - - if (actor.summary.length < CONSTRAINTS_FIELDS.USERS.DESCRIPTION.min) { - actor.summary = null - } + const payload = { + uris: [ actor.outboxUrl ] } - return + return JobQueue.Instance.createJob({ type: 'activitypub-http-fetcher', payload }) } export { @@ -196,7 +194,7 @@ export { fetchAvatarIfExists, updateActorInstance, updateActorAvatarInstance, - normalizeActor + addFetchOutboxJob } // --------------------------------------------------------------------------- @@ -353,7 +351,7 @@ async function saveVideoChannel (actor: ActorModel, result: FetchRemoteActorResu return videoChannelCreated } -async function refreshActorIfNeeded (actor: ActorModel) { +async function refreshActorIfNeeded (actor: ActorModel): Promise { if (!actor.isOutdated()) return actor try {