Ссылки и доступ
Временные ссылки
Для каждого файла можно создать одну или несколько ссылок на скачивание. Каждая ссылка содержит криптографически случайный токен; в базе данных хранится только его SHA-256 хеш — сам исходный токен нигде не сохраняется и не логируется.
Срок действия (expiration)
При создании ссылки можно указать срок жизни в часах. По истечении этого времени ссылка автоматически перестаёт работать. Фоновый воркер также ежечасно деактивирует просроченные ссылки в базе данных.
Пароль на ссылку
Ссылку можно защитить паролем. Пароль хешируется алгоритмом argon2 и никогда не хранится в открытом виде. Получателю нужно ввести пароль на странице скачивания — после успешной проверки выдаётся кратковременный токен доступа (10 минут), позволяющий браузеру докачать файл, если скачивание было прервано.
Лимит скачиваний
Можно указать максимальное количество скачиваний по ссылке. Счётчик увеличивается атомарно в транзакции базы данных, что исключает превышение лимита при параллельных запросах.
Одноразовые ссылки
Одноразовая ссылка отключается в той же транзакции, что и учёт скачивания — ещё до того, как начнётся передача файла. Это предотвращает состояние гонки (race condition), при котором два одновременных запроса могли бы оба получить файл.
Важное следствие: одноразовые ссылки не поддерживают докачку через HTTP Range-запросы несколькими соединениями, так как повторное обращение к файлу означало бы более одного скачивания. Обычные ссылки (не одноразовые) поддерживают докачку прерванных загрузок.
Докачка (Range requests)
Сервер поддерживает HTTP Range-запросы для больших файлов, что позволяет браузеру возобновить прерванную загрузку без повторного скачивания всего файла с начала.