0

Изменения для уточнения возможности кэширования ответов yad.

* Добавлены raw-функции, которые возвращают и http-заголовки ответа
yad-а тоже
* Уточнения в README.md и TODO
* Мелкие косметические исправления.
This commit is contained in:
eleksir
2021-08-28 13:19:31 +03:00
parent e655c11e0b
commit cd4a0f5cb4
11 changed files with 172 additions and 28 deletions

View File

@@ -2,7 +2,8 @@
## Что это?
Своего рода API, делающий запросы в Yandex.Disk и выставляющий наружу листинг публично доступных файлов.
Своего рода API, делающий запросы в Yandex.Disk и выставляющий наружу листинг публично доступных файлов. Так же есть
утилитка, которая заливает каталог с файлами на yad.
## Зачем это нужно?
@@ -11,21 +12,38 @@
## Как это работает?
### Немного лирики
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-5.18 или новее (вплоть до 5.32.x, дальше не тестировал)
* пакеты perl-App-cpanminus и perl-local-lib
Предполагается, что придётся подтянуть модули из CPAN-а с помощью [cpanm][4]. Для этого есть скрипт **bootstrap.sh**
Как только всё вышеописанное в арсенале появится, можно переходить к [регистрации][1] приложения. Для работы понадобятся
все привилегии в разделе **Яндекс.Диск REST API**. Полученные ID и Пароль надо вписать в **data/config.json**, пример
все привилегии в разделе **Яндекс.Диск REST API**. Полученные **ID** и **Пароль** надо вписать в **data/config.json**, пример
конфига **data/sample_config.json**. Также надо убедиться, что параметр "Код подтверждения" либо отсутствует в конфиге,
либо закоментирован.
@@ -42,21 +60,25 @@
## Статус пректа
RC. Пока он *не готов*, хотя в принципе работает. Формально, он выйдет в релиз, как только закончатся пункты из файла
TODO. :)
Ясное дело, что для серьёзного prodution-а это приложение не годится, во всяком случае в таком виде, как оно есть.
Как минимум необходимо организовать кэширование. Соответственно, корректно выдавать expires со стороны приложения,
чтобы, например, nginx мог без проблем кэшировать контент через proxy_cache.
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