0
Files
yadproxy/README.md
eleksir cd4a0f5cb4 Изменения для уточнения возможности кэширования ответов yad.
* Добавлены raw-функции, которые возвращают и http-заголовки ответа
yad-а тоже
* Уточнения в README.md и TODO
* Мелкие косметические исправления.
2021-08-28 13:19:31 +03:00

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. :) Планов и сроков нет, возможно через год, когда в нём появится необходимость.

Завендоренные библиотеки

  1. Yandex::OAuth
  2. Yandex::Disk

Справочная литература

  1. Yandex OAuth2 Reference (FYI, для бОльшего понимания, как это работает, можно почитать документацию imgur на эту тематику)
  2. Yandex Disk API reference