publicKeyに配列が入ってもいいようにする

https://github.com/misskey-dev/misskey/pull/13950
This commit is contained in:
tamaina 2024-06-11 15:32:55 +09:00
parent 3717ff35a3
commit 64004fdea2
2 changed files with 16 additions and 7 deletions

View file

@ -184,15 +184,24 @@ export class ApPersonService implements OnModuleInit {
throw new Error('invalid Actor: id has different host'); throw new Error('invalid Actor: id has different host');
} }
if (x.publicKey) { if (x.publicKey && typeof x.publicKey.id !== 'string') {
if (typeof x.publicKey.id !== 'string') {
throw new Error('invalid Actor: publicKey.id is not a string');
}
const publicKeyIdHost = this.punyHost(x.publicKey.id); const publicKeyIdHost = this.punyHost(x.publicKey.id);
if (publicKeyIdHost !== expectHost) { if (publicKeyIdHost !== expectHost) {
throw new Error('invalid Actor: publicKey.id has different host'); throw new Error('invalid Actor: publicKey.id has different host');
} }
} else if (x.publicKey && Array.isArray(x.publicKey)) {
for (const publicKey of x.publicKey) {
if (typeof publicKey.id !== 'string') {
throw new Error('invalid Actor: publicKey.id is not a string');
}
const publicKeyIdHost = this.punyHost(publicKey.id);
if (publicKeyIdHost !== expectHost) {
throw new Error('invalid Actor: publicKey.id has different host');
}
}
} else if (x.publicKey) {
throw new Error('invalid Actor: publicKey is not an object or an array');
} }
if (x.additionalPublicKeys) { if (x.additionalPublicKeys) {
@ -408,7 +417,7 @@ export class ApPersonService implements OnModuleInit {
if (person.publicKey) { if (person.publicKey) {
const publicKeys = new Map<string, IKey>([ const publicKeys = new Map<string, IKey>([
...(person.additionalPublicKeys ? person.additionalPublicKeys.map(key => [key.id, key] as const) : []), ...(person.additionalPublicKeys ? person.additionalPublicKeys.map(key => [key.id, key] as const) : []),
[person.publicKey.id, person.publicKey], ...(Array.isArray(person.publicKey) ? person.publicKey.map(key => [key.id, key] as const) : [[person.publicKey.id, person.publicKey]] as const),
]); ]);
await transactionalEntityManager.save(Array.from(publicKeys.values(), key => new MiUserPublickey({ await transactionalEntityManager.save(Array.from(publicKeys.values(), key => new MiUserPublickey({

View file

@ -169,7 +169,7 @@ export interface IActor extends IObject {
discoverable?: boolean; discoverable?: boolean;
inbox: string; inbox: string;
sharedInbox?: string; // 後方互換性のため sharedInbox?: string; // 後方互換性のため
publicKey?: IKey; publicKey?: IKey | IKey[];
additionalPublicKeys?: IKey[]; additionalPublicKeys?: IKey[];
followers?: string | ICollection | IOrderedCollection; followers?: string | ICollection | IOrderedCollection;
following?: string | ICollection | IOrderedCollection; following?: string | ICollection | IOrderedCollection;