[backend/federation] Populate to/cc fields correctly for outgoing Notes

This commit is contained in:
Laura Hausmann 2024-06-21 14:27:12 +02:00
parent 0c59081aee
commit efa2cdc9c7
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -45,21 +45,38 @@ public class NoteRenderer(IOptions<Config.InstanceSection> config, MfmConverter
})
.ToListAsync();
var visible = await db.Users
.Where(p => note.VisibleUserIds.Contains(id) && !note.Mentions.Contains(id))
.IncludeCommonProperties()
.Select(p => new Note.MentionedUser
{
Host = p.Host ?? config.Value.AccountDomain,
Username = p.Username,
Url = p.UserProfile != null ? p.UserProfile.Url : null,
Uri = p.Uri ?? p.GetPublicUri(config.Value)
})
.ToListAsync();
var emoji = note.Emojis.Count != 0
? await db.Emojis.Where(p => note.Emojis.Contains(p.Id) && p.Host == null).ToListAsync()
: [];
var recipients = mentions.Concat(visible).Select(p => new ASObjectBase(p.Uri)).ToList();
var to = note.Visibility switch
{
Note.NoteVisibility.Public => [new ASLink($"{Constants.ActivityStreamsNs}#Public")],
Note.NoteVisibility.Home => [new ASLink($"{userId}/followers")],
Note.NoteVisibility.Followers => [new ASLink($"{userId}/followers")],
Note.NoteVisibility.Specified => mentions.Select(p => new ASObjectBase(p.Uri)).ToList(),
Note.NoteVisibility.Specified => recipients,
_ => []
};
List<ASObjectBase> cc = note.Visibility switch
var cc = note.Visibility switch
{
Note.NoteVisibility.Home => [new ASLink($"{Constants.ActivityStreamsNs}#Public")],
Note.NoteVisibility.Public => [new ASLink($"{userId}/followers"), ..recipients],
Note.NoteVisibility.Home => [new ASLink($"{Constants.ActivityStreamsNs}#Public"), ..recipients],
Note.NoteVisibility.Followers => recipients,
_ => []
};