maxifly / YaBackupAddon

9 stars 2 forks source link

Ограничение доступа папкой приложения #6

Closed RushOnline closed 1 year ago

RushOnline commented 1 year ago

Приветствую! Огромное спасибо за ваш труд!

Расширение не работает с токеном с доступом только к папке приложения, а очень хотелось бы! Не планируете ли вы соответствующие правки?

Или подскажите, пожалуйста, как вы отлаживаете расширение, я могу попробовать сам допилить.

Спасибо!

Доп. информация:

•  Доступ к папке приложения на Диске
•  Доступ к информации о Диске
[2023-10-22 22:30:11,291] INFO in yabackup: Root request
[2023-10-22 22:30:11,761] ERROR in yad: Error get directory info. Path: /backup/hass
Traceback (most recent call last):
  File "/app/yabackup/root/yad.py", line 212, in _list_yandex_disk
    files = self._file_list_processing(y.listdir(self._path))
  File "/app/yabackup/root/yad.py", line 312, in _file_list_processing
    files = [obj for obj in objects if obj.type == TYPE_FILE]
  File "/app/yabackup/root/yad.py", line 312, in <listcomp>
    files = [obj for obj in objects if obj.type == TYPE_FILE]
  File "/usr/lib/python3.8/site-packages/yadisk/yadisk.py", line 75, in _listdir
    result = get_meta_function(path, **kwargs)
  File "/usr/lib/python3.8/site-packages/yadisk/yadisk.py", line 443, in get_meta
    request.send()
  File "/usr/lib/python3.8/site-packages/yadisk/api/api_request.py", line 124, in send
    auto_retry(self._attempt, self.n_retries, self.retry_interval)
  File "/usr/lib/python3.8/site-packages/yadisk/utils.py", line 96, in auto_retry
    return func()
  File "/usr/lib/python3.8/site-packages/yadisk/api/api_request.py", line 115, in _attempt
    raise get_exception(self.response)
yadisk.exceptions.ForbiddenError: Доступ запрещён. Возможно, у приложения недостаточно прав для данного действия. (Forbidden / ForbiddenError)
maxifly commented 1 year ago

Я так понимаю, что папка приложения создаётся в системном каталге Приложения. А у Вас путь к папке /backup/hass

Может в этом дело?

Правда, я думаю, Вы получите InternalServerError всё равно.. Так как токена при первом запуске ещё нет, а папка будет создана в момент первого обращения. Можно наверное обмануть. Дать больше прав, указать другую папку. Потом запросить токен. Создастся папка приложения. Потом остановит, в конфиге указать уже путь до папки приожения и потом у токена отнять лишние права.

RushOnline commented 1 year ago

Я так понимаю, что папка приложения создаётся в системном каталге Приложения. А у Вас путь к папке /backup/hass

Может в этом дело?

Системного каталога у приложения нет, или я не понял, о чём вы. Токену приложения дан доступ к папке /backup/hass, именно её приложение и должно пытаться прочитать, а оно, возможно, читает корневую папку, ну или что там делается в этой строке - вам лучше знать ))

RushOnline commented 1 year ago

Я так понял приложение пытается найти /backup/hass в своей папке, то бишь на диске путь выглядит как /backup/hass/backup/hass , так получается? Создал такую папку, вроде запустилось, спасибо ))

RushOnline commented 1 year ago

Короче при любом раскладе Internal Server Error, хоть мытьём, хоть катаньем...

maxifly commented 1 year ago

Неожиданно. Я так понял, что

Все папки приложений создаются в системном каталоге Приложения. По аналогии с другими системными каталогами, его имя задается в соответствии с языком учетной записи (например, для англоязычных пользователей этот каталог называется Apps).

И соответвенно у вас будет папка по пути /Приложения/ваше_приложение/ваша_папка_для_бакапа

maxifly commented 1 year ago

Короче при любом раскладе Internal Server Error, хоть мытьём, хоть катаньем...

Да. Надо мне будет обработку ошибок подпилить.

RushOnline commented 1 year ago

Все папки приложений создаются в системном каталоге Приложения.

Вот этой инфы мне не хватало, завтра попробую заново ещё раз, спасибо!

maxifly commented 1 year ago

Все папки приложений создаются в системном каталоге Приложения.

Вот этой инфы мне не хватало, завтра попробую заново ещё раз, спасибо!

https://yandex.ru/dev/disk/api/concepts/app-folders.html

maxifly commented 1 year ago

Я поэксперементировал. Папка создаётся при первом успешном REST-запросе. А для этого с самого начала в конфиге должна быть прописана именно правильная папка.

Правильный подход такой. Создаём приложение, даём разрешения как Вы хотите. В конфигурации в путь вписываем /Приложения/<Ваше приложение> К примеру: /Приложения/TestWithAppFolder

Потом запускаем приложение, получаем токен и дальше всё как обычно.

Папка создастся авоматически после получения токена. Если папку удалить, то она снова создастся при первом же входе в веб-форму дополнения

Попробуйте. Должно получится.

maxifly commented 1 year ago

В этом подходе есть как плюсы - ограничение прав одним каталогом, так и минусы - путь зависит от локализации. Если у вашего профиля язык руссский, то /Приложения/<Ваше приложение> Если английский, то /Apps/<Ваше приложение>

Это надо учитывать