Проверка медиафайлов пропускается, если image_sizes пуст

Этот баг касается настройки Skip review media groups (Пропускать группы при проверке медиа).
При отправке изображения с мобильного устройства загрузка изображения завершается успешно, и тело сообщения корректно содержит ссылку на изображение (например, ...).

Однако последующий запрос POST /posts содержит:

“image_sizes”: {}

Серверная проверка медиа-контента выполняется только при условии manager.args[:image_sizes].present?:

if manager.args\[:image_sizes\].present? &&
       !user.in_any_groups?(SiteSetting.skip_review_media_groups_map)
    return :contains_media
  end

Пустой хэш в Ruby не считается present? (присутствующим), поэтому сообщение не распознается как содержащее медиа-контент и не отправляется на проверку. Таким образом, проверка skip_review_media_groups никогда не выполняется.

Подтверждение в HAR-файле:

  • POST /uploads завершился успешно (2xx).
  • Тело запроса POST /posts содержит Markdown-разметку изображения в поле raw.
  • То же самое тело запроса содержит “image_sizes”: {}.
  • Сообщение не было поставлено в очередь на проверку.

Веб-компоновщик формирует image_sizes на основе изображений в DOM-элементе предпросмотра редактора. Это делает проверку медиа-контента зависимой от метаданных предпросмотра, предоставляемых клиентом, которые могут отсутствовать на мобильных устройствах
или если изображение предпросмотра не было загружено.

Ожидаемое поведение: Сообщение, содержащее загруженное или встроенное изображение, должно попадать на проверку медиа-контента независимо от того, отправляет ли клиент размеры изображения.

Предлагаемое решение:

  1. Серверное обнаружение медиа-контента в сообщении — Определяйте наличие медиа-контента в сообщении путем анализа содержимого полей raw или cooked (или ссылок на загрузки) на сервере, вместо того чтобы полагаться исключительно на поле image_sizes, предоставляемое клиентом.

  2. Проверка всех загруженных медиа-файлов (лучше варианта 1) — Вместо проверки только тех медиа-файлов, которые вставлены в сообщение, напрямую проверяйте каждый медиа-файл, загруженный пользователем. Это полностью устраняет зависимость от метаданных на уровне сообщения и гарантирует, что ни один загруженный медиа-файл не обойдет очередь проверки, независимо от используемого клиента или конечной точки.