ActivityPub Plugin

I’ve run into an issue. Perhaps it’s an edge case. I set up one of my categories to use ActivityPub, but it’s not accessible on other platforms like Mastodon, and posts are not being federated because I can’t access and follow the category.

I think it might be an issue due to the capital “E” in the handle. Events@bayofislands.community

Screenshot from 2024-04-17 22-32-33

I have another category federated that works fine. You can see it in action at

Any suggestions to get this to work without creating a whole new events category? Can I modify one or more records in the DB to update the username for the category?

I’m also noticing that the URL to follow a category is not working in Mastodon: Log in - Mastodon Newfoundland and Labrador

Thanks for the report. Change the E to a lowercase and it’ll work

I’ll fix this issue (i.e. handles with uppercase letters) soon.

1 Like

Can we delete followers? I have few actors who came from now deleted instance and I would like to clean up places :smirk:

A good request, I’ll add that soon too.

2 Likes

I’m not sure this is a capitalization issue actually. Could I confirm the following:

  1. you’re running the latest version of Discourse; and
  2. you’re running the latest version of the ActivityPub plugin.
1 Like

I realized one thing: the user created by ActivityPub Plugin does not have any group assigned to it, and does not have any emails.

Is it possible to assign custom groups to users created by ActivityPub Plugin?

3 Likes

This also resulted in a bug where if the category was set to TL0 could post (readonly for everyone), AP users may not post as they did not have this permission

3 Likes

There is also a bug here. If the SiteSettings.selectable_avatars_mode is set, even it was set to everyone, it will cause the AP user to lack avatars.

1 Like

This is ready to go, and is up for review after Tag Actors is merged.

Not yet. They’re staged users, so there’s a few limitations there. Perhaps a little further down the track.

Thanks for this report. I’ll take a closer look at this case soon. For now, you can set the posting permissions to everyone and it’ll work.

Thanks for this report too. I’ll take a closer look at this case soon too.

3 Likes

Hi I’m having this problem with pubilsh “no recipients”, How do I troubleshoot the problem?

[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719 failed to schedule https://meta.appinn.net/ap/activity/2ad9bfcc78a9df49efa7b6e9bda454da for delivery: no recipients

Logs:

Message

[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719 failed to schedule https://meta.appinn.net/ap/activity/2ad9bfcc78a9df49efa7b6e9bda454da for delivery: no recipients

Backtrace

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:93:in `log_failure'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:35:in `can_deliver?'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:13:in `perform'
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:27:in `perform'
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:140:in `activity_pub_deliver_activity'
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:38:in `perform_activity_pub_activity'
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:478:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:354:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:354:in `block (2 levels) in add_to_class'
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:486:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:354:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:354:in `block (2 levels) in add_to_class'
/var/www/discourse/plugins/discourse-activity-pub/app/controllers/discourse_activity_pub/post_controller.rb:17:in `schedule'
actionpack-7.0.8.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-7.0.8.1/lib/abstract_controller/base.rb:215:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/rendering.rb:165:in `process_action'
actionpack-7.0.8.1/lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:423:in `block in with_resolved_locale'
i18n-1.14.4/lib/i18n.rb:322:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:423:in `with_resolved_locale'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack-7.0.8.1/lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/rescue.rb:23:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport-7.0.8.1/lib/active_support/notifications.rb:206:in `block in instrument'
activesupport-7.0.8.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-7.0.8.1/lib/active_support/notifications.rb:206:in `instrument'
actionpack-7.0.8.1/lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack-7.0.8.1/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-7.0.8.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-7.0.8.1/lib/abstract_controller/base.rb:151:in `process'
actionview-7.0.8.1/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.3.1/lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method'
actionpack-7.0.8.1/lib/action_controller/metal.rb:188:in `dispatch'
actionpack-7.0.8.1/lib/action_controller/metal.rb:251:in `dispatch'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:852:in `call'
railties-7.0.8.1/lib/rails/engine.rb:530:in `call'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `public_send'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `method_missing'
actionpack-7.0.8.1/lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack-7.0.8.1/lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-7.0.8.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-7.0.8.1/lib/action_dispatch/routing/route_set.rb:852:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
rack-2.2.9/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.9/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.9/lib/rack/head.rb:12:in `call'
actionpack-7.0.8.1/lib/action_dispatch/http/permissions_policy.rb:38:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:393:in `call'
/var/www/discourse/lib/middleware/csp_script_nonce_injector.rb:12:in `call'
/var/www/discourse/config/initializers/008-rack-cors.rb:26:in `call'
rack-2.2.9/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.9/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-7.0.8.1/lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack-7.0.8.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
logster-2.19.1/lib/logster/middleware/reporter.rb:40:in `call'
railties-7.0.8.1/lib/rails/rack/logger.rb:40:in `call_app'
railties-7.0.8.1/lib/rails/rack/logger.rb:27:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:24:in `call'
rack-2.2.9/lib/rack/method_override.rb:24:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.9/lib/rack/sendfile.rb:110:in `call'
actionpack-7.0.8.1/lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
rack-mini-profiler-3.3.1/lib/mini_profiler.rb:191:in `call'
message_bus-4.3.8/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:237:in `call'
railties-7.0.8.1/lib/rails/engine.rb:530:in `call'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `public_send'
railties-7.0.8.1/lib/rails/railtie.rb:226:in `method_missing'
rack-2.2.9/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.9/lib/rack/urlmap.rb:58:in `each'
rack-2.2.9/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'

Env

HTTP HOSTS: meta.appinn.net

I think you need someone (or some ‘actor’) to follow the Category. See this:

2 Likes

But when I follow this Category using mastodon.social:
[Discourse Activity Pub] POST request received by https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719/inbox failed: 401 Actor not found for key https://mastodon.social/users/Cosmeticclinic#main-key

Is this a bug? (Invalid date)

1 Like

A feature request: Is it possible to silence or suspend accounts created by the activitypub plugin?

We have a user who seriously violated our terms of service and was permanently banned, but they ran to another forum that cooperates with us, and through activitypub, we can still see their posts there.

I tried to suspend them, but it didn’t work. (HTTP 422 Unprocessable Content)

2 Likes

At the same time, it seems that posts with pictures sent through activitypub will not load properly

Here is an example on my forum: OriginalDelivered

1 Like

Thanks for the reports, I’ll take a closer look at both soon.

1 Like

This is such an awesome plugin - and indeed a key part of the quite exciting burgeoning fediverse - it really is amazing work!

Is it likely to be usable between private categories in different Discourse instances any time soon? I know that this is quite a different use-case from open federation, but it is one that I can imagine being very useful for facilitating collaboration in the context of more private / closed settings.

2 Likes

I’ve installed the activitypub plugin, and can see it is present and enabled in the admin settings. However when I go to the settings for a category, I don’t see an activitypub section there. The only slightly unusual thing is that I’m running a multisite configuration. Any ideas about what I’m missing/how to fix this appreciated!

1 Like

Just a note that private categories can currently follow public categories. Private categories cannot currently be followed. Keep in mind that there is some tension in the idea of “following” a “private” Group, and that the concept is controversial in the Fediverse. That said, it may well be implemented, but it won’t be “soon” :slight_smile:

The category settings have been moved to Admin > Plugins > ActivityPub. I will be updating the documentation in the OP soon!

4 Likes

Aha! I did see something about that above, but got to Admin > Plugins and didn’t see the menu at the top, so clicked ActivityPub in the list of plugins and ended up back here… Then tried going back and looking under the settings link… So might be good to clarify that, perhaps with a link to the category settings from activitypub settings.

Anyway, it seems to be working now thanks!

2 Likes