Кнопки торговли

Этот плагин был немного устаревшим и был обновлён только сегодня (при поддержке @Arkshine, должен добавить :slight_smile: ). Обновите плагин, и, полагаю, вам потребуется пересобрать приложение, если это производственная среда, или перезапустить приложение. Вот некоторые инструкции от команды Discourse: Install plugins on a self-hosted site

6 лайков

Спасибо за обновление. Я могу подтвердить, что всё работает.

6 лайков

Всем привет

Может кто-нибудь помочь мне решить эту проблему?

На рабочем столе у меня черный экран

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)
1 лайк

Привет и добро пожаловать, @viswanatha :slight_smile:

Так как это, похоже, связано с плагином topic-trade-buttons, я перенёс ваш пост в соответствующую тему, чтобы привлечь к нему внимание нужных людей. :+1:

1 лайк

@viswanatha Вы пересобрали свой проект после добавления этого плагина?

1 лайк

Привет, @Janno_Liivak,

Я перекомпилировал свой проект, но проблема всё ещё сохраняется.

Также отсутствуют следующие опции.


Включить кнопки торговли по темам

image

Настройка категории


2 лайка

@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
5 лайков

:warning: уязвимость безопасности :warning:

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 излишне и усугубляет описанную выше проблему безопасности.

7 лайков

Pull request объединён

4 лайка

Я тоже, не могу настроить

1 лайк

Я только что обнаружил уведомление об устаревании в консоли разработчика своего браузера:

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.

Решил обратить на это внимание, хотя сам исправить не могу. :see_no_evil_monkey:

4 лайка

Позвольте мне перевести это на португальский (Бразилия) для вас! Я из Бразилии.

2 лайка

Привет, @Anderson_Cardoso_Silva! Ты можешь сделать pull request с переводами?

1 лайк

Я исправил некоторые проблемы, которые заметил в логах браузера (в том числе те, о которых упомянул @Roi), а также несколько странных английских текстов. Всё протестировал в локальной среде разработки, но буду благодарен, если кто-то ещё проверит это на своём Discourse.

3 лайка

@Arkshine, добавил эту строку в .discourse-compatibility. Спасибо!

2 лайка

:warning: Уязвимость безопасности :warning:

Привет, @Janno_Liivak,

Спасибо за этот полезный плагин! Я обнаружил несколько критических уязвимостей безопасности, требующих внимания:

Проблемы

  1. Отсутствие проверки авторизации — любой пользователь может пометить любую тему как проданную/купленную/обменную
  2. Отсутствие валидации на бэкенде — контроллеры не проверяют:
    • Включен ли плагин (topic_trade_buttons_enabled)
    • Включены ли кнопки в категории (enable_*_button)
    • Эти настройки проверяются только на фронтенде (небезопасно)
  3. Отсутствие валидации входных данных — параметр topic_id не проверяется
  4. Не создаются записи действий — операции не логируются, нет записей о том, кто выполнил действия

Влияние

  • Несанкционированное изменение тем
  • Обход настроек плагина/категории через прямые вызовы API
  • Отсутствие аудита того, кто выполнял действия по обмену
4 лайка

Привет, @Janno_Liivak,

На нашем сайте метки «[Куплено]» и «[Продано]» внезапно стали отображаться на упрощённом китайском языке. Мы используем Discourse 3.6.0.beta2. Никаких изменений на сайте, кроме обновлений, не вносилось.

Есть ли какие-либо идеи, как сделать так, чтобы метки соответствовали языку и набору символов темы/сайта?

Также, были ли когда-либо устранены проблемы с уязвимостями безопасности, о которых упоминал @lava?

Спасибо!
Гуннар

1 лайк

Привет, @Gunnar! Какой язык (и код языка) использует твой сайт?

Эти проблемы безопасности ещё не решены. В последнее время я был довольно занят, а так как я сам больше не использую Discourse, просто забыл о них :see_no_evil_monkey:

Но сейчас я создам для себя задачу и постараюсь скоро найти время, чтобы всё исправить. Если кто-то сможет помочь, я буду рад проверить pull request.

4 лайка

Английский (США). Вот скриншот всех настроек «языка» для нашего сайта:

2 лайка

Можно ли добавить опции в админ-панель сайта, чтобы редактировать/удалять существующие кнопки или добавлять новые?