From 6fdf34787d29ef35537c490aeb8e4682e9195641 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Tue, 30 Dec 2025 00:53:19 +0800 Subject: [PATCH] :recycle: Improve the code in activitypub and webfinger --- .../ActivityPub/ActivityPubDeliveryService.cs | 26 +++++-------------- .../ActivityPubDiscoveryService.cs | 9 ++++--- .../ActivityPub/WebFingerController.cs | 2 +- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs b/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs index 7b7a005..cd72c2c 100644 --- a/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs +++ b/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs @@ -369,6 +369,7 @@ public class ActivityPubDeliveryService( private async Task GetOrFetchActorAsync(string actorUri) { var actor = await db.FediverseActors + .Include(a => a.Instance) .FirstOrDefaultAsync(a => a.Uri == actorUri); if (actor != null) @@ -376,16 +377,6 @@ public class ActivityPubDeliveryService( try { - var response = await HttpClient.GetAsync(actorUri); - if (!response.IsSuccessStatusCode) - return null; - - var json = await response.Content.ReadAsStringAsync(); - var actorData = JsonSerializer.Deserialize>(json); - - if (actorData == null) - return null; - var domain = new Uri(actorUri).Host; var instance = await db.FediverseInstances .FirstOrDefaultAsync(i => i.Domain == domain); @@ -399,26 +390,23 @@ public class ActivityPubDeliveryService( }; db.FediverseInstances.Add(instance); await db.SaveChangesAsync(); - await discoveryService.FetchInstanceMetadataAsync(instance); } actor = new SnFediverseActor { Uri = actorUri, Username = ExtractUsername(actorUri), - DisplayName = actorData.GetValueOrDefault("name")?.ToString(), - Bio = actorData.GetValueOrDefault("summary")?.ToString(), - InboxUri = actorData.GetValueOrDefault("inbox")?.ToString(), - OutboxUri = actorData.GetValueOrDefault("outbox")?.ToString(), - FollowersUri = actorData.GetValueOrDefault("followers")?.ToString(), - FollowingUri = actorData.GetValueOrDefault("following")?.ToString(), - AvatarUrl = actorData.GetValueOrDefault("icon")?.ToString(), - InstanceId = instance.Id + InstanceId = instance.Id, + LastFetchedAt = NodaTime.SystemClock.Instance.GetCurrentInstant() }; db.FediverseActors.Add(actor); await db.SaveChangesAsync(); + await discoveryService.FetchActorDataAsync(actor); + await discoveryService.FetchInstanceMetadataAsync(instance); + + actor.Instance = instance; return actor; } catch (Exception ex) diff --git a/DysonNetwork.Sphere/ActivityPub/ActivityPubDiscoveryService.cs b/DysonNetwork.Sphere/ActivityPub/ActivityPubDiscoveryService.cs index 0d30f49..cfdd9b8 100644 --- a/DysonNetwork.Sphere/ActivityPub/ActivityPubDiscoveryService.cs +++ b/DysonNetwork.Sphere/ActivityPub/ActivityPubDiscoveryService.cs @@ -69,7 +69,9 @@ public class MisskeyMetaResponse [JsonPropertyName("repositoryUrl")] public string? RepositoryUrl { get; init; } [JsonPropertyName("privacyPolicyUrl")] public string? PrivacyPolicyUrl { get; init; } [JsonPropertyName("tosUrl")] public string? TosUrl { get; init; } - [JsonPropertyName("maxNoteTextLength")] public int? MaxNoteTextLength { get; init; } + + [JsonPropertyName("maxNoteTextLength")] + public int? MaxNoteTextLength { get; init; } } public partial class ActivityPubDiscoveryService( @@ -527,7 +529,7 @@ public partial class ActivityPubDiscoveryService( } } - private async Task FetchActorDataAsync(SnFediverseActor actor) + public async Task FetchActorDataAsync(SnFediverseActor actor) { try { @@ -535,7 +537,8 @@ public partial class ActivityPubDiscoveryService( var request = new HttpRequestMessage(HttpMethod.Get, actor.Uri); request.Headers.Accept.Add( - new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/activity+json")); + new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/activity+json") + ); var response = await HttpClient.SendAsync(request); if (!response.IsSuccessStatusCode) diff --git a/DysonNetwork.Sphere/ActivityPub/WebFingerController.cs b/DysonNetwork.Sphere/ActivityPub/WebFingerController.cs index f233f4c..cba5e47 100644 --- a/DysonNetwork.Sphere/ActivityPub/WebFingerController.cs +++ b/DysonNetwork.Sphere/ActivityPub/WebFingerController.cs @@ -58,7 +58,7 @@ public class WebFingerController( { Rel = "http://webfinger.net/rel/profile-page", Type = "text/html", - Href = $"https://{Domain}/users/{username}" + Href = $"https://{Domain}/publishers/{username}" } ] };