Federation Compatibility
kvibber opened this issue · comments
I've set up a test instance of Postmarks, and tried linking it up with various other Fediverse accounts I have. I was only able to get following to work - in either direction - with Mastodon.
I tried following the Postmarks account with: GoToSocial, Takahe, Snac2, Firefish, and Akkoma. Some could find the Postmarks profile when I searched for it, but couldn't follow it.
I also tried following each of those, plus a Lemmy user, from Postmarks. Again, Mastodon was the only one that succeeded.
It's late right now, so I wanted to just get the issue written down, but I'll gather some debug info when I get a chance.
Tracking this, thanks for reporting. FWIW the initial ActivityPub piece of this Postmarks was based on https://github.com/dariusk/express-activitypub and there may be some upstream improvements this repo could benefit from, otherwise1 features e.g. nodeinfo support and others have been grafted in as it has evolved.
- I've just successfully tested following a Postmarks instance/user from Shuttlecraft (another single-user AP instance), but I'm unable to follow the Shuttlecraft user from Postmarks.
[2023-9-21 9:9:21] POST:/admin/following/follow 200 0.006ms
Unexpected token N in JSON at position 0
-
I was able to successfully follow a Bookwyrm user from Postmarks, and the Postmarks user from Bookwyrm.
-
Attempting to follow a PixelFed user results in:
[2023-9-21 9:16:46] POST:/admin/following/follow 200 0.003ms
Couldn't find inbox at supplied profile url https://metapixl.com/users/forgeandcraft
An inbound follow from PixelFed works.
- Attempting to follow a Takahe user results in:
[2023-9-21 9:17:56] POST:/admin/following/follow 200 0.002ms
couldn't look up canonical actor info
Invalid URL
- Attempting to follow a Lemmy user results in:
[2023-9-21 9:43:58] POST:/admin/following/follow 200 0.004ms
couldn't look up canonical actor info
Invalid URL
I'm fairly sure that some of these are due to #77 and the usernames including a leading @
(or not).
Footnotes
-
Irrelevant as it looks like the codebases implement the same AP features at this point ↩
What do you think about creating a wiki page with a table showing the federation status for various platforms? I'd be willing to help track down issues, as time permits.
Yep, that's probably what we need to do here! I think only @ckolderup currently has the ability to do that on the wiki here for now.
Just adding some notes I've seen while testing. These are all inbound follows.
Other postmarks users
Always seems to work.
Mastodon
Always seems to work for me.
Firefish and IceShrimp
A follow request never reaches the Postmarks server, it just spins as "Processing" on the servers and at least I never see it in the Postmarks logs.
Friendica
Friendica is reporting a valid follow, but on Postmarks it doesn't go through. I see in the postmarks logs this message:
Error: Couldn't find inbox at supplied profile url https://venera.social/profile/box464
GoToSocial
I have my own GtS instance and it's running on the same docker container as Postmarks. So this is easy to test. Unfortunately I don't see this 400 exception in the Postmark logs. Maybe I'm looking in the wrong spot.
timestamp="22/10/2023 21:19:40.929" func=httpclient.(*Client).DoSigned level=INFO method=POST url=https://bookmarks.box464.com/api/inbox requestID=y2pn8pmb04001pz7hv00 pubKeyID=https://gts.scoobysnack.net/users/zoinks/main-key msg="performing request"
timestamp="22/10/2023 21:19:40.935" func=workers.(*Processor).EnqueueClientAPI.func1 level=ERROR requestID=y2pn8pmb04001pz7hv00 msg="error processing client API message: CreateFollowReq: error federating follow: Follow: error sending activity *typefollow.ActivityStreamsFollow via outbox https://gts.scoobysnack.net/users/zoinks/outbox: func1: error delivering to https://bookmarks.box464.com/api/inbox: deliver: POST request to https://bookmarks.box464.com/api/inbox failed: status=\"400 Bad Request\" body=\"Bad Request\""
Pixelfed
Pixelfed shows a successful follow, but really the Postmark site isn't getting it? I don't see any logs at least.
Related - #185
Looking into some of these issues now.
Possibly relevant error log entry for GoToSocial:
timestamp="23/02/2024 06:02:10.222" func=dereferencing.(*Dereferencer).RefreshAccount level=ERROR requestID=ba9rxn4d04001yfkypbg msg="error enriching remote account: enrichAccount: error dereferencing https://bookmarks.kvibber.com/u/interesting: Dereference: non activity streams response: application/json; charset=utf-8"
It looks like another case where GoToSocial is more strictly enforcing the spec than most AP software. It may be expecting one of these types for the response:
application/activity+json
application/activity+json; charset=utf-8
application/ld+json; profile="https://www.w3.org/ns/activitystreams"
Progress!
I changed the content-type and accept in signature.js to application/activity+json, and then I followed @andypiper 's suggestion in #191 and patched user.js to add
res.type('application/ld+json; profile="https://www.w3.org/ns/activitystreams"');
to the actor response, and now my GoToSocial instance is able to retrieve my Postmarks profile.
Following doesn't work yet. The log entry on the GTS side:
timestamp="07/05/2024 21:48:24.799" func=workers.(*clientAPI).CreateFollowReq level=ERROR requestID=sg08gnmf04001j7fztgg msg="error federating follow request: Follow: error sending activity *typefollow.ActivityStreamsFollow via outbox https://notes.kvibber.com/users/kelson/outbox: func1: error delivering to https://bookmarks.kvibber.com/api/inbox: deliver: POST request to https://bookmarks.kvibber.com/api/inbox failed: status=\"400 Bad Request\" body=\"Bad Request\""