diff options
| author | DW <36347199+chocological00@users.noreply.github.com> | 2020-05-16 11:49:46 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-17 00:49:46 +0900 |
| commit | f6cfa5cbb4b7a28f3fe2e1417d5ac0771f772e12 (patch) | |
| tree | 5b1dac990de76bfc8b0a77b5d44cbcc09aef059c /src/services/drive/delete-file.ts | |
| parent | Merge branch 'develop' of https://github.com/syuilo/misskey into develop (diff) | |
| download | sharkey-f6cfa5cbb4b7a28f3fe2e1417d5ac0771f772e12.tar.gz sharkey-f6cfa5cbb4b7a28f3fe2e1417d5ac0771f772e12.tar.bz2 sharkey-f6cfa5cbb4b7a28f3fe2e1417d5ac0771f772e12.zip | |
Fix CASCADE-related problems (#6374)
* Fix renotes remaining on remote when CASCADE is invoked
* Fix CASCADE-invoked deletion not being federated to relays
Co-authored-by: DW <chocological00@gitlab.com>
Diffstat (limited to 'src/services/drive/delete-file.ts')
| -rw-r--r-- | src/services/drive/delete-file.ts | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/services/drive/delete-file.ts b/src/services/drive/delete-file.ts index 5f691bd6b4..f9141ebaac 100644 --- a/src/services/drive/delete-file.ts +++ b/src/services/drive/delete-file.ts @@ -12,6 +12,8 @@ import renderDelete from '../../remote/activitypub/renderer/delete'; import renderTombstone from '../../remote/activitypub/renderer/tombstone'; import config from '../../config'; import { deliverToFollowers } from '../../remote/activitypub/deliver-manager'; +import { Brackets } from 'typeorm'; +import { deliverToRelays } from '../relay'; export async function deleteFile(file: DriveFile, isExpired = false) { if (file.storedInternal) { @@ -95,11 +97,13 @@ async function postProcess(file: DriveFile, isExpired = false) { if (!Users.isLocalUser(cascadingNote.user)) continue; const content = renderActivity(renderDelete(renderTombstone(`${config.url}/notes/${cascadingNote.id}`), cascadingNote.user)); deliverToFollowers(cascadingNote.user, content); // federate delete msg + deliverToRelays(cascadingNote.user, content); } if (!relatedNote.user) continue; if (Users.isLocalUser(relatedNote.user)) { const content = renderActivity(renderDelete(renderTombstone(`${config.url}/notes/${relatedNote.id}`), relatedNote.user)); deliverToFollowers(relatedNote.user, content); + deliverToRelays(relatedNote.user, content); } } Notes.createQueryBuilder().delete() @@ -145,6 +149,10 @@ async function findCascadingNotes(note: Note) { const recursive = async (noteId: string) => { const query = Notes.createQueryBuilder('note') .where('note.replyId = :noteId', { noteId }) + .orWhere(new Brackets(q => { + q.where('note.renoteId = :noteId', { noteId }) + .andWhere('note.text IS NOT NULL'); + })) .leftJoinAndSelect('note.user', 'user'); const replies = await query.getMany(); for (const reply of replies) { |