summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpiuvas <mail@piuvas.net>2025-06-03 12:45:42 -0300
committerpiuvas <mail@piuvas.net>2025-06-03 12:45:42 -0300
commitd8ac2e347df8abf72f6d5789c55534f8030b362d (patch)
tree994b2545819020d7fd56006feaf7d0d66e627b60
parentvalidate type of attributionDomains. (diff)
downloadsharkey-d8ac2e347df8abf72f6d5789c55534f8030b362d.tar.gz
sharkey-d8ac2e347df8abf72f6d5789c55534f8030b362d.tar.bz2
sharkey-d8ac2e347df8abf72f6d5789c55534f8030b362d.zip
improve type validation of attributionDomains.
-rw-r--r--packages/backend/src/core/activitypub/models/ApPersonService.ts5
1 files changed, 3 insertions, 2 deletions
diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts
index ae417b83ac..4832cbc653 100644
--- a/packages/backend/src/core/activitypub/models/ApPersonService.ts
+++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts
@@ -54,6 +54,7 @@ import type { ApLoggerService } from '../ApLoggerService.js';
import type { ApImageService } from './ApImageService.js';
import type { IActor, ICollection, IObject, IOrderedCollection } from '../type.js';
+import { isArray } from 'util';
const nameLength = 128;
const summaryLength = 2048;
@@ -445,7 +446,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
makeNotesFollowersOnlyBefore: (person as any).makeNotesFollowersOnlyBefore ?? null,
makeNotesHiddenBefore: (person as any).makeNotesHiddenBefore ?? null,
emojis,
- attributionDomains: person.attributionDomains?.every(x => typeof x === 'string') ? person.attributionDomains : [],
+ attributionDomains: (Array.isArray(person.attributionDomains) && person.attributionDomains.every(x => typeof x === 'string')) ? person.attributionDomains : [],
})) as MiRemoteUser;
let _description: string | null = null;
@@ -629,7 +630,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
// We use "!== false" to handle incorrect types, missing / null values, and "default to true" logic.
hideOnlineStatus: person.hideOnlineStatus !== false,
isExplorable: person.discoverable !== false,
- attributionDomains: person.attributionDomains?.every(x => typeof x === 'string') ? person.attributionDomains : [],
+ attributionDomains: (Array.isArray(person.attributionDomains) && person.attributionDomains.every(x => typeof x === 'string')) ? person.attributionDomains : [],
...(await this.resolveAvatarAndBanner(exist, person.icon, person.image, person.backgroundUrl).catch(() => ({}))),
} as Partial<MiRemoteUser> & Pick<MiRemoteUser, 'isBot' | 'isCat' | 'speakAsCat' | 'isLocked' | 'movedToUri' | 'alsoKnownAs' | 'isExplorable'>;