diff --git a/src/BSLManager/Tools/SettingsManager.cs b/src/BSLManager/Tools/SettingsManager.cs index 4763822..87daeba 100644 --- a/src/BSLManager/Tools/SettingsManager.cs +++ b/src/BSLManager/Tools/SettingsManager.cs @@ -1,8 +1,8 @@ using System; using System.IO; +using System.Text.Json; using System.Runtime.CompilerServices; using BirdsiteLive.Common.Settings; -using Newtonsoft.Json; namespace BSLManager.Tools { @@ -94,7 +94,7 @@ namespace BSLManager.Tools if (!File.Exists(LocalFileName)) return null; var jsonContent = File.ReadAllText(LocalFileName); - var content = JsonConvert.DeserializeObject(jsonContent); + var content = JsonSerializer.Deserialize(jsonContent); return content; } catch (Exception) @@ -105,7 +105,7 @@ namespace BSLManager.Tools private void SaveLocalSettings(LocalSettingsData data) { - var jsonContent = JsonConvert.SerializeObject(data); + var jsonContent = JsonSerializer.Serialize(data); File.WriteAllText(LocalFileName, jsonContent); } } diff --git a/src/BirdsiteLive.ActivityPub/ApDeserializer.cs b/src/BirdsiteLive.ActivityPub/ApDeserializer.cs index 169bbe6..ba60c29 100644 --- a/src/BirdsiteLive.ActivityPub/ApDeserializer.cs +++ b/src/BirdsiteLive.ActivityPub/ApDeserializer.cs @@ -1,6 +1,7 @@ using System; using BirdsiteLive.ActivityPub.Models; -using Newtonsoft.Json; +using System.Text.Json.Serialization; +using System.Text.Json; namespace BirdsiteLive.ActivityPub { @@ -10,22 +11,21 @@ namespace BirdsiteLive.ActivityPub { try { - var activity = JsonConvert.DeserializeObject(json); + var activity = JsonSerializer.Deserialize(json); switch (activity.type) { case "Follow": - return JsonConvert.DeserializeObject(json); + return JsonSerializer.Deserialize(json); case "Undo": - var a = JsonConvert.DeserializeObject(json); + var a = JsonSerializer.Deserialize(json); if(a.apObject.type == "Follow") - return JsonConvert.DeserializeObject(json); + return JsonSerializer.Deserialize(json); break; case "Delete": - return JsonConvert.DeserializeObject(json); + return JsonSerializer.Deserialize(json); case "Accept": - var accept = JsonConvert.DeserializeObject(json); - //var acceptType = JsonConvert.DeserializeObject(accept.apObject); - switch ((accept.apObject as dynamic).type.ToString()) + var accept = JsonSerializer.Deserialize(json); + switch (accept.apObject.type) { case "Follow": var acceptFollow = new ActivityAcceptFollow() @@ -34,13 +34,13 @@ namespace BirdsiteLive.ActivityPub id = accept.id, actor = accept.actor, context = accept.context, - apObject = new ActivityFollow() + apObject = new NestedActivity() { - id = (accept.apObject as dynamic).id?.ToString(), - type = (accept.apObject as dynamic).type?.ToString(), - actor = (accept.apObject as dynamic).actor?.ToString(), - context = (accept.apObject as dynamic).context?.ToString(), - apObject = (accept.apObject as dynamic).@object?.ToString() + id = accept.apObject.id, + type = accept.apObject.type, + actor = accept.apObject.actor, + context = accept.apObject.context, + apObject = accept.apObject.apObject, } }; return acceptFollow; @@ -58,7 +58,7 @@ namespace BirdsiteLive.ActivityPub private class Ac : Activity { - [JsonProperty("object")] + [JsonPropertyName("object")] public Activity apObject { get; set; } } } diff --git a/src/BirdsiteLive.ActivityPub/BirdsiteLive.ActivityPub.csproj b/src/BirdsiteLive.ActivityPub/BirdsiteLive.ActivityPub.csproj index e046b1c..ec55c83 100644 --- a/src/BirdsiteLive.ActivityPub/BirdsiteLive.ActivityPub.csproj +++ b/src/BirdsiteLive.ActivityPub/BirdsiteLive.ActivityPub.csproj @@ -6,7 +6,6 @@ - diff --git a/src/BirdsiteLive.ActivityPub/Converters/ContextArrayConverter.cs b/src/BirdsiteLive.ActivityPub/Converters/ContextArrayConverter.cs deleted file mode 100644 index 21e139f..0000000 --- a/src/BirdsiteLive.ActivityPub/Converters/ContextArrayConverter.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using Newtonsoft.Json; - -namespace BirdsiteLive.ActivityPub.Converters -{ - public class ContextArrayConverter : JsonConverter - { - public override bool CanWrite { get { return false; } } - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - throw new NotImplementedException(); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - var result = new List(); - - var list = serializer.Deserialize>(reader); - foreach (var l in list) - { - if (l is string s) - result.Add(s); - else - { - var str = JsonConvert.SerializeObject(l); - result.Add(str); - } - } - - return result.ToArray(); - } - - public override bool CanConvert(Type objectType) - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/Activity.cs b/src/BirdsiteLive.ActivityPub/Models/Activity.cs index 8c78091..e6826fa 100644 --- a/src/BirdsiteLive.ActivityPub/Models/Activity.cs +++ b/src/BirdsiteLive.ActivityPub/Models/Activity.cs @@ -1,17 +1,16 @@ using System.Text.Json.Serialization; -using Newtonsoft.Json; namespace BirdsiteLive.ActivityPub { public class Activity { - [JsonProperty("@context")] + [JsonPropertyName("@context")] public object context { get; set; } public string id { get; set; } public string type { get; set; } public string actor { get; set; } - //[JsonProperty("object")] + //[JsonPropertyName("object")] //public string apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityAccept.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityAccept.cs index 30b8746..34891c7 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityAccept.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityAccept.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityAccept : Activity { - [JsonProperty("object")] - public object apObject { get; set; } + [JsonPropertyName("object")] + public NestedActivity apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptFollow.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptFollow.cs index f833a43..91ec40e 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptFollow.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptFollow.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityAcceptFollow : Activity { - [JsonProperty("object")] - public ActivityFollow apObject { get; set; } + [JsonPropertyName("object")] + public NestedActivity apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptUndoFollow.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptUndoFollow.cs index 9453f25..225e8e5 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptUndoFollow.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityAcceptUndoFollow.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityAcceptUndoFollow : Activity { - [JsonProperty("object")] + [JsonPropertyName("object")] public ActivityUndoFollow apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityCreateNote.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityCreateNote.cs index fe14ac7..9793317 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityCreateNote.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityCreateNote.cs @@ -1,6 +1,5 @@ -using System; -using BirdsiteLive.ActivityPub.Models; -using Newtonsoft.Json; +using BirdsiteLive.ActivityPub.Models; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { @@ -10,7 +9,7 @@ namespace BirdsiteLive.ActivityPub public string[] to { get; set; } public string[] cc { get; set; } - [JsonProperty("object")] + [JsonPropertyName("object")] public Note apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityDelete.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityDelete.cs index deb7e7f..3c64c32 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityDelete.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityDelete.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub.Models { public class ActivityDelete : Activity { - [JsonProperty("object")] - public object apObject { get; set; } + [JsonPropertyName("object")] + public string apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityFollow.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityFollow.cs index 26676f1..e718824 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityFollow.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityFollow.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityFollow : Activity { - [JsonProperty("object")] + [JsonPropertyName("object")] public string apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityRejectFollow.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityRejectFollow.cs index da5d613..a03be8f 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityRejectFollow.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityRejectFollow.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityRejectFollow : Activity { - [JsonProperty("object")] + [JsonPropertyName("object")] public ActivityFollow apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityUndo.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityUndo.cs index 2d98b5d..629bd98 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityUndo.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityUndo.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityUndo : Activity { - [JsonProperty("object")] + [JsonPropertyName("object")] public Activity apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/ActivityUndoFollow.cs b/src/BirdsiteLive.ActivityPub/Models/ActivityUndoFollow.cs index 624988f..054cb23 100644 --- a/src/BirdsiteLive.ActivityPub/Models/ActivityUndoFollow.cs +++ b/src/BirdsiteLive.ActivityPub/Models/ActivityUndoFollow.cs @@ -1,10 +1,10 @@ -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class ActivityUndoFollow : Activity { - [JsonProperty("object")] + [JsonPropertyName("object")] public ActivityFollow apObject { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/Actor.cs b/src/BirdsiteLive.ActivityPub/Models/Actor.cs index 713ea89..e8cc75b 100644 --- a/src/BirdsiteLive.ActivityPub/Models/Actor.cs +++ b/src/BirdsiteLive.ActivityPub/Models/Actor.cs @@ -1,14 +1,12 @@ using System.Net; using BirdsiteLive.ActivityPub.Converters; -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub { public class Actor { - //[JsonPropertyName("@context")] - [JsonProperty("@context")] - [JsonConverter(typeof(ContextArrayConverter))] + [JsonPropertyName("@context")] public string[] context { get; set; } = new[] { "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1" }; public string id { get; set; } public string type { get; set; } diff --git a/src/BirdsiteLive.ActivityPub/Models/Followers.cs b/src/BirdsiteLive.ActivityPub/Models/Followers.cs index 85c44d2..1908086 100644 --- a/src/BirdsiteLive.ActivityPub/Models/Followers.cs +++ b/src/BirdsiteLive.ActivityPub/Models/Followers.cs @@ -1,12 +1,11 @@ using BirdsiteLive.ActivityPub.Converters; -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub.Models { public class Followers { - [JsonProperty("@context")] - [JsonConverter(typeof(ContextArrayConverter))] + [JsonPropertyName("@context")] public string context { get; set; } = "https://www.w3.org/ns/activitystreams"; public string id { get; set; } diff --git a/src/BirdsiteLive.ActivityPub/Models/NestedActivity.cs b/src/BirdsiteLive.ActivityPub/Models/NestedActivity.cs new file mode 100644 index 0000000..f23022c --- /dev/null +++ b/src/BirdsiteLive.ActivityPub/Models/NestedActivity.cs @@ -0,0 +1,16 @@ +using System.Text.Json.Serialization; + +namespace BirdsiteLive.ActivityPub +{ + public class NestedActivity + { + [JsonPropertyName("@context")] + public object context { get; set; } + public string id { get; set; } + public string type { get; set; } + public string actor { get; set; } + + [JsonPropertyName("object")] + public string apObject { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive.ActivityPub/Models/Note.cs b/src/BirdsiteLive.ActivityPub/Models/Note.cs index d7e158d..a6b1a9e 100644 --- a/src/BirdsiteLive.ActivityPub/Models/Note.cs +++ b/src/BirdsiteLive.ActivityPub/Models/Note.cs @@ -1,12 +1,10 @@ -using BirdsiteLive.ActivityPub.Converters; -using Newtonsoft.Json; +using System.Text.Json.Serialization; namespace BirdsiteLive.ActivityPub.Models { public class Note { - [JsonProperty("@context")] - [JsonConverter(typeof(ContextArrayConverter))] + [JsonPropertyName("@context")] public string[] context { get; set; } = new[] { "https://www.w3.org/ns/activitystreams" }; public string id { get; set; } diff --git a/src/BirdsiteLive.Domain/ActivityPubService.cs b/src/BirdsiteLive.Domain/ActivityPubService.cs index e18193e..914eae6 100644 --- a/src/BirdsiteLive.Domain/ActivityPubService.cs +++ b/src/BirdsiteLive.Domain/ActivityPubService.cs @@ -4,13 +4,14 @@ using System.Net; using System.Net.Http; using System.Security.Cryptography; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading.Tasks; using BirdsiteLive.ActivityPub; using BirdsiteLive.ActivityPub.Converters; using BirdsiteLive.ActivityPub.Models; using BirdsiteLive.Common.Settings; using Microsoft.Extensions.Logging; -using Newtonsoft.Json; namespace BirdsiteLive.Domain { @@ -52,7 +53,7 @@ namespace BirdsiteLive.Domain var content = await result.Content.ReadAsStringAsync(); - var actor = JsonConvert.DeserializeObject(content); + var actor = JsonSerializer.Deserialize(content); if (string.IsNullOrWhiteSpace(actor.url)) actor.url = objectId; return actor; } @@ -78,7 +79,7 @@ namespace BirdsiteLive.Domain if (!string.IsNullOrWhiteSpace(inbox)) usedInbox = inbox; - var json = JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); + var json = JsonSerializer.Serialize(data, new JsonSerializerOptions() { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }); var date = DateTime.UtcNow.ToUniversalTime(); var httpDate = date.ToString("r"); diff --git a/src/BirdsiteLive.Domain/UserService.cs b/src/BirdsiteLive.Domain/UserService.cs index 8131c7e..ab248e4 100644 --- a/src/BirdsiteLive.Domain/UserService.cs +++ b/src/BirdsiteLive.Domain/UserService.cs @@ -188,7 +188,7 @@ namespace BirdsiteLive.Domain id = $"{activity.apObject}#accepts/follows/{Guid.NewGuid()}", type = "Accept", actor = activity.apObject, - apObject = new ActivityFollow() + apObject = new NestedActivity() { id = activity.id, type = activity.type, diff --git a/src/BirdsiteLive/Controllers/DebugingController.cs b/src/BirdsiteLive/Controllers/DebugingController.cs index 00accef..ed32782 100644 --- a/src/BirdsiteLive/Controllers/DebugingController.cs +++ b/src/BirdsiteLive/Controllers/DebugingController.cs @@ -10,7 +10,6 @@ using BirdsiteLive.Common.Settings; using BirdsiteLive.Domain; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Newtonsoft.Json; namespace BirdsiteLive.Controllers { diff --git a/src/BirdsiteLive/Controllers/UsersController.cs b/src/BirdsiteLive/Controllers/UsersController.cs index 5ce6179..d6b0bff 100644 --- a/src/BirdsiteLive/Controllers/UsersController.cs +++ b/src/BirdsiteLive/Controllers/UsersController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.Json; using System.Net.Mime; using System.Text.RegularExpressions; using System.Threading; @@ -19,7 +20,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Primitives; -using Newtonsoft.Json; namespace BirdsiteLive.Controllers { @@ -111,7 +111,7 @@ namespace BirdsiteLive.Controllers if (isSaturated) return new ObjectResult("Too Many Requests") { StatusCode = 429 }; if (notFound) return NotFound(); var apUser = _userService.GetUser(user); - var jsonApUser = JsonConvert.SerializeObject(apUser); + var jsonApUser = System.Text.Json.JsonSerializer.Serialize(apUser); return Content(jsonApUser, "application/activity+json; charset=utf-8"); } } @@ -155,7 +155,7 @@ namespace BirdsiteLive.Controllers if (r.Contains("application/activity+json")) { - var jsonApUser = JsonConvert.SerializeObject(status); + var jsonApUser = JsonSerializer.Serialize(status); return Content(jsonApUser, "application/activity+json; charset=utf-8"); } } @@ -185,7 +185,7 @@ namespace BirdsiteLive.Controllers var status = _statusService.GetActivity(id, tweet); - var jsonApUser = JsonConvert.SerializeObject(status); + var jsonApUser = JsonSerializer.Serialize(status); return Content(jsonApUser, "application/activity+json; charset=utf-8"); } @@ -269,7 +269,7 @@ namespace BirdsiteLive.Controllers { id = $"https://{_instanceSettings.Domain}/users/{id}/followers" }; - var jsonApUser = JsonConvert.SerializeObject(followers); + var jsonApUser = JsonSerializer.Serialize(followers); return Content(jsonApUser, "application/activity+json; charset=utf-8"); } } diff --git a/src/BirdsiteLive/Properties/launchSettings.json b/src/BirdsiteLive/Properties/launchSettings.json index 80d2896..dedaf88 100644 --- a/src/BirdsiteLive/Properties/launchSettings.json +++ b/src/BirdsiteLive/Properties/launchSettings.json @@ -19,7 +19,8 @@ "commandName": "Project", "launchBrowser": true, "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" + "ASPNETCORE_ENVIRONMENT": "Development", + "Instance__ParallelTwitterRequests": "0" }, "applicationUrl": "http://localhost:5000" },