Enabling the ActivityPub plugin

So, I couldn’t find a discussion about it, but apparently Discourse’s ActivityPub plugin is working?

It looks like it’s a read-only feature of a Topic, but it’s probably better than nothing. Is it enabled here yet? Should it be?

2 Likes

Yes, AP is enabled on this forum, and SocialHub has offered to be early bird tester of new functionality. See the topic by @angus in the Discourse category: Adding federation support to Discourse

3 Likes

@evan, the discussion is here: Welcome Discourse to the Fediverse!, and I must say that since today, new topics in the Fediverse Futures are now public!

The SocialHub follows the discourse-activity-pub plugin development closely and we try to use and test the latest features as soon as they appear.

4 Likes

I gave this entire thing a spin, and I’m not impressed. Here’s what happens:

  1. Discourse uses an unnamed HTTP client! From my HTTP access logs
116.203.222.33 - - [20/Aug/2023:09:17:56 +0000] "GET /endpoints/SYn3cl_N4HAPfPHgo2x37XunLEmhV9LnxCggcYwyec0 HTTP/1.1" 401 0.006 186 "-" "-" "-"
  1. Discourse does not sign their GET requests
Aug 20 09:17:56 [2023-08-20 09:17:56,550] DEBUG  
bovine.crypto.signature_checker Signature not present on
request for /endpoints/SYn3cl_N4HAPfPHgo2x37XunLEmhV9LnxCggcYwyec0
Aug 20 09:17:56 [2023-08-20 09:17:56,551] DEBUG  
bovine.crypto.signature_checker {"Remote-Addr": "<local>", 
"Host": "mymath.rocks", "X-Forwarded-For": "116.203.222.33", 
"X-Forwarded-Proto": "https", "Connection": "close", "Date":
 "Sun, 20 Aug 2023 09:17:56 GMT", "Accept": 
"application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\""}
  1. Discourse expects signed GET requests
bovine_store.actor.bovine_store_actor aiohttp.client_exceptions.ClientResponseError: 401, message='Unauthorized', url=URL('https://socialhub.activitypub.rocks/ap/actor/bcde488169a4ac803695493219aece2a')

2 & 3 are incompatible.

1 is bad practice, and makes problems such as 2 + 3 harder to debug.

cc @angus

Perhaps if you could explain what you’re trying to test? Is there a use case you’re trying to achieve?