Привет, Хабр. В этой статье я продолжу изучение возможностей электронного журнала(прошлая статья).
На этот раз поговорим о загрузке файлов, квоте и написание простой утилиты для хранения файлов на серверах электронного журнала
Анализ
Для начала стоит рассказать, откуда в школьном журнале есть функционал хранения файлов у учеников. Он нужен для того, чтобы отправлять письма с вложениями внутри ЭлЖура.
Этот функционал меня крайне заинтересовал, поэтому я перенос запрос в PostMan и начал разбираться

JWT_TOKEN - Jwt токен, который отдает главное приложение при входе
SCHOOL_DOMAIN - кодовый домен школы, чтобы элжур понимал, какие пользователи там есть
Так выглядит ответ от сервера, когда запрос удался

Именно на этом скрине раскрывается главная причина, почему появилась идея файлохранилища.
Пример ссылки (рабочий) :
Скачивание файла доступно всем пользователям без регистрации. С какой-то стороны сомнительное решение, но оно поможет нам сделать облако доступным для всех.
Если попробовать загрузить большой файл, то получим ошибку. Максимальный вес файла - 50мб.

Написание скриптов
Скрипты в этой статье набросок, а не готовая программа. Они нужны лишь для технической обоснованности идеи. Не стоит оценивать их красоту, а точнее ее отсутствие)
Ограничения в 50мб очень сильно расстраивают, но их можно обойти
Это значит, что придется разбивать наш файл на чанки по 50мб и загружать их отдельно.
Для удобство программа сохраняет ссылки в json файл. Вот его вид:

Для примера, ссылка на json для вышеупомянутого debian образа тык
Не забываем и про целостность файлов

Проверка была выполнена на ~20 файлах, все было хорошо, хеши совпадали
Пупупу
Однако во время проведения экспериментов была найдена интересная деталь…..

Да, сервис хранилища не проверял истечения токена. В JWT токенах хранится timestamp, после которого токен считается невалидным. В нашем примере он находится в поле exp. НО сервер просто не проверяет его истечение

В этот раз для отправки отчета я выбрал более интересный путь)
Попробовал написать знакомым в этой области. Как итог, в тот же день отчет был у разработчиков)
Замеры скорости
Так как мы делаем файловое хранилище, скорость очень важна.
Скрин с диспетчера задач Windows
Замер из диспетчера задач Windows

Канал | 300 мбит |
Скорость до хранилища | ~230 мбит |
Географическое положение | Нижний Новгород |
btop на Linux

Канал | 300 мбит |
Скорость до хранилища | ~130 мбит |
Географическое положение | Москва |
Выводы
Как ни странно, но хранить файлы в электронном журнале можно. Особенно удобно делать это, когда получатель из Нижегородской области. Так скорость скачивания будет на хорошем уровне.
Понятно, что применение такого обменника сомнительно в реальности, но статья больше направлена на освещение интересных возможностей в Электронном журнале
До скорых встреч)