Fix follow accept rendering

This commit is contained in:
Laura Hausmann 2024-01-27 03:44:33 +01:00
parent 7af8840f2d
commit 471516f729
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 19 additions and 8 deletions

View file

@ -78,9 +78,11 @@ public class ActivityHandlerService(
return;
}
var acceptActivity = activityRenderer.RenderAccept(followeeActor, requestId);
var keypair = await db.UserKeypairs.FirstAsync(p => p.User == followee);
var payload = await acceptActivity.SignAndCompact(keypair);
var acceptActivity = activityRenderer.RenderAccept(followeeActor,
activityRenderer.RenderFollow(followerActor,
followeeActor, requestId));
var keypair = await db.UserKeypairs.FirstAsync(p => p.User == followee);
var payload = await acceptActivity.SignAndCompact(keypair);
var inboxUri = follower.SharedInbox ??
follower.Inbox ?? throw new Exception("Can't accept follow: user has no inbox");
var request = await httpRqSvc.PostSigned(inboxUri, payload, "application/activity+json", followee, keypair);

View file

@ -14,16 +14,25 @@ public class ActivityRenderer(IOptions<Config.InstanceSection> config) {
};
}
public ASActivity RenderAccept(ASObject followeeActor, string requestId) {
public ASActivity RenderAccept(ASObject actor, ASObject obj) {
return new ASActivity {
Id = $"https://{config.Value.WebDomain}/activities/{Guid.NewGuid().ToString().ToLowerInvariant()}",
Type = "https://www.w3.org/ns/activitystreams#Accept",
Actor = new ASActor {
Id = followeeActor.Id
Id = actor.Id
},
Object = new ASObject {
Id = requestId
}
Object = obj
};
}
public ASActivity RenderFollow(ASObject followerActor, ASObject followeeActor, string requestId) {
return new ASActivity {
Id = requestId,
Type = ASActivity.Types.Follow,
Actor = new ASActor {
Id = followerActor.Id
},
Object = followeeActor
};
}
}