Плагин ActivityPub

Я столкнулся с проблемой. Возможно, это частный случай. Я настроил одну из своих категорий для использования ActivityPub, но она недоступна на других платформах, таких как Mastodon, и публикации не распространяются, так как я не могу получить доступ к категории и подписаться на неё.

Думаю, проблема может быть в заглавной букве «E» в адресе: Events@bayofislands.community

У меня есть другая категория, использующая федерацию, которая работает без проблем. Вы можете увидеть её в действии по адресу:

Есть ли какие-либо предложения, как заставить это работать без создания новой категории для событий? Могу ли я изменить одну или несколько записей в базе данных, чтобы обновить имя пользователя категории?

Также я заметил, что ссылка для подписки на категорию не работает в Mastodon: Log in - Mastodon Newfoundland and Labrador

Спасибо за отчет. Замените E на строчную, и всё заработает

Я скоро исправлю эту проблему (т. е. обработчики с заглавными буквами).

1 лайк

Можно ли удалять подписчиков? У меня есть несколько аккаунтов, которые пришли из удалённого сервера, и я хотел бы навести порядок :smirking_face:

Хорошая просьба, я тоже скоро это добавлю.

2 лайка

Не думаю, что это проблема с регистром букв. Могу ли я подтвердить следующее:

  1. вы используете последнюю версию Discourse; и
  2. вы используете последнюю версию плагина ActivityPub.
1 лайк

Я понял одну вещь: пользователь, созданный плагином ActivityPub, не состоит ни в одной группе и не имеет адресов электронной почты.

Возможно ли назначать пользовательские группы пользователям, созданным плагином ActivityPub?

3 лайка

Это также привело к ошибке, при которой, если категория была установлена как TL0, пользователи AP не могли публиковать сообщения, так как у них не было этого разрешения (доступ только для чтения для everyone).

3 лайка

Здесь также есть ошибка. Если SiteSettings.selectable_avatars_mode установлен, даже в значение everyone, это приведет к тому, что у пользователя AP не будет аватаров.

1 лайк

Это готово к запуску и находится на рассмотрении после слияния Tag Actors.

Пока нет. Это промежуточные пользователи, поэтому здесь есть несколько ограничений. Возможно, это будет реализовано чуть позже.

Спасибо за этот отчет. Я скоро внимательно изучу этот случай. На данный момент вы можете установить права на публикацию для everyone, и это будет работать.

Спасибо и за этот отчет. Я скоро тоже внимательно изучу этот случай.

3 лайка

Привет! У меня возникла проблема с публикацией «no recipients» (нет получателей). Как мне устранить эту проблему?

[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719 не удалось запланировать доставку https://meta.appinn.net/ap/activity/2ad9bfcc78a9df49efa7b6e9bda454da: нет получателей

Логи:

Сообщение

[Discourse Activity Pub] https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719 не удалось запланировать доставку https://meta.appinn.net/ap/activity/2ad9bfcc78a9df49efa7b6e9bda454da: нет получателей

Обратная трассировка

/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>'

Окружение

HTTP HOSTS: meta.appinn.net

Я думаю, вам нужен кто-то (или какой-то «актор»), чтобы следить за категорией. Посмотрите это:

2 лайка

Но когда я подписываюсь на эту категорию через mastodon.social:
[Discourse Activity Pub] POST-запрос, полученный по адресу https://meta.appinn.net/ap/actor/b04930460474d895289ae0cd3c2ae719/inbox, завершился ошибкой: 401 Актор не найден по ключу https://mastodon.social/users/Cosmeticclinic#main-key

Это баг? (Invalid date)

1 лайк

Запрос на добавление функции: возможно ли заблокировать или приостановить учётные записи, созданные плагином ActivityPub?

У нас есть пользователь, который серьёзно нарушил наши правила и был навсегда заблокирован, но он перешёл на другой форум, сотрудничающий с нами, и через ActivityPub мы всё ещё видим его публикации там.

Я попытался приостановить его учётную запись, но это не сработало (HTTP 422 Unprocessable Content).

2 лайка

В то же время, похоже, что сообщения с изображениями, отправленные через ActivityPub, не загружаются корректно

Вот пример на моём форуме: ОригиналПолучено

1 лайк

Спасибо за отчёты, я скоро внимательно изучу оба.

1 лайк

Это просто потрясающий плагин — и действительно ключевая часть весьма захватывающего, бурно развивающегося фидивёрса; это действительно удивительная работа!

Вероятно ли, что в скором времени его можно будет использовать между приватными категориями в разных экземплярах Discourse? Я понимаю, что это довольно отличный сценарий использования по сравнению с открытой федерацией, но я могу представить, насколько он может быть полезен для содействия сотрудничеству в более приватных или закрытых условиях.

2 лайка

Я установил плагин ActivityPub, и в настройках администратора вижу, что он присутствует и включён. Однако при переходе к настройкам категории я не вижу там раздела ActivityPub. Единственная небольшая особенность в том, что у меня настроена мультисайтовая конфигурация. Буду признателен за любые идеи, что я упускаю или как это исправить!

1 лайк

Просто заметка: в настоящее время приватные категории могут следовать за публичными. Однако сами приватные категории пока не поддерживают функцию «следования». Стоит учитывать, что идея «следования» за «приватной» группой вызывает определённые противоречия и является спорной в Фидиверсе. Тем не менее, такая функция может быть реализована, но это произойдёт не «в ближайшее время» :slight_smile:

Настройки категории были перемещены в раздел Администрирование > Плагины > ActivityPub. Я скоро обновлю документацию в первом посте!

4 лайка

Ага! Я действительно видел что-то об этом выше, но зашёл в Администрирование > Плагины и не увидел меню вверху, поэтому нажал на ActivityPub в списке плагинов и оказался снова здесь… Затем попытался вернуться и посмотреть по ссылке настроек… Так что, возможно, стоит это прояснить, например, добавив ссылку на настройки категорий из настроек ActivityPub.

В любом случае, похоже, теперь всё работает, спасибо!

2 лайка