Невозможно скачать экспортированные отчеты, когда включена защищенная медиасистема

Прикрепленные файлы экспортированных отчетов (я тестировал на сводной странице просмотров) не помечены как защищенные, несмотря на то, что у файла установлен приватный ACL. Это препятствует загрузке, так как короткая ссылка ведет на неподписанную ссылку. После выполнения rake-задачи uploads:secure_upload_analyse_and_update файл был корректно помечен как защищенный (было найдено еще 3 поста/5 загрузок, но я не смог определить, что это было).

1 лайк

Можете уточнить, что вы имеете в виду под «прикреплённым файлом отчёта»? Скриншот?

1 лайк

Извините, я имею в виду ZIP-файл, на который была дана ссылка в личном сообщении, отправленном после завершения экспорта.

1 лайк

Это странно: если я попробую это на защищённом медиа-сайте, загрузка корректно помечается как защищённая. Можете после повторной попытки показать запись о загрузке в таком виде?

#<Upload:0x0000556ae80c5208
 id: 532362,
 user_id: 1436,
 original_filename: "consolidated-page-views-220318-031153-54.zip",
 filesize: 480,
 width: nil,
 height: nil,
 url: "//blah.zip",
 created_at: Fri, 18 Mar 2022 03:11:53.556489000 UTC +00:00,
 updated_at: Fri, 18 Mar 2022 03:11:53.842038000 UTC +00:00,
 sha1: "12345",
 origin: nil,
 retain_hours: nil,
 extension: "zip",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: "12345",
 secure: true,
 access_control_post_id: 377702,
 original_sha1: "12345",
 verification_status: 1,
 animated: nil,
 security_last_changed_at: Fri, 18 Mar 2022 03:11:53.836860000 UTC +00:00,
 security_last_changed_reason: "login is required | source: post creator">

Требуется ли вход в ваш сайт?

1 лайк

Вход в систему не требуется

#<Upload:0x000055646d495a30
 id: 62749,
 user_id: 1,
 original_filename: "web-crawlers-220318-032906-26.zip",
 filesize: 3017,
 width: nil,
 height: nil,
 url:
  "//[nope].storage.googleapis.com/original/3X/6/7/679649f9c6d33541cf5f5d2c48c2ef514bde36a0.zip",
 created_at: Fri, 18 Mar 2022 03:29:07.114686000 UTC +00:00,
 updated_at: Fri, 18 Mar 2022 03:29:07.328592000 UTC +00:00,
 sha1: "679649f9c6d33541cf5f5d2c48c2ef514bde36a0",
 origin: nil,
 retain_hours: nil,
 extension: "zip",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: "54f0df6d95a84d04877aa20f238c3b1e",
 secure: false,
 access_control_post_id: 214238,
 original_sha1: "5cc4f437505ae3a07bdd27bbe2653462de31db6d",
 verification_status: 1,
 animated: nil,
 security_last_changed_at: Fri, 18 Mar 2022 03:29:07.112534000 UTC +00:00,
 security_last_changed_reason: "no checks satisfied | source: upload creator">

Наша настройка сайта secure_media проверяется только в отношении AWS S3. Возможно, дело в этом.

1 лайк

Вот странная часть:

security_last_changed_reason: "no checks satisfied | source: upload creator"

У меня при настройках сайта login_required false и secure_media true при экспорте отчёта, который отправляется мне в личные сообщения, я получаю следующее:

 security_last_changed_reason: "access control post dictates security | source: post creator"

Это логично, так как создатель поста в личном сообщении имеет прикрепленную загрузку, и в этот момент она должна быть установлена как secure: true. У вас есть access_control_post_id в записи этой загрузки, но, похоже, это сработало некорректно?

Что произойдет, если вы выполните Post.find(214238).with_secure_media??

Я не думаю, что это должно на это влиять; это, как мне кажется, затронет только списки контроля доступа (ACL).

1 лайк

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

=> true

Хм… Не совсем понятно, что здесь произошло.

Странно, если я поставлю точку останова внутри PostCreator (который вызывается из задачи экспорта), то сначала для загрузки я получаю результат, похожий на ваш:

  secure: false,
  access_control_post_id: 67115,
...
  security_last_changed_at: Fri, 18 Mar 2022 04:14:42.292485000 UTC +00:00,
  security_last_changed_reason: "no checks satisfied | source: upload creator"

Но как только происходит обновление статуса secure в PostCreator, всё приходит в норму:

 secure: true,
 access_control_post_id: 67115,
...
 security_last_changed_at: Fri, 18 Mar 2022 04:14:55.645303000 UTC +00:00,
 security_last_changed_reason: "access control post dictates security | source: post creator"

Возвращает ли Discourse.store.external? true у вас?

  def update_uploads_secure_status(source:)
    if Discourse.store.external?
      Jobs.enqueue(:update_post_uploads_secure_status, post_id: self.id, source: source)
    end
  end

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

Я так запутался :thinking: Есть ли на странице /logs что-то, что, похоже, связано с этим? Кажется, что это может происходить только в том случае, если задание Sidekiq update_post_uploads_secure_status завершается неудачей или выдаёт ошибку каким-то образом.

Пару ошибок было, но все они касались задачи CleanUpUploads. При более тщательном рассмотрении выяснилось, что задача так и не выполнялась (за последние два дня не было ни одной неудачной задачи).

Извините, я не могу воспроизвести эту проблему, поэтому пока больше ничего сделать с этим не получится.

1 лайк