From 3ac63e15107fcd86bd61972913d2ae7c801899a2 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Thu, 11 Jul 2024 23:24:48 +0200 Subject: [PATCH] [backend/federation] Respect UserSettings.AlwaysMarkSensitive --- Iceshrimp.Backend/Core/Database/Tables/User.cs | 3 +++ Iceshrimp.Backend/Core/Services/NoteService.cs | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Iceshrimp.Backend/Core/Database/Tables/User.cs b/Iceshrimp.Backend/Core/Database/Tables/User.cs index 7e0296a2..bf4000a7 100644 --- a/Iceshrimp.Backend/Core/Database/Tables/User.cs +++ b/Iceshrimp.Backend/Core/Database/Tables/User.cs @@ -589,6 +589,9 @@ public class User : IEntity HasRenoted(note) || HasVoted(note); + [Projectable] + public bool ProhibitInteractionWith(User user) => IsBlocking(user) || IsBlockedBy(user); + public User WithPrecomputedBlockStatus(bool blocking, bool blockedBy) { PrecomputedIsBlocking = blocking; diff --git a/Iceshrimp.Backend/Core/Services/NoteService.cs b/Iceshrimp.Backend/Core/Services/NoteService.cs index 325d2bdf..ebcd0de0 100644 --- a/Iceshrimp.Backend/Core/Services/NoteService.cs +++ b/Iceshrimp.Backend/Core/Services/NoteService.cs @@ -112,18 +112,16 @@ public class NoteService( var (mentionedUserIds, mentionedLocalUserIds, mentions, remoteMentions, splitDomainMapping) = resolvedMentions ?? await ResolveNoteMentionsAsync(text); - // ReSharper disable EntityFramework.UnsupportedServerSideFunctionCall + // ReSharper disable once EntityFramework.UnsupportedServerSideFunctionCall if (mentionedUserIds.Count > 0) { var blockAcct = await db.Users - .Where(p => mentionedUserIds.Contains(p.Id) && - (p.IsBlocking(user) || p.IsBlockedBy(user))) + .Where(p => mentionedUserIds.Contains(p.Id) && p.ProhibitInteractionWith(user)) .Select(p => p.Acct) .FirstOrDefaultAsync(); if (blockAcct != null) throw GracefulException.Forbidden($"You're not allowed to interact with @{blockAcct}"); } - // ReSharper restore EntityFramework.UnsupportedServerSideFunctionCall List? nodes = null; if (text != null && string.IsNullOrWhiteSpace(text)) @@ -146,6 +144,14 @@ public class NoteService( if ((user.UserSettings?.PrivateMode ?? false) && visibility < Note.NoteVisibility.Followers) visibility = Note.NoteVisibility.Followers; + // Enforce UserSettings.AlwaysMarkSensitive, if configured + if ((user.UserSettings?.AlwaysMarkSensitive ?? false) && (attachments?.Any(p => !p.IsSensitive) ?? false)) + { + foreach (var driveFile in attachments.Where(p => !p.IsSensitive)) driveFile.IsSensitive = true; + await db.DriveFiles.Where(p => attachments.Select(a => a.Id).Contains(p.Id) && !p.IsSensitive) + .ExecuteUpdateAsync(p => p.SetProperty(i => i.IsSensitive, _ => true)); + } + var tags = ResolveHashtags(text, asNote); var mastoReplyUserId = reply?.UserId != user.Id