From 780ffa076dd3bcf155bab3db35e2d521e6a7599e Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Thu, 22 Feb 2024 17:39:09 +0100 Subject: [PATCH] [backend/masto-client] Reblog endpoint should be idempotent --- .../Controllers/Mastodon/StatusController.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Iceshrimp.Backend/Controllers/Mastodon/StatusController.cs b/Iceshrimp.Backend/Controllers/Mastodon/StatusController.cs index 31748f5d..e6508a28 100644 --- a/Iceshrimp.Backend/Controllers/Mastodon/StatusController.cs +++ b/Iceshrimp.Backend/Controllers/Mastodon/StatusController.cs @@ -129,13 +129,17 @@ public class StatusController( public async Task Renote(string id) { var user = HttpContext.GetUserOrFail(); - var note = await db.Notes.Where(p => p.Id == id) - .IncludeCommonProperties() - .EnsureVisibleFor(user) - .FirstOrDefaultAsync() ?? - throw GracefulException.RecordNotFound(); + if (!await db.Notes.AnyAsync(p => p.RenoteId == id && p.User == user && p.IsPureRenote)) + { + var note = await db.Notes.Where(p => p.Id == id) + .IncludeCommonProperties() + .EnsureVisibleFor(user) + .FirstOrDefaultAsync() ?? + throw GracefulException.RecordNotFound(); + + await noteSvc.CreateNoteAsync(user, Note.NoteVisibility.Followers, renote: note); + } - await noteSvc.CreateNoteAsync(user, Note.NoteVisibility.Followers, renote: note); return await GetNote(id); }