Хуки из: & до: синтаксис в yml для отключения анонимных поисков

Привет! Я хотел бы пересобрать приложение, включив в него изменения в файле, чтобы отключить функцию поиска для анонимных пользователей (не просто через CSS).

Может ли кто-нибудь предоставить документацию по синтаксису этих хуков для частей from: и to:?

    - replace:
        filename: "/var/www/discourse/app/assets/javascripts/discourse/app/components/search-menu.js"
        from: /get classNames()/
        to: |
          if (!this.currentUser) {return false;} get classNames()

Discourse сейчас принимает этот синтаксис, но в конце пересборки возникает ошибка:

 Error: Parse Error at discourse/components/search-menu.gjs:88:7"
replace failed with the params {"filename"=>"/var/www/discourse/app/assets/javascripts/discourse/app/components/search-menu.gjs", "from"=>"/get classNames()/", "to"=>"if (!this.currentUser) {return false;} get classNames()\n"}

Для этого есть скрытая настройка сайта:

rate_limit_search_anon_global_per_minute

Спасибо, что обратили на это внимание. Уточните, пожалуйста, как называется скрытая настройка сайта? И полностью ли она отключает поиск для анонимных пользователей или просто скрывает результаты? Я ищу способ блокировать доступ на уровне контроллера, поэтому интересно, достаточно ли только этой настройки или всё же потребуется какой-то собственный код.

Спасибо за предоставление переменной. С помощью этой документации мне удалось заставить всё работать.

Я изменил app.yml следующим образом, сохранил, а затем выполнил ./launcher restart app (пересборка не требуется).

env:
  DISCOURSE_RATE_LIMIT_SEARCH_ANON_GLOBAL_PER_MINUTE: 0

Теперь страница /search недоступна — отлично.
Теперь кнопка поиска на фронтенде мгновенно возвращает сообщение: «Вы выполнили это действие слишком много раз» — отлично.
Вы можете скрыть кнопку поиска с помощью:

.anon #search-button {
	display: none !important;
}

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

Более тщательное, но неполное решение:

Файл: /var/www/discourse/app/controllers/search_controller.rb
Изменение: добавьте «if current_user.present?» после «def show» и добавьте «end» в конце условия.

Однако мне не удалось сделать это изменение постоянным после перезапуска. Поэтому любой, кто знает, как сделать это постоянным после перезапуска с помощью функции app.yml hooks after_code replace, может поделиться решением.

Имеете в виду вход в систему для выполнения поиска?

В исходном сообщении вы указали, что хотите

И именно это делает данная настройка.

Конечно, это не затронет пользователей, которые вошли в систему.

Я имею в виду неавторизованного пользователя, который мог бы создать cookie-файл сессии, чтобы притвориться авторизованным, но, возможно, я зашел слишком далеко, так как, полагаю, функция currentUser проверяет ключ сессии.

:face_with_raised_eyebrow:

Это была бы проблема безопасности. Если вам удастся это сделать, обязательно сообщите об этом на HackerOne

«Это была бы проблема безопасности. Если вам удастся этого добиться, обязательно сообщите об этом на HackerOne»

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

DISCOURSE_RATE_LIMIT_SEARCH_ANON_GLOBAL_PER_MINUTE: 0

но не стесняйтесь попробовать следующее на уровне контроллера:
/var/www/discourse/app/controllers/search_controller.rb
Изменение: добавьте « if current_user.present? » после « def show » и добавьте « end » в конце условия.