Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Клиент синхронизации с Yandex.disk (Python3, OpenSource)  (Прочитано 14090 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7050
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #45 : 23 Ноябрь 2016, 19:00:47 »
Sly_tom_cat, а разве соединение с сервисами Яндекса через API идёт без шифрования?

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #46 : 23 Ноябрь 2016, 19:14:39 »
Запрос то идет по https, но вот на машине локально то можно подсмотреть.

Тут понятно в принципе - если ID и пароль приложения важно не светить разработчику, но их использование потребует создания нового приложения (нужно же использовать те же сервисы), т.е. - довольно неинтересный вариант хака. С учетом того что это свое приложение еще и подсунуть пользователям как то нужно вместо авторского....

С токеном пользователя - уже веселее - его пользователь хоть и получит достаточно безопасно, но если злоумышленник умыкнет его с локальной машины, то на другой машине, используя то-же приложение, можно иметь доступ к облачным данным пользователя... и он об этом может никогда и не узнать (если он не заглядывает в раздел используемых устройств)....

А токен программе нужен в открытом виде - его особо не спрячешь...

Радует только то, что все-таки нужен доступ к локальному диску пользователя для реализации этого вектора атаки.
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #47 : 22 Февраль 2017, 13:56:41 »
Короче подзамучился я с официальным демоном - режет гад права на исполнение при синхронизации - когда это один два файлика в моем маленьком проекте (котрый лежит в ЯД и пушится на github) - то фигня вопрос - скриптом нужные файлы испольняемыми делаю когда нужно.

Но тут Python выложили на github и я решил поконтрибьютить некоторые свои доработки в стандартных библиотеках которые мне понадобились при реализации этого проекта и тут я получил уже вал файлов у который ЯД съедает права на исполнения, причем эта толпа файлов разбросана по клону репозиторя практически случайным образом. И таки да - сделал список и кормлю его скрипту, который прова восстанавливает, но доставать эти костыли уже начали.... Написал тындексам - но от них можно решения ждать до позеленения...

По сему посмотрел и допилил своему демону сохранение и восстановление POSIX прав на файлы (uid, gid, mode).
Вроде даже работает.

Может эта мегафича и не нужна толком никому, но у меня она внезапным образом возродила интерес к проекту который я немного подзабросил.

ЗЫ кстати попробовал еще GoogleDrive (через insync) и MEGA - вот ведь блин - они все права режут, гады. :-\
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Punko

  • Гость
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #48 : 22 Февраль 2017, 15:18:27 »
Sly_tom_cat, думаю это банальная защита для них, чтоб файлы с "х" флагом не висели у них на серверах.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #49 : 22 Февраль 2017, 16:07:04 »
Punko, так это мой каталог (локальный) - я хочу что бы он один в один переносился и синхронизировался между машинами. И это как бы естественное желание когда пользуешься синхронизацийе через облако, но получается что не один в один - права режутся что для git репозитория хранимого в таком каталоге - просто как серпом по причинным местам. git же отслеживает права на файлы.

Пользователь добавил сообщение 22 Февраль 2017, 16:12:44:
Тут по ходу дела еще нашел топор за лавкой - бесплатный сервис (с ограниченными ресурсами конечно) для реализации на github идеи CI... и подумалось мне что это - хорошо и правильно, тем более что у меня на часть компонентов прямо в файле модуля есть свои тесты.... вот пробую прикрутить. Прикольно же на автомате прогнать тесты в нескольких версиях питона, для примера.
« Последнее редактирование: 22 Февраль 2017, 16:12:44 от Sly_tom_cat »
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14343
  • Я не слышу.
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #50 : 22 Февраль 2017, 16:13:38 »
сборку - эту Ydisk.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #51 : 27 Февраль 2017, 12:21:12 »
Праздники прошли не даром - попилил немного демона и прикрутил к нему unittest-ы (для проверкии при пушах на github через CircleCI)
По ходу написания тестов наступило некоторое переосмысление того какие могут быть у демона статусы/состояния и что где нужно делать (что внутри класса Disk, а что в его обертке).

Так что пилить немного прекратил - надо подумать, схемки порисовать прежде чем дальше кодить.

Чувствуется переделывать придется довольно много.

Но зато я достаточно много еще поработал над совместной работой i-Notify вотчера и процедуры полной синхронизации. Демон стал работать заметно резвее и меньше делать ошибок (когда он сам с собой договориться не мог - что делать надо).

Если поделить на блоки то:
- i-Notify + fullSinc - уже вполне отлажены.
- Обработка статуса - тут надо все изрядно переделывать.
- общая окантовка класса Disk - тоже требует переработки в связи с переделкой системы обработки статусов.
- тесты: нужно повысить степень покрытия кода.
- самое больное место - xmpp клиент для получения изменений от диска - даже не брался еще.

ЗЫ тесты для класса взаимодействия с облаком, и для класса конфигурации - очень гладко перенеслись в юниттесты - эти компоненты в целом претерпевают минимальные доработки. И автоматические тесты для них - самое то что нужно.
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Со статусами пока обошелся малой кровью - добавил статус fail на случай когда диск(демон синхронизации) не имеет прав на доступ к своему локальному каталогу. Это особый статус - в нем демон ни на что не реагирует и ничего не делает - его можно только выключить.

Остальные статусы поделил на два лагеря - те что отвечают за состояние когда демон активен (условно - приконекчен к облаку): idle, busy, error, и когда он не активен (условно с облаком не соединен): none и no_net. Условно в последнюю группу входит и fault, но по сути этот статус стоит особняком от остальных, т.к. все остальные друг в друга могут переходить, fault - он всегда fault.
 
С таким делением статусов демон стал более полноценен:
1. может стартовать с отсутствующим локальным каталогом для синхронизации с облаком (создаст сам, если сможет)
2. имеет четкий статус соединен/не соединен

Попутно начал регулярно ловит ситуации подвисания одного из рабочих потоков в threadPoolExecutor. А так как оно там крутится и ничего наружу не выдает пришлось поднимать логгирование. Так что допилил наконец нормальное логгирование. Логгирование позволило выяснить что зависает получение статуса асинхронной операции. И выяснилось что таки да - там в обработчике у меня был слепой цикл если не получаю статус success. Оказалось, что можно получить и fail... а я эту ситуацию не обрабатывал, и получал зависающие навечно рабочие процессы в threadPoolExecutor-е.

То что я не мог вычислить этот кейс было в частности всязано с тем что я довольно мало возвращал из объекта Cloud(операции с облачным хранилищем). Пришлось допилить и этот объект что бы он по ошибке выдавал больше информации.

А это в свою очередь позволило раценить одну из ошибок как не ошибку. А именно - когда создание каталога в облаке возвращает ошибку такой путь уже существует - то это же никакая не ошибка - каталог же уже есть (и не важно что мы его не создали).

Пользователь добавил сообщение 03 Март 2017, 17:50:28:
В целом я погряз в идее continuous integration - напилил кучу unittest-ов, и добился значительного покрытия кода тестами:

Цитировать
Name      Stmts   Miss  Cover   Missing
---------------------------------------
Cloud       135      5    96%   97, 244-247
Disk        494     77    84%   433-438, 440-446, 449, 681-758
jconfig      41      0   100%   
---------------------------------------
TOTAL       670     82    88%   

Причем диапазон строк 681-758 в классе Disk - это интерактивная обертка класса - т.е. просто обертка. А 433-438, 440-446 - это явно не запускаемый код - отработки конфликта (я его еще не продумал до конца и не отлаживал еще). Т.е. фактически у Disk - 100% покрытие на самом деле.

А в Cloud не покрыты только те ошибочные ситуации, которые можно протестировать разве что сеть погасив... как это временно сделать без административных прав - я пока не придумал....
« Последнее редактирование: 03 Март 2017, 17:50:28 от Sly_tom_cat »
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
Re: Клиент синхронизации с Yandex.disk (Python3, OpenSource)
« Ответ #53 : 17 Апрель 2017, 11:48:51 »
Думаю многим будет интересно - на Yandex диске раздают по 32Гб навсегда https://yandex.ru/set/lp/disk-32gb/0/
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн luu

  • Активист
  • *
  • Сообщений: 666
  • шта?
    • Просмотр профиля
Я так понимаю, тема умерла?!  :-\

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11656
  • Xubuntu 16.04 (64bit)
    • Просмотр профиля
luu, Практически так.

Во первых я немного погряз в асинхронной синхронизации с облаком - там надо делать какой-то сортировщик очереди заданий, но попытки продумать логику такой сортировки как-то не задались...

В принципе есть обходной путь - отлавливать факт массовых обновлений и на время просто игнорировать все, что приходит от inotify. А потом, когда поток обновлений затихнет, просто выполнить полную синхронизацию.

Но, по факту эти сложности с выбором пути куда двигаться дальше, просто немного притормозили мой порыв быстро сделать эту работу. А тут еще я окончательно замаялся с тем, что ЯД трет права на исполнение в моих git репах и открыл для себя Syncthing. А после этого мой интерес к ЯД в целом - снизился.

Клиент работоспособен процентов на 80, но вот на оставшиеся 20%, похоже, нужно 80% усилий (внезапно опять это правило сработало). Однако доделывать его - нет ни желания, ни сил...
Индикатор для Yandex-Disk: http://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

 

Страница сгенерирована за 0.196 секунд. Запросов: 23.