diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts index f233346395..28cbdb1ff7 100644 --- a/src/remote/activitypub/models/person.ts +++ b/src/remote/activitypub/models/person.ts @@ -47,16 +47,28 @@ export async function createPerson(value: any, resolver?: Resolver): Promise<IUs const object = await resolver.resolve(value) as any; - if ( - object == null || - object.type !== 'Person' || - typeof object.preferredUsername !== 'string' || - typeof object.inbox !== 'string' || - !validateUsername(object.preferredUsername) || - !isValidName(object.name == '' ? null : object.name) - ) { - log(`invalid person: ${JSON.stringify(object, null, 2)}`); - throw new Error('invalid person'); + if (object == null) { + throw new Error('invalid person: object is null'); + } + + if (object.type != 'Person' && object.type != 'Service') { + throw new Error('invalid person: object is not a person or service'); + } + + if (typeof object.preferredUsername !== 'string') { + throw new Error('invalid person: preferredUsername is not a string'); + } + + if (typeof object.inbox !== 'string') { + throw new Error('invalid person: inbox is not a string'); + } + + if (!validateUsername(object.preferredUsername)) { + throw new Error('invalid person: invalid username'); + } + + if (!isValidName(object.name == '' ? null : object.name)) { + throw new Error('invalid person: invalid name'); } const person: IPerson = object; diff --git a/src/remote/activitypub/renderer/person.ts b/src/remote/activitypub/renderer/person.ts index 8825c56c25..6ee69cbae7 100644 --- a/src/remote/activitypub/renderer/person.ts +++ b/src/remote/activitypub/renderer/person.ts @@ -7,7 +7,7 @@ export default (user: ILocalUser) => { const id = `${config.url}/users/${user._id}`; return { - type: 'Person', + type: user.isBot ? 'Service' : 'Person', id, inbox: `${id}/inbox`, outbox: `${id}/outbox`,