From 435632857b4fdb7f106b81d7305b2f1b835dba6e Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 26 Feb 2024 20:12:44 +0100 Subject: [PATCH] [backend/federation] Trigger user updates on web & mastodon api calls (ISH-35) --- .../Controllers/Mastodon/AccountController.cs | 2 +- Iceshrimp.Backend/Controllers/UserController.cs | 9 +++++++-- .../Core/Federation/ActivityPub/UserResolver.cs | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Iceshrimp.Backend/Controllers/Mastodon/AccountController.cs b/Iceshrimp.Backend/Controllers/Mastodon/AccountController.cs index 1c10715d..339a8bbe 100644 --- a/Iceshrimp.Backend/Controllers/Mastodon/AccountController.cs +++ b/Iceshrimp.Backend/Controllers/Mastodon/AccountController.cs @@ -47,7 +47,7 @@ public class AccountController( { var user = await db.Users.IncludeCommonProperties().FirstOrDefaultAsync(p => p.Id == id) ?? throw GracefulException.RecordNotFound(); - var res = await userRenderer.RenderAsync(user); + var res = await userRenderer.RenderAsync(await userResolver.GetUpdatedUser(user)); return Ok(res); } diff --git a/Iceshrimp.Backend/Controllers/UserController.cs b/Iceshrimp.Backend/Controllers/UserController.cs index f670ef4f..86c5cfa5 100644 --- a/Iceshrimp.Backend/Controllers/UserController.cs +++ b/Iceshrimp.Backend/Controllers/UserController.cs @@ -15,7 +15,12 @@ namespace Iceshrimp.Backend.Controllers; [EnableRateLimiting("sliding")] [Route("/api/iceshrimp/v1/user/{id}")] [Produces(MediaTypeNames.Application.Json)] -public class UserController(DatabaseContext db, UserRenderer userRenderer, NoteRenderer noteRenderer) : ControllerBase +public class UserController( + DatabaseContext db, + UserRenderer userRenderer, + NoteRenderer noteRenderer, + ActivityPub.UserResolver userResolver +) : ControllerBase { [HttpGet] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(UserResponse))] @@ -26,7 +31,7 @@ public class UserController(DatabaseContext db, UserRenderer userRenderer, NoteR .FirstOrDefaultAsync(p => p.Id == id) ?? throw GracefulException.NotFound("User not found"); - return Ok(userRenderer.RenderOne(user)); + return Ok(userRenderer.RenderOne(await userResolver.GetUpdatedUser(user))); } [HttpGet("notes")] diff --git a/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs b/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs index a7b589cd..3b200fe6 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityPub/UserResolver.cs @@ -192,7 +192,7 @@ public class UserResolver( } } - private async Task GetUpdatedUser(User user) + public async Task GetUpdatedUser(User user) { if (!user.NeedsUpdate) return user; user.LastFetchedAt = DateTime.UtcNow; // Prevent multiple background tasks from being started