From 2858f66ad4fd2ae97b1d587e84582456113343f9 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Wed, 26 Jun 2024 16:18:54 +0200 Subject: [PATCH] [backend/federation] Make sure DateTime objects are being converted to Utc when (de)serializing activities --- .../Core/Extensions/MvcBuilderExtensions.cs | 10 ++++++++++ .../Core/Federation/ActivityStreams/LdHelpers.cs | 4 ++-- Iceshrimp.Backend/Startup.cs | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Iceshrimp.Backend/Core/Extensions/MvcBuilderExtensions.cs b/Iceshrimp.Backend/Core/Extensions/MvcBuilderExtensions.cs index 2c53bdaa..d408b4e8 100644 --- a/Iceshrimp.Backend/Core/Extensions/MvcBuilderExtensions.cs +++ b/Iceshrimp.Backend/Core/Extensions/MvcBuilderExtensions.cs @@ -40,6 +40,16 @@ public static class MvcBuilderExtensions return builder; } + public static IMvcBuilder ConfigureNewtonsoftJson(this IMvcBuilder builder) + { + Newtonsoft.Json.JsonConvert.DefaultSettings = () => new Newtonsoft.Json.JsonSerializerSettings + { + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc + }; + + return builder; + } + public static IMvcBuilder AddModelBindingProviders(this IMvcBuilder builder) { builder.Services.AddOptions() diff --git a/Iceshrimp.Backend/Core/Federation/ActivityStreams/LdHelpers.cs b/Iceshrimp.Backend/Core/Federation/ActivityStreams/LdHelpers.cs index b296b82c..07cac4f9 100644 --- a/Iceshrimp.Backend/Core/Federation/ActivityStreams/LdHelpers.cs +++ b/Iceshrimp.Backend/Core/Federation/ActivityStreams/LdHelpers.cs @@ -56,12 +56,12 @@ public static class LdHelpers public static readonly JsonSerializerSettings JsonSerializerSettings = new() { - NullValueHandling = NullValueHandling.Ignore, DateTimeZoneHandling = DateTimeZoneHandling.Local + NullValueHandling = NullValueHandling.Ignore, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; private static readonly JsonSerializer JsonSerializer = new() { - NullValueHandling = NullValueHandling.Ignore, DateTimeZoneHandling = DateTimeZoneHandling.Local + NullValueHandling = NullValueHandling.Ignore, DateTimeZoneHandling = DateTimeZoneHandling.Utc }; private static IEnumerable ASForceArray => ["tag", "attachment", "to", "cc", "bcc", "bto"]; diff --git a/Iceshrimp.Backend/Startup.cs b/Iceshrimp.Backend/Startup.cs index bc06aa1d..33f4d0a4 100644 --- a/Iceshrimp.Backend/Startup.cs +++ b/Iceshrimp.Backend/Startup.cs @@ -12,6 +12,7 @@ builder.Configuration.AddCustomConfiguration(); builder.Services.AddControllers() .AddNewtonsoftJson() //TODO: remove once dotNetRdf switches to System.Text.Json (or we switch to LinkedData.NET) + .ConfigureNewtonsoftJson() .AddMultiFormatter() .AddModelBindingProviders() .AddValueProviderFactories()