# 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][4]. Для этого есть скрипт **bootstrap.sh** Как только всё вышеописанное в арсенале появится, можно переходить к [регистрации][1] приложения. Для работы понадобятся все привилегии в разделе **Яндекс.Диск REST API**. Полученные **ID** и **Пароль** надо вписать в **data/config.json**, пример конфига **data/sample_config.json**. Также надо убедиться, что параметр "Код подтверждения" либо отсутствует в конфиге, либо закоментирован. Как только дело сделано, можно переходить к получению access_token. Для чего запускаем **bin/yad_get_token.pl** переходим по ссылке, разрешаем приложению доступы и полученный "Код подтверждения" копи-пастим в конфиг. Запускаем **bin/yad_get_token.pl** повторно, чтобы он внёс в локальную базку все необходимые данные. После этого приложениями можно пользоваться. Веб-часть я запускаю как [PSGI][2]-приложение, через [UWSGI][3]. ``` /usr/bin/uwsgi --yaml /var/lib/yadproxy/yadproxy.yaml ``` ## Статус пректа Beta. Пока он *не готов*, хотя в принципе, как PoC, работает. Формально, он выйдет в релиз, как только закончатся пункты из файла TODO. :) Планов и сроков нет, возможно через год, когда в нём появится необходимость. ## Завендоренные библиотеки 1. [Yandex::OAuth][5] 2. [Yandex::Disk][6] ## Справочная литература 1. [Yandex OAuth2 Reference][7] (FYI, для бОльшего понимания, как это работает, можно почитать документацию [imgur][8] на эту тематику) 2. [Yandex Disk API reference][9] [1]: https://oauth.yandex.ru/ [2]: https://uwsgi-docs.readthedocs.io/en/latest/Perl.html [3]: https://github.com/unbit/uwsgi [4]: https://github.com/miyagawa/cpanminus [5]: https://metacpan.org/pod/Yandex::OAuth [6]: https://metacpan.org/pod/Yandex::Disk [7]: https://yandex.com/dev/oauth/doc/dg/concepts/about.html [8]: https://api.imgur.com/oauth2 [9]: https://yandex.com/dev/disk/api/concepts/about.html