X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=server%2Flib%2Factivitypub%2Factor.ts;h=9257d7d209843ac75c763ef09dff0caee661eae2;hb=4a9e71c2b1ef57de01cd04984348b3957ebbc21d;hp=5773fc34fc9d5c6987b18dda58deebab139a198e;hpb=0f320037e689b2778959c12ddd4ce790f6e4ae4f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/actor.ts b/server/lib/activitypub/actor.ts index 5773fc34f..9257d7d20 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) { @@ -61,18 +62,10 @@ async function getOrCreateActorAndServerAndModel (activityActor: string | Activi } } - const options = { - arguments: [ result, ownerActor ], - errorMessage: 'Cannot save actor and server with many retries.' - } - actor = await retryTransactionWrapper(saveActorAndServerAndModelIfNotExist, options) + actor = await retryTransactionWrapper(saveActorAndServerAndModelIfNotExist, result, ownerActor) } - const options = { - arguments: [ actor ], - errorMessage: 'Cannot refresh actor if needed with many retries.' - } - return retryTransactionWrapper(refreshActorIfNeeded, options) + return retryTransactionWrapper(refreshActorIfNeeded, actor) } function buildActorInstance (type: ActivityPubActorType, url: string, preferredUsername: string, uuid?: string) { @@ -170,22 +163,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 +186,7 @@ export { fetchAvatarIfExists, updateActorInstance, updateActorAvatarInstance, - normalizeActor + addFetchOutboxJob } // ---------------------------------------------------------------------------