merge: Prevent "mark instance as NSFW" from producing hellspawns (!749)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/749 Approved-by: Tess K <me@thvxl.se> Approved-by: dakkar <dakkar@thenautilus.net>
This commit is contained in:
commit
241b186a8a
|
@ -1,5 +1,38 @@
|
|||
# Upgrade Notes
|
||||
|
||||
## 2024.10.0
|
||||
|
||||
### Hellspawns
|
||||
|
||||
Sharkey versions before 2024.10 suffered from a bug in the "Mark instance as NSFW" feature.
|
||||
When a user from such an instance boosted a note, the boost would be converted to a hellspawn (pure renote with Content Warning).
|
||||
Hellspawns are buggy and do not properly federate, so it may be desirable to correct any that already exist in the database.
|
||||
The following script will correct any local or remote hellspawns in the database.
|
||||
|
||||
```postgresql
|
||||
/* Remove "instance is marked as NSFW" hellspawns */
|
||||
UPDATE "note"
|
||||
SET "cw" = null
|
||||
WHERE
|
||||
"renoteId" IS NOT NULL
|
||||
AND "text" IS NULL
|
||||
AND "cw" = 'Instance is marked as NSFW'
|
||||
AND "replyId" IS NULL
|
||||
AND "hasPoll" = false
|
||||
AND "fileIds" = '{}';
|
||||
|
||||
/* Fix legacy / user-created hellspawns */
|
||||
UPDATE "note"
|
||||
SET "text" = '.'
|
||||
WHERE
|
||||
"renoteId" IS NOT NULL
|
||||
AND "text" IS NULL
|
||||
AND "cw" IS NOT NULL
|
||||
AND "replyId" IS NULL
|
||||
AND "hasPoll" = false
|
||||
AND "fileIds" = '{}';
|
||||
```
|
||||
|
||||
## 2024.9.0
|
||||
|
||||
### Following Feed
|
||||
|
|
|
@ -146,6 +146,8 @@ type Option = {
|
|||
app?: MiApp | null;
|
||||
};
|
||||
|
||||
export type PureRenoteOption = Option & { renote: MiNote } & ({ text?: null } | { cw?: null } | { reply?: null } | { poll?: null } | { files?: null | [] });
|
||||
|
||||
@Injectable()
|
||||
export class NoteCreateService implements OnApplicationShutdown {
|
||||
#shutdownController = new AbortController();
|
||||
|
@ -412,7 +414,7 @@ export class NoteCreateService implements OnApplicationShutdown {
|
|||
|
||||
if (user.host && !data.cw) {
|
||||
await this.federatedInstanceService.fetch(user.host).then(async i => {
|
||||
if (i.isNSFW) {
|
||||
if (i.isNSFW && !this.isPureRenote(data)) {
|
||||
data.cw = 'Instance is marked as NSFW';
|
||||
}
|
||||
});
|
||||
|
@ -821,6 +823,11 @@ export class NoteCreateService implements OnApplicationShutdown {
|
|||
if (!user.noindex) this.index(note);
|
||||
}
|
||||
|
||||
@bindThis
|
||||
public isPureRenote(note: Option): note is PureRenoteOption {
|
||||
return this.isRenote(note) && !this.isQuote(note);
|
||||
}
|
||||
|
||||
@bindThis
|
||||
private isRenote(note: Option): note is Option & { renote: MiNote } {
|
||||
return note.renote != null;
|
||||
|
|
|
@ -442,7 +442,7 @@ export class NoteEditService implements OnApplicationShutdown {
|
|||
|
||||
if (user.host && !data.cw) {
|
||||
await this.federatedInstanceService.fetch(user.host).then(async i => {
|
||||
if (i.isNSFW) {
|
||||
if (i.isNSFW && !this.noteCreateService.isPureRenote(data)) {
|
||||
data.cw = 'Instance is marked as NSFW';
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue