Этот плагин был немного устаревшим и был обновлён только сегодня (при поддержке @Arkshine, должен добавить
). Обновите плагин, и, полагаю, вам потребуется пересобрать приложение, если это производственная среда, или перезапустить приложение. Вот некоторые инструкции от команды Discourse: Install plugins on a self-hosted site
Спасибо за обновление. Я могу подтвердить, что всё работает.
Всем привет
Может кто-нибудь помочь мне решить эту проблему?
На рабочем столе у меня черный экран
Discourse - V3.1.3
Uncaught (in promise) Error: Could not find module discourse-i18n imported from discourse/plugins/discourse-topic-trade-buttons/discourse/connectors/topic-above-post-stream/trade-buttons
Uncaught (in promise) Error: Could not find module `discourse-i18n` imported from `discourse/plugins/discourse-topic-trade-buttons/discourse/connectors/topic-above-post-stream/trade-buttons`
at loader.js:247:1
at u (loader.js:258:1)
at a.findDeps (loader.js:168:1)
at u (loader.js:262:1)
at requireModule (loader.js:24:1)
at plugin-connectors.js:57:1
at plugin-connectors.js:45:1
at Array.forEach (<anonymous>)
at b (plugin-connectors.js:40:1)
at plugin-connectors.js:56:1
at plugin-connectors.js:153:1
at plugin-connectors.js:45:1
at Array.forEach (<anonymous>)
at b (plugin-connectors.js:40:1)
at S (plugin-connectors.js:150:1)
at j (plugin-connectors.js:159:1)
at e.renderedConnectorsFor (plugin-connectors.js:164:1)
at get connectors [as connectors] (plugin-outlet.js:126:1)
at Ce (index.js:1251:1)
at reference.js:175:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at index.js:5588:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at index.js:5588:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at reference.js:312:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at Object.evaluate (runtime.js:3440:1)
at Object.evaluate (runtime.js:1052:1)
at It.evaluateSyscall (runtime.js:4263:1)
at It.evaluateInner (runtime.js:4234:1)
at It.evaluateOuter (runtime.js:4227:1)
at Wt.next (runtime.js:5058:1)
at Wt._execute (runtime.js:5045:1)
at Wt.execute (runtime.js:5038:1)
at Qt.sync (runtime.js:5105:1)
at wr.render (index.js:6749:1)
at index.js:7013:1
at Mt (runtime.js:4139:1)
at Tr._renderRoots (index.js:6996:1)
at Tr._renderRootsTransaction (index.js:7039:1)
at Tr._renderRoot (index.js:6985:1)
at Tr._appendDefinition (index.js:6911:1)
at Tr.appendOutletView (index.js:6899:1)
at p.invoke (queue.ts:203:14)
at p.flush (queue.ts:98:13)
at h.flush (deferred-action-queues.ts:75:19)
at $._end (index.ts:616:32)
at _boundAutorunEnd (index.ts:257:12)
Привет и добро пожаловать, @viswanatha ![]()
Так как это, похоже, связано с плагином topic-trade-buttons, я перенёс ваш пост в соответствующую тему, чтобы привлечь к нему внимание нужных людей. ![]()
@viswanatha Вы пересобрали свой проект после добавления этого плагина?
Привет, @Janno_Liivak,
Я перекомпилировал свой проект, но проблема всё ещё сохраняется.
Также отсутствуют следующие опции.
Включить кнопки торговли по темам
![]()
Настройка категории
@Janno_Liivak Возможно, вам понадобится Pinning plugin and theme versions for older Discourse installs (.discourse-compatibility), так как последний PR добавил импорт discourse-i18n, который был включён в ядро относительно недавно (насколько я помню, 12 октября).
Судя по всему, это изменение произошло после версии 3.2.0.beta2-dev (12 сентября).
Поэтому, на мой взгляд, имеет смысл добавить запись в .discourse-compatibility, чтобы указать, что пользователи со старыми версиями Discourse (ранее 3.2.0-beta2-dev) привязаны к последнему коммиту до моего PR (а именно к коммиту от 22 февраля):
< 3.2.0.beta2-dev 88db827dcecf5faf4e009e38422ede6847488535
уязвимость безопасности ![]()
TL;DR: Установка этого плагина — даже в отключенном состоянии — приводит к утечке всех пользовательских полей темы для любого, кто имеет доступ к теме, включая анонимных пользователей. В зависимости от других установленных плагинов, пользовательские поля темы могут содержать конфиденциальные данные.
При проверке этого плагина для клиента мы обнаружили ряд проблем безопасности. Мы исправили эти проблемы в нашем форке (https://github.com/communiteq/discourse-topic-trade-buttons/tree/master) и отправили запрос на слияние. Однако автор темы не ответил ни на наш запрос на слияние, ни на наше личное сообщение, поэтому мы теперь раскрываем эти проблемы.
Исправление безопасности: утечка информации
Все пользовательские поля (включая те, что добавлены другими плагинами!) сериализуются, в том числе для анонимных пользователей. Пользовательские поля могут содержать конфиденциальные данные и никогда не должны сериализоваться таким образом.
Поскольку значения вроде sold_at и аналогичные устанавливаются на стороне сервера, а кнопки «вычисляются» на основе topic.archived, логику работы с пользовательскими полями можно убрать из фронтенд-кода, видимого пользователям. Сериализация пользовательских полей потребуется только для работы административного интерфейса — следовательно, её можно ограничить только администраторами. Мы также подозреваем, что даже это может быть излишним.
Исправления инициализации
Проверка if SiteSetting.topic_trade_buttons_enabled, которая ограничивает логику сериализации, вынуждает перезапускать Discourse после включения или отключения плагина. Эта проверка избыточна, поскольку Discourse уже сам обрабатывает это.
Использование respect_plugin_enabled: false излишне и усугубляет описанную выше проблему безопасности.
Pull request объединён
Я тоже, не могу настроить
Я только что обнаружил уведомление об устаревании в консоли разработчика своего браузера:
deprecation-identify-source.js:15 УСТАРЕЛО: [PLUGIN discourse-topic-trade-buttons] Путь свойства
modelиспользовался в шаблонеdiscourse/plugins/discourse-topic-trade-buttons/discourse/templates/connectors/topic-above-post-stream/trade-buttons.hbsбез указанияthis. Такое поведение по умолчанию устарело: все свойства, используемые в шаблоне, должны быть получены черезthis: {{this.model}} [id устаревания: ember-this-fallback.this-property-fallback] Это будет удалено в ember-this-fallback n/a. Подробнее см. Resolving the `this-property-fallback` deprecation.
Решил обратить на это внимание, хотя сам исправить не могу. ![]()
Позвольте мне перевести это на португальский (Бразилия) для вас! Я из Бразилии.
Привет, @Anderson_Cardoso_Silva! Ты можешь сделать pull request с переводами?
Я исправил некоторые проблемы, которые заметил в логах браузера (в том числе те, о которых упомянул @Roi), а также несколько странных английских текстов. Всё протестировал в локальной среде разработки, но буду благодарен, если кто-то ещё проверит это на своём Discourse.
@Arkshine, добавил эту строку в .discourse-compatibility. Спасибо!
Уязвимость безопасности 
Привет, @Janno_Liivak,
Спасибо за этот полезный плагин! Я обнаружил несколько критических уязвимостей безопасности, требующих внимания:
Проблемы
- Отсутствие проверки авторизации — любой пользователь может пометить любую тему как проданную/купленную/обменную
- Отсутствие валидации на бэкенде — контроллеры не проверяют:
- Включен ли плагин (
topic_trade_buttons_enabled) - Включены ли кнопки в категории (
enable_*_button) - Эти настройки проверяются только на фронтенде (небезопасно)
- Включен ли плагин (
- Отсутствие валидации входных данных — параметр
topic_idне проверяется - Не создаются записи действий — операции не логируются, нет записей о том, кто выполнил действия
Влияние
- Несанкционированное изменение тем
- Обход настроек плагина/категории через прямые вызовы API
- Отсутствие аудита того, кто выполнял действия по обмену
Привет, @Janno_Liivak,
На нашем сайте метки «[Куплено]» и «[Продано]» внезапно стали отображаться на упрощённом китайском языке. Мы используем Discourse 3.6.0.beta2. Никаких изменений на сайте, кроме обновлений, не вносилось.
Есть ли какие-либо идеи, как сделать так, чтобы метки соответствовали языку и набору символов темы/сайта?
Также, были ли когда-либо устранены проблемы с уязвимостями безопасности, о которых упоминал @lava?
Спасибо!
Гуннар
Привет, @Gunnar! Какой язык (и код языка) использует твой сайт?
Эти проблемы безопасности ещё не решены. В последнее время я был довольно занят, а так как я сам больше не использую Discourse, просто забыл о них ![]()
Но сейчас я создам для себя задачу и постараюсь скоро найти время, чтобы всё исправить. Если кто-то сможет помочь, я буду рад проверить pull request.
Можно ли добавить опции в админ-панель сайта, чтобы редактировать/удалять существующие кнопки или добавлять новые?






