Скрипты в постах?

Привет,

Есть ли способ запускать скрипты в постах, доступных только администраторам?

Я пробовал настроить это раньше, но это привело к падению моего сайта в PuTTY.

Хорошей среды,
Олле

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

https://meta.discourse.org/t/adding-a-javascript-in-a-post/130019/3

Олле

@Olle11, возможно, будет полезно, если вы подробнее опишете, чего именно пытаетесь добиться.

Нет возможности разрешить это в произвольном порядке через Composer, но в зависимости от вашего случая использования могут существовать обходные пути.

Например, плагин «Опросы» по сути запускает JavaScript в сообщении (среди прочего).

Я надеюсь запустить скрипт через HTML или React, который будет отображать виджеты в реальном времени в топовых постах.

Например, виджет, показывающий текущую погоду в городе с помощью HTML-скрипта виджета.

Можно ли использовать плагин «Опросы» для этой задачи?

С наилучшими пожеланиями,
Олле

Нет, я просто использовал это в качестве примера. Посмотрите его исходный код.

Вы можете попробовать использовать iFrame, если сможете разместить JavaScript в другом месте.

Если вам нужна тесная интеграция, вам следует рассмотреть возможность использования EmberJS.

Это, вероятно, наиболее доступный вариант, если вы хотите, чтобы контент находился в самом посте, а не, например, в баннере вверху.

Например, я взял один из элементов с главной страницы CodePen (поскольку он входит в наш allowed_iframes) и встроил его ниже:

источник

Похоже, что нужный мне скрипт не разрешает использование iframe из-за заголовка X-FRAME-Options: DENY.

Возможно, что-то в этом роде, чтобы разрешить выполнение скриптов в Discourse? @merefield @supermathie?

App.yml:
DISCOURSE_ALLOW_UNSAFE_HTML: true

  • volume:
    host: /var/discourse/shared/standalone/nginx_custom.conf
    guest: /etc/nginx/conf.d/custom.conf

Конфигурация Nginx для CSP:
add_header Content-Security-Policy “script-src ‘self’ ‘https://webadress.com’ ‘unsafe-inline’ ‘unsafe-eval’;”;

Я пытаюсь добавить конфигурацию Nginx, но ни ‘unsafe-inline’, ни https не отображаются в CSP при проверке через curl. ‘unsafe-eval’ добавляется через админ-панель.

Редактирование: НЕ БЕЗОПАСНО

Отключение защитных механизмов, которые внедрены в Discourse для предотвращения этого, — ужасная идея.

Именно поэтому все стараются направить вас к рекомендуемым способам решения этой задачи.

Вам следует использовать тему или компонент темы для добавления скриптов на страницы.

Могу ли я использовать тему или компонент темы для добавления скрипта в пост?

Как включить ‘unsafe-inline’ в CSP, чтобы скрипт работал?

Технически это возможно. Сам скрипт должен располагаться вне поста, либо, возможно, вы могли бы настроить его для оформления определённых элементов постов.

Без дополнительных деталей сложно понять, что именно вы хотите.

Это плохая идея, и вам не следует этого делать.

Что касается CSP и того, что я добавил в app.yml, я удалю unsafe_html: true, том nginx и конфигурацию nginx для CSP с сайта, так как это небезопасно.

Возможно, компонент темы сработает, хм.

Какой именно скрипт вы хотите запустить?

Где вы хотите его запустить?

Должен ли он быть на определённой записи? Или в другом месте страницы? Какие параметры нужно передать? Меняется ли он для каждой записи? Для категории?

Iframe, возможно, сработает. Мне нужно обновить CSP и unsafe_html, чтобы сайт был безопасным, так как CSP и другие решения, которые я пробовал, не обеспечивают безопасность.

Спасибо за ваш ответ. Iframe, возможно, подойдет хотя бы на время, пока я не найду лучшее решение.

Просмотрев скрипт, можно увидеть, что его нельзя запустить глобально. Для работы требуется загрузка на странице с параметрами.

Я создал простой пример (TC): GitHub - Arkshine/discourse-tradingview-chart · GitHub

Чтобы упростить изменение параметров, вы можете скопировать и вставить их с сайта прямо внутрь блока [wrap]..[/wrap].

По умолчанию скрипт устанавливает соотношение сторон 16/9, занимает всю доступную ширину, а высота вычисляется автоматически. Скрипт также поддерживает явное указание ширины и высоты.

Рекомендую использовать параметр show_popup_button: true. Это позволит открывать график на весь экран в новом окне.

image

Я добавил два параметра:

Извини, но одного :heart: недостаточно, чтобы выразить…

Братан. Это круто.