* Добавлены raw-функции, которые возвращают и http-заголовки ответа yad-а тоже * Уточнения в README.md и TODO * Мелкие косметические исправления.
5.6 KiB
YadProxy
Что это?
Своего рода API, делающий запросы в Yandex.Disk и выставляющий наружу листинг публично доступных файлов. Так же есть утилитка, которая заливает каталог с файлами на yad.
Зачем это нужно?
В моём случае Yandex.Disk хранит файлы пакетов для Slackware. Пакетов мало, поэтому бесплатного тарифа вполне достаточно.
Как это работает?
Немного лирики
YaD использует в своей работе т.н. "публичные ссылки". Это ссылки на страничку где предлагается указанный файл сохранить либо к себе на yad, чтобы оно засинкалось на комп через штатного клиента yad, либо скачать через браузер. Нам такой вариант никак не подходит по понятным причинам.
Но есть хорошие новости: в YaD есть прямые ссылки на файлы и эти ссылки "работают" напрямую, без дополнительных http-заголовков. Но ту тже огорчу - время жизни таких ссылок ограничено и не регламентировано. Иными словами, ссылку на объект хорошо бы каждый раз перед скачиванием запрашивать с yad.
В общих чертах
При загрузке файлов на диск сохраняется список урлов, по которым эти файлы будут доступны через веб-часть.
Как приятный бонус мы имеем dirlist в стиле nginx-а - со списком каталогов и файлов - в котором файлы - это по сути ссылки на YaD, а каталоги... ну это каталоги :) Если обратиться к файлу напрямую, в веб-часть, то мы получаем редирект на YaD.
Также предполагается к использованию утилита yad_upload_dir.pl. Она аплодит каталог с файлами в YaD.
Как это запустить?
Для запуска понадобятся:
- Аккаунт @yandex.ru, через который это всё будет работать
- uwsgi версии 2.0.15 или новее с поддержкой psgi
- perl-5.18 или новее (вплоть до 5.32.x, дальше не тестировал)
- пакеты perl-App-cpanminus и perl-local-lib
Предполагается, что придётся подтянуть модули из CPAN-а с помощью cpanm. Для этого есть скрипт bootstrap.sh
Как только всё вышеописанное в арсенале появится, можно переходить к регистрации приложения. Для работы понадобятся все привилегии в разделе Яндекс.Диск REST API. Полученные ID и Пароль надо вписать в data/config.json, пример конфига data/sample_config.json. Также надо убедиться, что параметр "Код подтверждения" либо отсутствует в конфиге, либо закоментирован.
Как только дело сделано, можно переходить к получению access_token. Для чего запускаем bin/yad_get_token.pl переходим по ссылке, разрешаем приложению доступы и полученный "Код подтверждения" копи-пастим в конфиг.
Запускаем bin/yad_get_token.pl повторно, чтобы он внёс в локальную базку все необходимые данные. После этого приложениями можно пользоваться.
Веб-часть я запускаю как PSGI-приложение, через UWSGI.
/usr/bin/uwsgi --yaml /var/lib/yadproxy/yadproxy.yaml
Статус пректа
Beta. Пока он не готов, хотя в принципе, как PoC, работает. Формально, он выйдет в релиз, как только закончатся пункты из файла TODO. :) Планов и сроков нет, возможно через год, когда в нём появится необходимость.
Завендоренные библиотеки
Справочная литература
- Yandex OAuth2 Reference (FYI, для бОльшего понимания, как это работает, можно почитать документацию imgur на эту тематику)
- Yandex Disk API reference