I've been able to follow bird.makeup accounts from my Mastodon account on mas.to. It works great.
I tried to follow some from my personal GoToSocial instance. I can search with my client and click the "follow" button just fine, but the follow never completes. There doesn't seem to be any return connection from bird.makeup to my instance.
It's not clear if the issue is with GoToSocial or with bird.makeup. I've logged a bug report with GotoSocial here: https://github.com/superseriousbusiness/gotosocial/issues/1340
A little update on this - I am now seeing the return connection from bird.makeup (well I was yesterday, but it does not seem to be happening today).
I believe there are two reasons it isn't working.
- GoToSocial currently refuses to talk to servers that don't set the User-Agent HTTP header.
- GoToSocial requires requires requests to the /users/:username request to have a HTTP signature. My understanding is that it is the same as Mastodon instasnces running in "secure mode" (https://docs.joinmastodon.org/spec/security/).
Looking at ActivityPubService.cs, I see the signing code is there and is used in BuildRequest(), but it is not used in GetUser().
I've been hacking my local GoToSocial instance to see if i can get it to work. I've found a couple of other issues:
bird.makeup advertises a
sharedInbox
for users (viahttps://bird.makeup/users/:name
). GoToSocial accordingly sends the follow request to the shared inbox. The HTTP request is accepted but no follow-acccept comes back. If I'm reading InboxController.cs correctly, only "Delete" activities are implemented for the shared inbox. Simply removing thesharedInbox
field should force all servers to send to the user-specific inbox. [I might be wrong here, I'm just reading the bird.makeup source code. I'm surprised as I would have thought this would affect many ActivityPub servers]When delivering responses to Follow requests, bird.makeup always connects to the
/inbox
endpoint. This doesn't work with GTS as it doesn't implement or advertise asharedInbox
.BuildRequest()
&PostDataAsync()
can take a 4th 'inbox' parameter, but it isn't used bySendAcceptFollowAsync()
etc
Also bird.makeup uses a content-type of
application/ld+json; charset=utf-8
when POSTing to other ActivityPub servers. My understanding is the standard (https://www.w3.org/TR/activitypub/#server-to-server-interactions) requires it to be
application/ld+json; profile="https://www.w3.org/ns/activitystreams"
Recently decided to check out Calckey which recently rebranded as firefish. I migrated my list of bird.makeup accounts there and no luck.
Per @Admin at firefish.social "bird.makeup has problems federating with authorized fetch, so it's a technical problem on their side".
Having done some googling around a while ago, it seems that sending a follow-accept should go a long way to solving this problem.
I'm also using Firefish, for the record, which is a fork of Misskey.
It'd be nice to maybe see some movement on this soon if you have the time - a lot of Fedi users are uncomfortable maintaining an account on the birdsite given how quickly it's sliding into supporting hate.
I implemented the changes necessary for GoToSocial to accept the communications from bird.makeup in https://git.sr.ht/~jofkos/bird.makeup/commit/3bfb1fadc5f20680eea8e9ae4e1bca8b8535935b – so basically, just fixed everything ~darrinsmart pointed out :)
Has this changeset made it to production? If so, I can confirm that this does not appear to be fixed for following from Firefish instances.
My instance has authorized fetch enabled, but I'm not sure whether that should matter?
No, I just submitted it!
Ah heck, yeah, you're right, obviously!
Sorry, I find sourcehut incredibly difficult to understand.
No worries, same here. I wasn't even sure where to send the patchset to, so I hope it reached ~cloutier.
Thank you for your contribution ~jofkos! I have pulled your changes and deployed them to production. Any GoToSocial user here can confirm if it works now?
Thanks! One thing I just noticed in the code I submitted, though, is that
DeleteRequestedAsync
will likely fail right now.GetUser
requires a local user (to specify a location for thekeyid
) and I wasn't sure where to get that from, so I had just putnull
as a placeholder for now. Just a heads-up!Also, I was indeed able to follow
bird.makeup
users from my GoToSocial. :)
Awesome, glad GoToSocial is working now.
I can confirm this is still an issue for Firefish instances, and presumably Misskey-based instances in general. My assumption is that this tree of forks requires the receipt of a follow acknowledgement.
Is there any information I can dig up that might be useful, or should this go into a different issue?
Follow-acknowledgements should be sent (part of the problem with GoToSocial was, that those had the wrong
Content-Type
), so if you have any more information about what is going wrong (like an error message or something similar) I'd be happy to have a look!
I've been digging through the logs, but I'm not really finding a whole lot of information. However, maybe comparing what happens when someone follows a bird.makeup user vs another Fediverse user might help?
For bird.makeup users - Nothing logged other than a slow SQL query, which isn't relevant to bird.makeup.
query is slow: INSERT INTO "follow_request"("id", "createdAt", "followeeId", "followerId", "requestId", "followerHost", "followerInbox", "followerSharedInbox", "followeeHost", "followeeInbox", "followeeSharedInbox") VALUES ($1, $2, $3, $4, DEFAULT, $5, DEFAULT, DEFAULT, $6, $7, $8) -- PARAMETERS: ["9n04rgr4gte9dyfb","2023-12-08T11:51:10.480Z","9l3vgu3mku3uabml","9kzivktzxya4s1l7",null,"bird.makeup","https://bird.makeup/users/ujicosnail/inbox","https://bird.makeup/inbox"] execution time: 908
For other users...
Accept: https://peoplemaking.games/users/jaco#accepts/follows/179221 Fetching metadata of peoplemaking.games ... Fetching nodeinfo of peoplemaking.games ... Fetching HTML of peoplemaking.games ... query is slow: INSERT INTO "following"("id", "createdAt", "followeeId", "followerId", "followerHost", "followerInbox", "followerSharedInbox", "followeeHost", "followeeInbox", "followeeSharedInbox") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) -- PARAMETERS: ["9n04sna4o2fol32s","2023-12-08T11:52:05.596Z","9l5es7igff3ftg83","9kzivktzxya4s1l7",null,null,null,"peoplemaking.games","https://peoplemaking.games/users/jaco/inbox","https://peoplemaking.games/inbox"] execution time: 388 Successfuly fetched nodeinfo of peoplemaking.games
I dunno, it does still feel like bird.makeup still isn't sending some kind of acknowledgement here?
As I have debugging already set up, I just had a look: Turns out, bird.makeup fails to deserialize activities originating from Firefish because it assumes the @context is a string – which it isn't. This patchset should fix it: :)
https://git.sr.ht/~jofkos/bird.makeup/commit/948ad963a048d961b9f897f0e33b76b8a261cfee
Thanks again! Sounds like a correct diagnostic.
I've pulled your changes and made some tweaks as those broke some tests. I just deployed that.
Can people on Firefish test if it works now too?
I'm going to close this todo since ~jofkos made GoToSocial work!
There is already a todo for Firefish https://todo.sr.ht/~cloutier/bird.makeup/13 if we can continue the conversation there, we would avoid sending notification to the GoToSocial users following this issue :)