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

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
Description
No description provided
Readme 62 KiB
Languages
Perl 99.8%
Shell 0.2%