fix checking alsoKnownAs and uri
This commit is contained in:
parent
33851fbab6
commit
0e088cb2e4
|
@ -74,12 +74,12 @@ export class AccountMoveService {
|
||||||
*/
|
*/
|
||||||
@bindThis
|
@bindThis
|
||||||
public async moveFromLocal(src: LocalUser, dst: User): Promise<unknown> {
|
public async moveFromLocal(src: LocalUser, dst: User): Promise<unknown> {
|
||||||
if (!dst.uri) throw new Error('destination uri is empty');
|
const dstUri = this.getUserUri(dst);
|
||||||
|
|
||||||
// add movedToUri to indicate that the user has moved
|
// add movedToUri to indicate that the user has moved
|
||||||
const update = {} as Partial<User>;
|
const update = {} as Partial<User>;
|
||||||
update.alsoKnownAs = src.alsoKnownAs?.concat([dst.uri]) ?? [dst.uri];
|
update.alsoKnownAs = src.alsoKnownAs?.concat([dstUri]) ?? [dstUri];
|
||||||
update.movedToUri = dst.uri;
|
update.movedToUri = dstUri;
|
||||||
await this.usersRepository.update(src.id, update);
|
await this.usersRepository.update(src.id, update);
|
||||||
|
|
||||||
const srcPerson = await this.apRendererService.renderPerson(src);
|
const srcPerson = await this.apRendererService.renderPerson(src);
|
||||||
|
|
|
@ -109,22 +109,27 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
throw new ApiError(meta.errors.noSuchMoveTarget);
|
throw new ApiError(meta.errors.noSuchMoveTarget);
|
||||||
});
|
});
|
||||||
const destination = await this.getterService.getUser(moveTo.id);
|
const destination = await this.getterService.getUser(moveTo.id);
|
||||||
moveTo.uri = this.accountMoveService.getUserUri(destination);
|
const newUri = this.accountMoveService.getUserUri(destination);
|
||||||
|
|
||||||
// update local db
|
// update local db
|
||||||
await this.apPersonService.updatePerson(moveTo.uri);
|
await this.apPersonService.updatePerson(newUri);
|
||||||
// retrieve updated user
|
// retrieve updated user
|
||||||
moveTo = await this.apPersonService.resolvePerson(moveTo.uri);
|
moveTo = await this.apPersonService.resolvePerson(newUri);
|
||||||
|
|
||||||
// make sure that the user has indicated the old account as an alias
|
// make sure that the user has indicated the old account as an alias
|
||||||
const fromUrl = `${this.config.url}/users/${me.id}`;
|
const fromUrl = `${this.config.url}/users/${me.id}`;
|
||||||
let allowed = false;
|
let allowed = false;
|
||||||
moveTo.alsoKnownAs?.forEach((elem) => {
|
if (moveTo.alsoKnownAs) {
|
||||||
if (fromUrl.includes(elem)) allowed = true;
|
for (const knownAs of moveTo.alsoKnownAs) {
|
||||||
});
|
if (knownAs.includes(fromUrl)) {
|
||||||
|
allowed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// abort if unintended
|
// abort if unintended
|
||||||
if (!(allowed && moveTo.uri && fromUrl)) throw new ApiError(meta.errors.destinationAccountForbids);
|
if (!allowed) throw new ApiError(meta.errors.destinationAccountForbids);
|
||||||
|
|
||||||
return await this.accountMoveService.moveFromLocal(me, moveTo);
|
return await this.accountMoveService.moveFromLocal(me, moveTo);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue