Прикрепленные файлы экспортированных отчетов (я тестировал на сводной странице просмотров) не помечены как защищенные, несмотря на то, что у файла установлен приватный ACL. Это препятствует загрузке, так как короткая ссылка ведет на неподписанную ссылку. После выполнения rake-задачи uploads:secure_upload_analyse_and_update файл был корректно помечен как защищенный (было найдено еще 3 поста/5 загрузок, но я не смог определить, что это было).
Можете уточнить, что вы имеете в виду под «прикреплённым файлом отчёта»? Скриншот?
Извините, я имею в виду ZIP-файл, на который была дана ссылка в личном сообщении, отправленном после завершения экспорта.
Это странно: если я попробую это на защищённом медиа-сайте, загрузка корректно помечается как защищённая. Можете после повторной попытки показать запись о загрузке в таком виде?
#<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">
Требуется ли вход в ваш сайт?
Вход в систему не требуется
#<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. Возможно, дело в этом.
Вот странная часть:
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).
Разве это не должно применяться ко всем потенциально защищённым загрузкам? Учитывая, что посты в приватных темах и других личных сообщениях не имеют этой проблемы, я не уверен в этом.
=> 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, поэтому предполагаю, что оно либо не выполнилось, либо вообще не запускалось.
Я так запутался
Есть ли на странице /logs что-то, что, похоже, связано с этим? Кажется, что это может происходить только в том случае, если задание Sidekiq update_post_uploads_secure_status завершается неудачей или выдаёт ошибку каким-то образом.
Пару ошибок было, но все они касались задачи CleanUpUploads. При более тщательном рассмотрении выяснилось, что задача так и не выполнялась (за последние два дня не было ни одной неудачной задачи).
Извините, я не могу воспроизвести эту проблему, поэтому пока больше ничего сделать с этим не получится.
