fix(backend): handle corner case where a user has multiple pubkeys
一人のユーザが複数の公開鍵を持つコーナーケースを処理
This commit is contained in:
parent
43cccaaee9
commit
a143a5cc48
|
@ -183,13 +183,16 @@ export class ApPersonService implements OnModuleInit {
|
|||
}
|
||||
|
||||
if (x.publicKey) {
|
||||
if (typeof x.publicKey.id !== 'string') {
|
||||
throw new Error('invalid Actor: publicKey.id is not a string');
|
||||
}
|
||||
const publicKeys = Array.isArray(x.publicKey) ? x.publicKey : [x.publicKey];
|
||||
for (const publicKey of publicKeys) {
|
||||
if (typeof publicKey.id !== 'string') {
|
||||
throw new Error('invalid Actor: publicKey.id is not a string');
|
||||
}
|
||||
|
||||
const publicKeyIdHost = this.punyHost(x.publicKey.id);
|
||||
if (publicKeyIdHost !== expectHost) {
|
||||
throw new Error('invalid Actor: publicKey.id has different host');
|
||||
const publicKeyIdHost = this.punyHost(publicKey.id);
|
||||
if (publicKeyIdHost !== expectHost) {
|
||||
throw new Error('invalid Actor: publicKey.id has different host');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,10 +359,13 @@ export class ApPersonService implements OnModuleInit {
|
|||
}));
|
||||
|
||||
if (person.publicKey) {
|
||||
// TODO: 一人のユーザが複数の公開鍵を持っている場合があるので、MiUserPublicKeyの主キーもuserIdから(userId, keyId)に変更する必要があるかも…?
|
||||
// As a user can have multiple public keys, it might be better to change MiUserPublicKey's primary key from userId to (userId, keyId).
|
||||
const publicKey = Array.isArray(person.publicKey) ? person.publicKey[0] : person.publicKey;
|
||||
await transactionalEntityManager.save(new MiUserPublickey({
|
||||
userId: user.id,
|
||||
keyId: person.publicKey.id,
|
||||
keyPem: person.publicKey.publicKeyPem,
|
||||
keyId: publicKey.id,
|
||||
keyPem: publicKey.publicKeyPem,
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue