diff options
Diffstat (limited to 'server/models/activitypub')
-rw-r--r-- | server/models/activitypub/actor.ts | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/server/models/activitypub/actor.ts b/server/models/activitypub/actor.ts index 71db44b2f..58b52ffb1 100644 --- a/server/models/activitypub/actor.ts +++ b/server/models/activitypub/actor.ts | |||
@@ -27,7 +27,7 @@ import { | |||
27 | isActorPublicKeyValid | 27 | isActorPublicKeyValid |
28 | } from '../../helpers/custom-validators/activitypub/actor' | 28 | } from '../../helpers/custom-validators/activitypub/actor' |
29 | import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' | 29 | import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc' |
30 | import { ACTIVITY_PUB, ACTIVITY_PUB_ACTOR_TYPES, CONSTRAINTS_FIELDS, WEBSERVER } from '../../initializers/constants' | 30 | import { ACTIVITY_PUB, ACTIVITY_PUB_ACTOR_TYPES, CONSTRAINTS_FIELDS, SERVER_ACTOR_NAME, WEBSERVER } from '../../initializers/constants' |
31 | import { AccountModel } from '../account/account' | 31 | import { AccountModel } from '../account/account' |
32 | import { AvatarModel } from '../avatar/avatar' | 32 | import { AvatarModel } from '../avatar/avatar' |
33 | import { ServerModel } from '../server/server' | 33 | import { ServerModel } from '../server/server' |
@@ -276,6 +276,8 @@ export class ActorModel extends Model<ActorModel> { | |||
276 | }) | 276 | }) |
277 | VideoChannel: VideoChannelModel | 277 | VideoChannel: VideoChannelModel |
278 | 278 | ||
279 | private static cache: { [ id: string ]: any } = {} | ||
280 | |||
279 | static load (id: number): Bluebird<MActor> { | 281 | static load (id: number): Bluebird<MActor> { |
280 | return ActorModel.unscoped().findByPk(id) | 282 | return ActorModel.unscoped().findByPk(id) |
281 | } | 283 | } |
@@ -342,6 +344,11 @@ export class ActorModel extends Model<ActorModel> { | |||
342 | } | 344 | } |
343 | 345 | ||
344 | static loadLocalByName (preferredUsername: string, transaction?: Transaction): Bluebird<MActorFull> { | 346 | static loadLocalByName (preferredUsername: string, transaction?: Transaction): Bluebird<MActorFull> { |
347 | // The server actor never change, so we can easily cache it | ||
348 | if (preferredUsername === SERVER_ACTOR_NAME && ActorModel.cache[preferredUsername]) { | ||
349 | return Bluebird.resolve(ActorModel.cache[preferredUsername]) | ||
350 | } | ||
351 | |||
345 | const query = { | 352 | const query = { |
346 | where: { | 353 | where: { |
347 | preferredUsername, | 354 | preferredUsername, |
@@ -350,7 +357,15 @@ export class ActorModel extends Model<ActorModel> { | |||
350 | transaction | 357 | transaction |
351 | } | 358 | } |
352 | 359 | ||
353 | return ActorModel.scope(ScopeNames.FULL).findOne(query) | 360 | return ActorModel.scope(ScopeNames.FULL) |
361 | .findOne(query) | ||
362 | .then(actor => { | ||
363 | if (preferredUsername === SERVER_ACTOR_NAME) { | ||
364 | ActorModel.cache[ preferredUsername ] = actor | ||
365 | } | ||
366 | |||
367 | return actor | ||
368 | }) | ||
354 | } | 369 | } |
355 | 370 | ||
356 | static loadByNameAndHost (preferredUsername: string, host: string): Bluebird<MActorFull> { | 371 | static loadByNameAndHost (preferredUsername: string, host: string): Bluebird<MActorFull> { |