🐛 Fix activitypub bugs

This commit is contained in:
2025-12-29 01:49:35 +08:00
parent f83327474e
commit 39587ed346
2 changed files with 82 additions and 36 deletions

View File

@@ -60,8 +60,9 @@ public class ActivityPubDeliveryService(
var actorUrl = $"https://{Domain}/activitypub/actors/{publisher.Name}";
var targetActor = await GetOrFetchActorAsync(targetActorUri);
var localActor = await GetOrCreateLocalActorAsync(publisher);
if (targetActor?.InboxUri == null)
if (targetActor?.InboxUri == null || localActor == null)
{
logger.LogWarning("Target actor or inbox not found: {Uri}", targetActorUri);
return false;
@@ -80,7 +81,7 @@ public class ActivityPubDeliveryService(
{
IsLocalActor = true,
LocalPublisherId = publisher.Id,
ActorId = Guid.NewGuid(),
ActorId = localActor.Id,
TargetActorId = targetActor.Id,
State = RelationshipState.Pending,
IsFollowing = true,
@@ -278,6 +279,50 @@ public class ActivityPubDeliveryService(
.ToListAsync();
}
private async Task<SnFediverseActor?> GetOrCreateLocalActorAsync(SnPublisher publisher)
{
var actorUrl = $"https://{Domain}/activitypub/actors/{publisher.Name}";
var localActor = await db.FediverseActors
.FirstOrDefaultAsync(a => a.Uri == actorUrl);
if (localActor != null)
return localActor;
var instance = await db.FediverseInstances
.FirstOrDefaultAsync(i => i.Domain == Domain);
if (instance == null)
{
instance = new SnFediverseInstance
{
Domain = Domain,
Name = Domain
};
db.FediverseInstances.Add(instance);
await db.SaveChangesAsync();
}
localActor = new SnFediverseActor
{
Uri = actorUrl,
Username = publisher.Name,
DisplayName = publisher.Name,
Bio = null,
InboxUri = $"{actorUrl}/inbox",
OutboxUri = $"{actorUrl}/outbox",
FollowersUri = $"{actorUrl}/followers",
FollowingUri = $"{actorUrl}/following",
AvatarUrl = null,
InstanceId = instance.Id
};
db.FediverseActors.Add(localActor);
await db.SaveChangesAsync();
return localActor;
}
private async Task<SnFediverseActor?> GetOrFetchActorAsync(string actorUri)
{
var actor = await db.FediverseActors