@iola_adm/iola-cli 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -3159,19 +3159,31 @@ async function yandexDiskList(remotePath, options = {}) {
|
|
|
3159
3159
|
}
|
|
3160
3160
|
|
|
3161
3161
|
async function yandexDiskFind(query, options = {}) {
|
|
3162
|
-
const payload = await yandexDiskRequest("GET", "/resources/files", { query: { limit: Math.max(100, Number(options.limit || 50) * 5), fields: "items.name,items.path,items.size,items.type" } });
|
|
3163
3162
|
const needle = normalizeGeoText(query);
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
type: item.type === "dir" ? "dir" : "file",
|
|
3167
|
-
name: item.name || path.basename(item.path || ""),
|
|
3168
|
-
path: denormalizeYandexDiskPath(item.path || ""),
|
|
3169
|
-
size: item.size || "-",
|
|
3170
|
-
}))
|
|
3163
|
+
const rows = await yandexDiskListRecursive(options.path || CLOUD_DEFAULT_REMOTE_DIR, { depth: Number(options.depth || 4), limit: Math.max(100, Number(options.limit || 50) * 5) });
|
|
3164
|
+
return rows
|
|
3171
3165
|
.filter((item) => normalizeGeoText(`${item.name} ${item.path}`).includes(needle))
|
|
3172
3166
|
.slice(0, Number(options.limit || 50));
|
|
3173
3167
|
}
|
|
3174
3168
|
|
|
3169
|
+
async function yandexDiskListRecursive(remotePath, options = {}) {
|
|
3170
|
+
const depth = Number(options.depth || 4);
|
|
3171
|
+
const limit = Number(options.limit || 200);
|
|
3172
|
+
const rows = [];
|
|
3173
|
+
await yandexDiskWalk(remotePath, rows, depth, limit);
|
|
3174
|
+
return rows;
|
|
3175
|
+
}
|
|
3176
|
+
|
|
3177
|
+
async function yandexDiskWalk(remotePath, rows, depth, limit) {
|
|
3178
|
+
if (rows.length >= limit || depth < 0) return;
|
|
3179
|
+
const items = await yandexDiskList(remotePath).catch(() => []);
|
|
3180
|
+
for (const item of items) {
|
|
3181
|
+
if (rows.length >= limit) break;
|
|
3182
|
+
rows.push(item);
|
|
3183
|
+
if (item.type === "dir") await yandexDiskWalk(item.path, rows, depth - 1, limit);
|
|
3184
|
+
}
|
|
3185
|
+
}
|
|
3186
|
+
|
|
3175
3187
|
async function yandexDiskUpload(localPath, remotePath, options = {}) {
|
|
3176
3188
|
const resolved = path.resolve(localPath);
|
|
3177
3189
|
const info = await stat(resolved);
|
|
@@ -36,20 +36,60 @@ iola cloud backup
|
|
|
36
36
|
- получение OAuth-токена: `https://yandex.ru/dev/id/doc/ru/access`
|
|
37
37
|
- получение токена вручную для проверки: `https://yandex.ru/dev/id/doc/ru/tokens/debug-token`
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
### Получение OAuth-токена Яндекс Диска
|
|
40
40
|
|
|
41
41
|
1. Откройте страницу Яндекс OAuth: `https://oauth.yandex.ru/`.
|
|
42
|
-
2.
|
|
43
|
-
3.
|
|
44
|
-
4.
|
|
45
|
-
5.
|
|
42
|
+
2. Если Яндекс просит пройти верификацию через Госуслуги, пройдите ее. Без этого создание OAuth-приложения может быть недоступно.
|
|
43
|
+
3. Нажмите `Создать`.
|
|
44
|
+
4. В окне `Какое приложение хотите создать?` выберите `Для авторизации пользователей`.
|
|
45
|
+
5. Нажмите `Перейти к созданию`.
|
|
46
|
+
6. На шаге `Создание приложения` заполните:
|
|
47
|
+
- `Название вашего сервиса`: например `iola-cli`;
|
|
48
|
+
- `Иконка сервиса`: загрузите любую простую PNG-иконку до 1 МБ;
|
|
49
|
+
- `Почта для связи`: оставьте свою почту или укажите актуальную.
|
|
50
|
+
7. Нажмите `Продолжить`.
|
|
51
|
+
8. На шаге `Платформы приложений` выберите `Веб-сервисы`.
|
|
52
|
+
9. В поле `Redirect URI` укажите:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
https://oauth.yandex.ru/verification_code
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
10. Нажмите кнопку добавления рядом с `Redirect URI`, если интерфейс показывает такую кнопку.
|
|
59
|
+
11. В поле `Suggest Hostname`, если оно обязательно, укажите сайт проекта или любой понятный URL сервиса, например:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
https://github.com
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
12. Нажмите `Продолжить`.
|
|
66
|
+
13. На шаге `Права доступа к данным пользователей` не выбирайте лишние основные права: телефон, почта, дата рождения, профиль не нужны.
|
|
67
|
+
14. В блоке `Дополнительные` через поле `Название доступа` добавьте три права:
|
|
68
|
+
- `Чтение всего Диска` / `cloud_api:disk.read`;
|
|
69
|
+
- `Запись в любом месте на Диске` / `cloud_api:disk.write`;
|
|
70
|
+
- `Доступ к информации о Диске` / `cloud_api:disk.info`.
|
|
71
|
+
15. Нажмите `Продолжить`.
|
|
72
|
+
16. На финальном экране проверьте, что приложение запрашивает только три права Диска.
|
|
73
|
+
17. Нажмите `Всё верно, создать приложение`.
|
|
74
|
+
18. На странице созданного приложения скопируйте `ClientID`.
|
|
75
|
+
19. Откройте ссылку, заменив `CLIENT_ID` на ваш `ClientID`:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
https://oauth.yandex.ru/authorize?response_type=token&client_id=CLIENT_ID
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
20. На экране авторизации нажмите `Войти как ...`.
|
|
82
|
+
21. Если Яндекс показывает предупреждение `Сервис ещё не верифицирован`, это нормально для личного приложения. Продолжайте только если приложение создавали вы сами и доверяете ему.
|
|
83
|
+
22. Яндекс перенаправит на страницу `verification_code`, где будет показан OAuth-токен. В адресной строке он также находится после `access_token=`.
|
|
84
|
+
23. Скопируйте OAuth-токен.
|
|
85
|
+
24. В CLI выполните:
|
|
46
86
|
|
|
47
87
|
```bash
|
|
48
88
|
iola cloud setup yandex-disk
|
|
49
89
|
```
|
|
50
90
|
|
|
51
|
-
|
|
52
|
-
|
|
91
|
+
25. Вставьте OAuth-токен.
|
|
92
|
+
26. Проверьте подключение:
|
|
53
93
|
|
|
54
94
|
```bash
|
|
55
95
|
iola cloud doctor
|
|
@@ -57,6 +97,10 @@ iola cloud doctor
|
|
|
57
97
|
|
|
58
98
|
Секрет сохраняется локально в `~/.iola/secrets.json`.
|
|
59
99
|
|
|
100
|
+
После успешной проверки CLI создаст или использует папку `/IOLA` на Яндекс Диске.
|
|
101
|
+
|
|
102
|
+
Обычно такой токен выдается на длительный срок. Если доступ перестал работать, получите новый токен через ту же ссылку авторизации и повторите `iola cloud setup yandex-disk`.
|
|
103
|
+
|
|
60
104
|
## Облако Mail.ru
|
|
61
105
|
|
|
62
106
|
Облако Mail.ru подключается через WebDAV.
|