Загрузка резервной копии не может быть возобновлена после прерывания, так как токен электронной почты уже использован

Я подготовил PR по этому вопросу:

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

  • тому же аутентифицированному администратору;

  • той же резервной копии;

  • тому же исходному значению токена; и

  • последующему запросу с заголовком Range.

Обычное повторное полное GET с использованным токеном по-прежнему отклоняется, как и запрос Range для другой резервной копии. Резервные копии в Remote/S3 сохраняют существующее поведение.

Я сделал период возобновления перечислением (enum), а не неограниченной длительностью:

  • Disabled (Отключено)

  • 1 hour (1 час)

  • 6 hours (recommended) (6 часов (рекомендуется))

  • 12 hours (12 часов)

  • Until the original email token expires (До истечения срока действия исходного токена из письма)

Эффективный период возобновления также ограничивается оставшимся временем жизни исходного токена из письма на момент начала начальной загрузки.

Текущее поведение Discourse остаётся значением по умолчанию (Disabled) для обратной совместимости, тогда как 6 hours (6 часов) предлагается как рекомендуемый вариант при включении возобновляемых загрузок.

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

Я также добавил регрессионное покрытие для успешного пути возобновления и основных границ авторизации, включая:

  • повторное использование обычного токена по-прежнему отклоняется;

  • возобновление для другой резервной копии по-прежнему отклоняется;

  • отключение настройки немедленно предотвращает дальнейшее возобновление;

  • S3 не получает локальный токен возобновления; и

  • начальная загрузка и её возобновление создают только одну запись в журнале аудита загрузок резервных копий.

Полный набор тестов CI проходит успешно, и PR готов к ревью.

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