ActivityPub Plugin

Yes, you can now change the preferredUsername of Actors. Note the following about how this interoperates with Mastodon:

The username displayed for the actor will not change until someone performs a lookup of the new handle. Following / Posting etc will continue to work regardless of the username displayed.

I had hoped my PR to Mastodon would be merged before merging this

Neverthless, considering the acceptance tests demonstrating that Mastodon can actually handle username changes, and the passage of time, I decided to go ahead with this.

4 Likes

Thanks @Angus for your response here. I checked the instance that I’m running, and it’s 3.3.2, which seems to be the latest. I also updated the plugin to the latest version, but the error persists. This is the most recent stack trace that I collected from /logs:

Stack trace activemodel (7.1.3.4) lib/active_model/attribute_methods.rb:489:in `method_missing'

plugins/discourse-activity-pub/plugin.rb:368:in `block (2 levels) in activate!’

lib/plugin/instance.rb:376:in `public_send’

lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class’

plugins/discourse-activity-pub/plugin.rb:332:in `block (2 levels) in activate!’

lib/plugin/instance.rb:376:in `public_send’

lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class’

plugins/discourse-activity-pub/plugin.rb:338:in `block (2 levels) in activate!’

lib/plugin/instance.rb:376:in `public_send’

lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class’

plugins/discourse-activity-pub/app/models/discourse_activity_pub_object.rb:107:in `after_scheduled’

plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:126:in `after_scheduled’

plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:89:in `after_scheduled’

plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:15:in `perform’

plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:27:in `perform’

plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:160:in `block in activity_pub_deliver_activity’

plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:159:in `each’

plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:159:in `activity_pub_deliver_activity’

plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:41:in `perform_activity_pub_activity’

plugins/discourse-activity-pub/plugin.rb:457:in `block (2 levels) in activate!’

lib/plugin/instance.rb:376:in `public_send’

lib/plugin/instance.rb:376:in `block (2 levels) in add_to_class’

plugins/discourse-activity-pub/plugin.rb:664:in `block (2 levels) in activate!’

lib/plugin/instance.rb:576:in `block in on’

lib/discourse_event.rb:12:in `block in trigger’

/home/cloudron/rbenv/versions/3.3.4/lib/ruby/3.3.0/set.rb:501:in `each_key’

/home/cloudron/rbenv/versions/3.3.4/lib/ruby/3.3.0/set.rb:501:in `each’

lib/discourse_event.rb:12:in `trigger’

lib/post_creator.rb:258:in `trigger_after_events’

lib/post_creator.rb:220:in `create’

lib/new_post_manager.rb:318:in `perform_create_post’

lib/new_post_manager.rb:252:in `perform’

app/controllers/posts_controller.rb:215:in `create’

actionpack (7.1.3.4) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action’

actionpack (7.1.3.4) lib/abstract_controller/base.rb:224:in `process_action’

actionpack (7.1.3.4) lib/action_controller/metal/rendering.rb:165:in `process_action’

actionpack (7.1.3.4) lib/abstract_controller/callbacks.rb:259:in `block in process_action’

activesupport (7.1.3.4) lib/active_support/callbacks.rb:121:in `block in run_callbacks’

app/controllers/application_controller.rb:424:in `block in with_resolved_locale’

i18n (1.14.5) lib/i18n.rb:351:in `with_locale’

app/controllers/application_controller.rb:424:in `with_resolved_locale’

activesupport (7.1.3.4) lib/active_support/callbacks.rb:130:in `block in run_callbacks’

activesupport (7.1.3.4) lib/active_support/callbacks.rb:141:in `run_callbacks’

actionpack (7.1.3.4) lib/abstract_controller/callbacks.rb:258:in `process_action’

actionpack (7.1.3.4) lib/action_controller/metal/rescue.rb:25:in `process_action’

actionpack (7.1.3.4) lib/action_controller/metal/instrumentation.rb:74:in `block in process_action’

activesupport (7.1.3.4) lib/active_support/notifications.rb:206:in `block in instrument’

activesupport (7.1.3.4) lib/active_support/notifications/instrumenter.rb:58:in `instrument’

activesupport (7.1.3.4) lib/active_support/notifications.rb:206:in `instrument’

actionpack (7.1.3.4) lib/action_controller/metal/instrumentation.rb:73:in `process_action’

actionpack (7.1.3.4) lib/action_controller/metal/params_wrapper.rb:261:in `process_action’

activerecord (7.1.3.4) lib/active_record/railties/controller_runtime.rb:32:in `process_action’

actionpack (7.1.3.4) lib/abstract_controller/base.rb:160:in `process’

actionview (7.1.3.4) lib/action_view/rendering.rb:40:in `process’

rack-mini-profiler (3.3.1) lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method’

actionpack (7.1.3.4) lib/action_controller/metal.rb:227:in `dispatch’

actionpack (7.1.3.4) lib/action_controller/metal.rb:309:in `dispatch’

actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:49:in `dispatch’

actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:32:in `serve’

actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:51:in `block in serve’

actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:131:in `block in find_routes’

actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:124:in `each’

actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:124:in `find_routes’

actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:32:in `serve’

actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:882:in `call’

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.1.3.4) lib/action_dispatch/http/permissions_policy.rb:36:in `call’

lib/content_security_policy/middleware.rb:12:in `call’

lib/middleware/anonymous_cache.rb:399:in `call’

lib/middleware/csp_script_nonce_injector.rb:12:in `call’

config/initializers/008-rack-cors.rb:14: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.1.3.4) lib/action_dispatch/middleware/cookies.rb:689:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call’

activesupport (7.1.3.4) lib/active_support/callbacks.rb:101:in `run_callbacks’

actionpack (7.1.3.4) lib/action_dispatch/middleware/callbacks.rb:28:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call’

logster (2.20.0) lib/logster/middleware/reporter.rb:40:in `call’

lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in `call_app’

lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in `call’

config/initializers/100-quiet_logger.rb:20:in `call’

config/initializers/100-silence_logger.rb:29:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/request_id.rb:28:in `call’

lib/middleware/enforce_hostname.rb:24:in `call’

rack (2.2.9) lib/rack/method_override.rb:24:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/executor.rb:14:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/static.rb:25:in `call’

rack (2.2.9) lib/rack/sendfile.rb:110: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’

lib/middleware/request_tracker.rb:360:in `call’

actionpack (7.1.3.4) lib/action_dispatch/middleware/remote_ip.rb:92:in `call’

railties (7.1.3.4) lib/rails/engine.rb:536:in `call’

railties (7.1.3.4) lib/rails/railtie.rb:226:in `public_send’

railties (7.1.3.4) 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)>’

vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load’

vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<top (required)>’

bundler (2.5.9) lib/bundler/cli/exec.rb:58:in `load’

bundler (2.5.9) lib/bundler/cli/exec.rb:58:in `kernel_load’

bundler (2.5.9) lib/bundler/cli/exec.rb:23:in `run’

bundle activemodel (7.1.3.4) lib/active_model/attribute_methods.rb:489:in method_missing' plugins/discourse-activity-pub/plugin.rb:368:in block (2 levels) in activate!’
lib/plugin/instance.rb:376:in public_send' lib/plugin/instance.rb:376:in block (2 levels) in add_to_class’
plugins/discourse-activity-pub/plugin.rb:332:in block (2 levels) in activate!' lib/plugin/instance.rb:376:in public_send’
lib/plugin/instance.rb:376:in block (2 levels) in add_to_class' plugins/discourse-activity-pub/plugin.rb:338:in block (2 levels) in activate!’
lib/plugin/instance.rb:376:in public_send' lib/plugin/instance.rb:376:in block (2 levels) in add_to_class’
plugins/discourse-activity-pub/app/models/discourse_activity_pub_object.rb:107:in after_scheduled' plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:126:in after_scheduled’
plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:89:in after_scheduled' plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:15:in perform’
plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:27:in perform' plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:160:in block in activity_pub_deliver_activity’
plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:159:in each' plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:159:in activity_pub_deliver_activity’
plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:41:in perform_activity_pub_activity' plugins/discourse-activity-pub/plugin.rb:457:in block (2 levels) in activate!’
lib/plugin/instance.rb:376:in public_send' lib/plugin/instance.rb:376:in block (2 levels) in add_to_class’
plugins/discourse-activity-pub/plugin.rb:664:in block (2 levels) in activate!' lib/plugin/instance.rb:576:in block in on’
lib/discourse_event.rb:12:in block in trigger' /home/cloudron/rbenv/versions/3.3.4/lib/ruby/3.3.0/set.rb:501:in each_key’
/home/cloudron/rbenv/versions/3.3.4/lib/ruby/3.3.0/set.rb:501:in each' lib/discourse_event.rb:12:in trigger’
lib/post_creator.rb:258:in trigger_after_events' lib/post_creator.rb:220:in create’
lib/new_post_manager.rb:318:in perform_create_post' lib/new_post_manager.rb:252:in perform’
app/controllers/posts_controller.rb:215:in create' actionpack (7.1.3.4) lib/action_controller/metal/basic_implicit_render.rb:6:in send_action’
actionpack (7.1.3.4) lib/abstract_controller/base.rb:224:in process_action' actionpack (7.1.3.4) lib/action_controller/metal/rendering.rb:165:in process_action’
actionpack (7.1.3.4) lib/abstract_controller/callbacks.rb:259:in block in process_action' activesupport (7.1.3.4) lib/active_support/callbacks.rb:121:in block in run_callbacks’
app/controllers/application_controller.rb:424:in block in with_resolved_locale' i18n (1.14.5) lib/i18n.rb:351:in with_locale’
app/controllers/application_controller.rb:424:in with_resolved_locale' activesupport (7.1.3.4) lib/active_support/callbacks.rb:130:in block in run_callbacks’
activesupport (7.1.3.4) lib/active_support/callbacks.rb:141:in run_callbacks' actionpack (7.1.3.4) lib/abstract_controller/callbacks.rb:258:in process_action’
actionpack (7.1.3.4) lib/action_controller/metal/rescue.rb:25:in process_action' actionpack (7.1.3.4) lib/action_controller/metal/instrumentation.rb:74:in block in process_action’
activesupport (7.1.3.4) lib/active_support/notifications.rb:206:in block in instrument' activesupport (7.1.3.4) lib/active_support/notifications/instrumenter.rb:58:in instrument’
activesupport (7.1.3.4) lib/active_support/notifications.rb:206:in instrument' actionpack (7.1.3.4) lib/action_controller/metal/instrumentation.rb:73:in process_action’
actionpack (7.1.3.4) lib/action_controller/metal/params_wrapper.rb:261:in process_action' activerecord (7.1.3.4) lib/active_record/railties/controller_runtime.rb:32:in process_action’
actionpack (7.1.3.4) lib/abstract_controller/base.rb:160:in process' actionview (7.1.3.4) lib/action_view/rendering.rb:40:in process’
rack-mini-profiler (3.3.1) lib/mini_profiler/profiling_methods.rb:89:in block in profile_method' actionpack (7.1.3.4) lib/action_controller/metal.rb:227:in dispatch’
actionpack (7.1.3.4) lib/action_controller/metal.rb:309:in dispatch' actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:49:in dispatch’
actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:32:in serve' actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:51:in block in serve’
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:131:in block in find_routes' actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:124:in each’
actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:124:in find_routes' actionpack (7.1.3.4) lib/action_dispatch/journey/router.rb:32:in serve’
actionpack (7.1.3.4) lib/action_dispatch/routing/route_set.rb:882:in call' 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.1.3.4) lib/action_dispatch/http/permissions_policy.rb:36:in call’
lib/content_security_policy/middleware.rb:12:in call' lib/middleware/anonymous_cache.rb:399:in call’
lib/middleware/csp_script_nonce_injector.rb:12:in call' config/initializers/008-rack-cors.rb:14: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.1.3.4) lib/action_dispatch/middleware/cookies.rb:689:in call' actionpack (7.1.3.4) lib/action_dispatch/middleware/callbacks.rb:29:in block in call’
activesupport (7.1.3.4) lib/active_support/callbacks.rb:101:in run_callbacks' actionpack (7.1.3.4) lib/action_dispatch/middleware/callbacks.rb:28:in call’
actionpack (7.1.3.4) lib/action_dispatch/middleware/debug_exceptions.rb:29:in call' actionpack (7.1.3.4) lib/action_dispatch/middleware/show_exceptions.rb:31:in call’
logster (2.20.0) lib/logster/middleware/reporter.rb:40:in call' lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:35:in call_app’
lib/freedom_patches/rails_rack_logger_from_rails_7_2.rb:22:in call' config/initializers/100-quiet_logger.rb:20:in call’
config/initializers/100-silence_logger.rb:29:in call' actionpack (7.1.3.4) lib/action_dispatch/middleware/request_id.rb:28:in call’
lib/middleware/enforce_hostname.rb:24:in call' rack (2.2.9) lib/rack/method_override.rb:24:in call’
actionpack (7.1.3.4) lib/action_dispatch/middleware/executor.rb:14:in call' actionpack (7.1.3.4) lib/action_dispatch/middleware/static.rb:25:in call’
rack (2.2.9) lib/rack/sendfile.rb:110: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' lib/middleware/request_tracker.rb:360:in call’
actionpack (7.1.3.4) lib/action_dispatch/middleware/remote_ip.rb:92:in call' railties (7.1.3.4) lib/rails/engine.rb:536:in call’
railties (7.1.3.4) lib/rails/railtie.rb:226:in public_send' railties (7.1.3.4) 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)>’
vendor/bundle/ruby/3.3.0/bin/unicorn:25:in load' vendor/bundle/ruby/3.3.0/bin/unicorn:25:in <top (required)>’
bundler (2.5.9) lib/bundler/cli/exec.rb:58:in load' bundler (2.5.9) lib/bundler/cli/exec.rb:58:in kernel_load’
bundler (2.5.9) lib/bundler/cli/exec.rb:23:in `run’
bundle

Which seems to be coming from here. Why would moderating_groups be missing as a method on the activity_pub_taxonomy object?

group_ids.push(*activity_pub_topic.activity_pub_taxonomy.moderating_groups.pluck(:id))

Thanks in advance! The work you’ve been here is amazing, and can’t wait to have it working in our forum and syndicate updates with it.

The “stable” releases are named “stable” in the sense of “not changing” and are not generally recommended if you are making changes like introducing new plugins. New plugin development generally is free to follow current development versions. New “stable” releases are done only a few times per year, and that would be handcuffs for work like this.

I do wish at this point that CDCK would drop the “beta” moniker from their rolling releases because it really isn’t a great description. It keeps introducing confusion like this, and creates mismatched expectations. But 3.4.0-beta is almost certainly what you’ll want to work with this plugin at least at this time.

1 Like

Thanks @mcdanlj :pray:

1 Like

Hello, does the ActivityPub plugin support adding Threads users? I tried adding a Threads user, but it seems I can’t locate them. Thank you for your help!

1 Like

Hello @joo,

While any ActivityPub implementation that follows the ActivityPub spec should work out of the box, I haven’t attempted to add explicit Threads support yet as the last time I checked I wasn’t able to access ActivityPub in Threads (i.e. on my own Meta accounts), or find any documentation on it outside of some help articles and blog posts. As soon as it’s possible to get some insight into how it’s set up, I’ll be looking at adding some explicit support for Threads.

3 Likes