diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml
index 72d1ef9..9653bfe 100644
--- a/.github/workflows/qa.yml
+++ b/.github/workflows/qa.yml
@@ -37,13 +37,18 @@ jobs:
opm install opm
opm install --dev
- # Запуск контейнера NextCloud
- - name: Запуск контейнера NextCloud
+ # Запуск контейнеров NextCloud и OpenSSH
+ - name: Запуск контейнеров NextCloud и OpenSSH
env:
- NC_ADDRESS: ${{ secrets.NC_ADDRESS }}
- NC_ADMIN_NAME: ${{ secrets.NC_ADMIN_NAME }}
- NC_ADMIN_PWD: ${{ secrets.NC_ADMIN_PWD }}
- run: ./tools/nextcloud/startenv.bat
+ NC_TEST_ADDRESS: ${{ secrets.NC_TEST_ADDRESS }}
+ NC_TEST_ADMIN_NAME: ${{ secrets.NC_TEST_ADMIN_NAME }}
+ NC_TEST_ADMIN_PWD: ${{ secrets.NC_TEST_ADMIN_PWD }}
+ SFTP_TEST_ADDRESS: ${{ secrets.SFTP_TEST_ADDRESS }}
+ SFTP_TEST_USER: ${{ secrets.SFTP_TEST_USER }}
+ SFTP_TEST_PWD: ${{ secrets.SFTP_TEST_PWD }}
+ run: |
+ docker-compose --file ./tools/docker-compose.yml up --build -d
+ oscript ./tools/nextcloud/checkenv.os
# Запуск тестов и сбор покрытия кода
- name: Покрытие кода
@@ -51,14 +56,17 @@ jobs:
CPDB_SQL_SRVR: ${{ secrets.CPDB_SQL_SRVR }}
CPDB_SQL_USER: ${{ secrets.CPDB_SQL_USER }}
CPDB_SQL_PWD: ${{ secrets.CPDB_SQL_PWD }}
- NC_ADDRESS: ${{ secrets.NC_ADDRESS }}
- NC_ADMIN_NAME: ${{ secrets.NC_ADMIN_NAME }}
- NC_ADMIN_PWD: ${{ secrets.NC_ADMIN_PWD }}
+ NC_TEST_ADDRESS: ${{ secrets.NC_TEST_ADDRESS }}
+ NC_TEST_ADMIN_NAME: ${{ secrets.NC_TEST_ADMIN_NAME }}
+ NC_TEST_ADMIN_PWD: ${{ secrets.NC_TEST_ADMIN_PWD }}
+ SFTP_TEST_ADDRESS: ${{ secrets.SFTP_TEST_ADDRESS }}
+ SFTP_TEST_USER: ${{ secrets.SFTP_TEST_USER }}
+ SFTP_TEST_PWD: ${{ secrets.SFTP_TEST_PWD }}
run: oscript ./tasks/coverage.os
- # Удаление контейнера NextCloud
- - name: Удаление контейнера NextCloud
- run: ./tools/nextcloud/stopenv.bat
+ # Остановка и удаление контейнеров NextCloud и OpenSSH
+ - name: Остановка и удаление контейнеров NextCloud и OpenSSH
+ run: docker-compose --file ./tools/docker-compose.yml down
- name: Получение packagedef
shell: pwsh
diff --git a/README.md b/README.md
index 8c0af72..b52df45 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@
- [cli](https://github.com/Stepa86/cli)
- [yadisk](https://github.com/kuntashov/oscript-yadisk)
- [nextcloud-lib](https://github.com/arkuznetsov/nextcloud-lib)
+- [ClientSSH](https://github.com/arkuznetsov/oscript-ssh)
- [ParserFileV8i](https://github.com/ret-Phoenix/parserV8i)
- [7-zip](http://www.7-zip.org/)
- [MS Command Line Utilities for SQL Server (sqlcmd)](https://www.microsoft.com/en-us/download/details.aspx?id=53591)
@@ -57,12 +58,17 @@
|| **copy** | - Копировать/переместить файлы |
|| **split** | - Архивировать файл с разбиением на части указанного размера (используется 7-Zip) |
|| **merge** | - Разархивировать файл (используется 7-Zip) |
-|| **putyadisk** | - Помещение файла на Yandex-Диск |
-|| **getyadisk** | - Получение файла из Yandex-Диска |
-|| **putnc** | - Помещение файла в сервис NextCloud |
-|| **getnc** | - Получение файла из сервиса NextCloud |
|| **mapdrive** | - Подключить сетевой диск |
|| **umapdrive** | - Отключить сетевой диск |
+| **yadisk** | Группа команд работы с сервисом Yandex-Диск |
+|| **put** | - Помещение файла на Yandex-Диск |
+|| **get** | - Получение файла из Yandex-Диска |
+| **nextcloud** | Группа команд работы с сервисом NextCloud |
+|| **put** | - Помещение файла в сервис NextCloud |
+|| **get** | - Получение файла из сервиса NextCloud |
+| **sftp** | Группа команд работы с SFTP-сервером |
+|| **put** | - Помещение файла на сервер SFTP |
+|| **get** | - Получение файла с сервера SFTP |
| **batch** | - Последовательное выполнение команд по сценариям, заданным в файлах (json) |
||||
@@ -72,9 +78,9 @@
| Общие параметры для команд группы: ||
|-|-|
-| **--sql-srvr** | - Адрес сервера MS SQL |
-| **--sql-user** | - Пользователь сервера |
-| **--sql-pwd** | - Пароль пользователя сервера |
+| **--srvr** | - Адрес сервера MS SQL |
+| **--user** | - Пользователь сервера |
+| **--pwd** | - Пароль пользователя сервера |
----------------------------------------------------------------
## create - Создание базы MS SQL
@@ -82,13 +88,13 @@
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--sql-db** | - Имя базы для восстановления |
+| **--db** | - Имя базы для восстановления |
| **--db-recovery** | - Установить модель восстановления (RECOVERY MODEL), возможные значения "FULL", "SIMPLE", "BULK_LOGGED" |
#### Пример:
```bat
-cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 create --sql-db MyDatabase --db-recovery SIMPLE
+cpdb database --srvr MySQLName --user sa --pwd 12345 create --db MyDatabase --db-recovery SIMPLE
```
## backup - Создание резервной копии базы MS SQL
@@ -96,13 +102,13 @@ cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 create --sql-db
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--sql-db** | - Имя базы для восстановления |
+| **--db** | - Имя базы для восстановления |
| **--bak-path** | - Путь к резервной копии |
#### Пример:
```bat
-cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 backup --sql-db MyDatabase --bak-path "d:\MSSQL\Backup\MyDatabase_copy.bak"
+cpdb database --srvr MySQLName --user sa --pwd 12345 backup --db MyDatabase --bak-path "d:\MSSQL\Backup\MyDatabase_copy.bak"
```
## restore - Восстановление базы MS SQL из резервной копии
@@ -110,7 +116,7 @@ cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 backup --sql-db
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--sql-db** | - Имя базы для восстановления |
+| **--db** | - Имя базы для восстановления |
| **--bak-path** | - Путь к резервной копии |
| **--create-db** | - Создать базу в случае отсутствия |
| **--db-owner** | - Имя владельца базы после восстановления |
@@ -126,7 +132,7 @@ cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 backup --sql-db
#### Пример:
```bat
-cpdb database --sql-srvr MyNewSQLServer --sql-user SQLUser --sql-pwd 123456 restore --sql-db MyDatabase_copy --bak-path "d:\data\MyBackUpfile.bak" --create-db --shrink-db --db-owner SQLdbo --db-path "d:\MSSQL\data" --db-logpath "e:\MSSQL\logs" --db-recovery SIMPLE --delsrc
+cpdb database --srvr MyNewSQLServer --user SQLUser --pwd 123456 restore --db MyDatabase_copy --bak-path "d:\data\MyBackUpfile.bak" --create-db --shrink-db --db-owner SQLdbo --db-path "d:\MSSQL\data" --db-logpath "e:\MSSQL\logs" --db-recovery SIMPLE --delsrc
```
## compress - Выполнить компрессию страниц таблиц и индекстов в базе MS SQL
@@ -134,14 +140,14 @@ cpdb database --sql-srvr MyNewSQLServer --sql-user SQLUser --sql-pwd 123456 rest
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--sql-db** | - Имя базы для восстановления |
+| **--db** | - Имя базы для восстановления |
| **--shrink-db** | - Сжать базу после выполнения компрессии |
| **--shrink-log** | - Сжать файлы журнала транзакций после восстановления |
#### Пример:
```bat
-cpdb database --sql-srvr MyNewSQLServer --sql-user SQLUser --sql-pwd 123456 compress --sql-db MyDatabase_copy --shrink-db
+cpdb database --srvr MyNewSQLServer --user SQLUser --pwd 123456 compress --db MyDatabase_copy --shrink-db
```
## drop - Удаление базы MS SQL
@@ -149,12 +155,12 @@ cpdb database --sql-srvr MyNewSQLServer --sql-user SQLUser --sql-pwd 123456 comp
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--sql-db** | - Имя базы для восстановления |
+| **--db** | - Имя базы для восстановления |
#### Пример:
```bat
-cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 drop --sql-db MyDatabase
+cpdb database --srvr MySQLName --user sa --pwd 12345 drop --db MyDatabase
```
## script - Выполнить скрипты из файла(ов)
@@ -162,13 +168,13 @@ cpdb database --sql-srvr MySQLName --sql-user sa --sql-pwd 12345 drop --sql-db M
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--sql-files** | - Файлы SQL, содержащие текст скрипта, могут быть указаны несколько файлов, разделённые ";" |
-| **--sql-vars** | - Строка значений переменных (без пробелов) для скриптов SQL в виде "<Имя>=<Значение>", разделенные ";" |
+| **--files** | - Файлы SQL, содержащие текст скрипта, могут быть указаны несколько файлов, разделённые ";" |
+| **--vars** | - Строка значений переменных (без пробелов) для скриптов SQL в виде "<Имя>=<Значение>", разделенные ";" |
#### Пример:
```bat
-cpdb database --sql-srvr MyNewSQLServer --sql-user SQLUser --sql-pwd 123456 script --params "./JSON/cpdb_env.json" --sql-files "./tools/config_error.sql;./tools/print_message.sql" --sql-vars "varBase=MyDB;message=\"Hello world\""
+cpdb database --srvr MyNewSQLServer --user SQLUser --pwd 123456 script --params "./JSON/cpdb_env.json" --files "./tools/config_error.sql;./tools/print_message.sql" --vars "varBase=MyDB;message=\"Hello world\""
```
#### Пример config_error.sql:
@@ -388,14 +394,49 @@ cpdb file merge --file "d:\MSSQL\Backup\MyDatabase_copy.7z.001" --delsrc
cpdb file merge --list "d:\MSSQL\Backup\MyDatabase_copy.split" --delsrc
```
-## putyadisk - Помещение файла на Yandex-Диск
+## mapdrive - Подключить сетевой диск
+
+| Параметры: ||
+|-|-|
+| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
+| **--drive** | - Имя устройства (буква диска) |
+| **--res** | - Путь к подключаемому ресурсу |
+| **--user** | - Пользователь для подключения |
+| **--pwd** | - Пароль для подключения |
+
+#### Пример:
+
+```bat
+cpdb file mapdrive --drive N --res "\\MyServer\MyFolder" --user superuser --pwd P@$$w0rd
+```
+
+## umapdrive - Отключить сетевой диск
+
+| Параметры: ||
+|-|-|
+| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
+| **--drive** | - Имя устройства (буква диска) |
+
+#### Пример:
+
+```bat
+cpdb file umapdrive --drive N
+```
+
+## yadisk - Группа команд работы с сервисом Yandex-Диск
+
+| Общие параметры для команд группы: ||
+|-|-|
+| **--token** | - Token авторизации |
+---
+
+## put - Помещение файла на Yandex-Диск
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--file** | - Путь к локальному файлу для помещения на Yandex-Диск |
| **--list** | - Путь к локальному файлу со списком файлов, которые будут помещены на Yandex-Диск (параметр --file игнорируется) |
-| **--token** | - Token авторизации |
| **--path** | - Путь к каталогу на Yandex-Диск, куда помещать загружаемые файлы |
| **--replace** | - Перезаписать файл на Yandex-диске при загрузке |
| **--delsrc** | - Удалить исходные файлы после отправки |
@@ -404,15 +445,15 @@ cpdb file merge --list "d:\MSSQL\Backup\MyDatabase_copy.split" --delsrc
```bat
// Помещает файл "MyDatabase_copy.bak" на Yandex-диск
-cpdb file putyadisk --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --path "/transfer" --delsrc
+cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX put --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --path "/transfer" --delsrc
```
```bat
// Помещает файлы, указанные в списке "MyDatabase_copy.split" на Yandex-диск
-cpdb file putyadisk --list "d:\MSSQL\Backup\MyDatabase_copy.split" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --path "/transfer" --delsrc
+cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX put --list "d:\MSSQL\Backup\MyDatabase_copy.split" --path "/transfer" --delsrc
```
-## getyadisk - Получение файла из Yandex-Диска
+## get - Получение файла из Yandex-Диска
### Параметры:
@@ -420,7 +461,6 @@ cpdb file putyadisk --list "d:\MSSQL\Backup\MyDatabase_copy.split" --token XXXXX
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--path** | - Путь к локальному каталогу для сохранения загруженных файлов |
-| **--token** | - Token авторизации |
| **--file** | - Путь к файлу на Yandex-Диск для загрузки |
| **--list** | - Путь к файлу на Yandex-Диск со списком файлов, которые будут загружены (параметр --file игнорируется) |
| **--delsrc** | - Удалить файлы из Yandex-Диск после получения |
@@ -429,15 +469,15 @@ cpdb file putyadisk --list "d:\MSSQL\Backup\MyDatabase_copy.split" --token XXXXX
```bat
// Получает файл "MyDatabase_copy.bak" из Yandex-диска
-cpdb file getyadisk --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --file "/transfer/MyDatabase_copy.bak" --delsrc
+cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX get --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --file "/transfer/MyDatabase_copy.bak" --delsrc
```
```bat
// Получает файлы, указанные в списке "MyDatabase_copy.split" из Yandex-диска
-cpdb file getyadisk --path "d:\MSSQL\Backup\" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --list "/transfer/MyDatabase_copy.split" -delsrc
+cpdb yadisk --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX get --path "d:\MSSQL\Backup\" --list "/transfer/MyDatabase_copy.split" -delsrc
```
-##### Для получения токена авторизации Яндекс-диска:
+### Для получения токена авторизации Яндекс-диска:
* Зарегистрировать приложение: https://oauth.yandex.ru/client/new
* Название приложения, например "OScript.YaDisk"
@@ -452,14 +492,20 @@ cpdb file getyadisk --path "d:\MSSQL\Backup\" --token XXXXXXXXXXXXXXXXXXXXXXXXXX
* Получить токен для приложения: перейти по ссылке https://oauth.yandex.ru/authorize?response_type=token&client_id=<ВАШ ID (ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)>
* На вопрос "Приложение OScript.YaDisk запрашивает доступ к вашим данным на Яндексе" ответить "Разрешить": после этого на экране появится сформированный токен
-## putnc - Помещение файла в сервис NextCloud
+## nextcloud - Группа команд работы с сервисом NextCloud
-| Параметры: ||
+| Общие параметры для команд группы: ||
|-|-|
-| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--service** | - Адрес сервиса NextCloud |
+| **--srvr** | - Адрес сервиса NextCloud |
| **--user** | - Имя пользователя сервиса NextCloud |
| **--pwd** | - Пароль пользователя сервиса NextCloud |
+---
+
+## put - Помещение файла в сервис NextCloud
+
+| Параметры: ||
+|-|-|
+| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
| **--file** | - Путь к локальному файлу для помещения в сервис NextCloud |
| **--list** | - Путь к локальному файлу со списком файлов, которые будут помещены в сервис NextCloud (параметр --file игнорируется) |
| **--path** | - Путь к каталогу в сервисе NextCloud, куда помещать загружаемые файлы |
@@ -470,24 +516,21 @@ cpdb file getyadisk --path "d:\MSSQL\Backup\" --token XXXXXXXXXXXXXXXXXXXXXXXXXX
```bat
// Помещает файл "MyDatabase_copy.bak" в сервис NextCloud
-cpdb file putnc --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --path "/transfer" --delsrc
+cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" put --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --path "/transfer" --delsrc
```
```bat
// Помещает файлы, указанные в списке "MyDatabase_copy.split" в сервис NextCloud
-cpdb file putnc --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" --list "d:\MSSQL\Backup\MyDatabase_copy.split" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --path "/transfer" --delsrc
+cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" put --list "d:\MSSQL\Backup\MyDatabase_copy.split" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --path "/transfer" --delsrc
```
-## getnc - Получение файла из сервиса NextCloud
+## get - Получение файла из сервиса NextCloud
### Параметры:
| Параметры: ||
|-|-|
| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
-| **--service** | - Адрес сервиса NextCloud |
-| **--user** | - Имя пользователя сервиса NextCloud |
-| **--pwd** | - Пароль пользователя сервиса NextCloud |
| **--path** | - Путь к локальному каталогу для сохранения загруженных файлов |
| **--file** | - Путь к файлу в сервисе NextCloud для загрузки |
| **--list** | - Путь к файлу в сервисе NextCloud со списком файлов, которые будут загружены (параметр --file игнорируется) |
@@ -497,41 +540,70 @@ cpdb file putnc --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" -
```bat
// Получает файл "MyDatabase_copy.bak" из сервиса NextCloud
-cpdb file getnc --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --file "/transfer/MyDatabase_copy.bak" --delsrc
+cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --file "/transfer/MyDatabase_copy.bak" --delsrc
```
```bat
// Получает файлы, указанные в списке "MyDatabase_copy.split" из сервиса NextCloud
-cpdb file getnc --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" --path "d:\MSSQL\Backup\" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --list "/transfer/MyDatabase_copy.split" -delsrc
+cpdb nextcloud --service "http://MyNextCloud" --user "admin" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\" --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX --list "/transfer/MyDatabase_copy.split" -delsrc
```
-## mapdrive - Подключить сетевой диск
+## sftp - Группа команд работы с SFTP-сервером
+
+| Общие параметры для команд группы: ||
+|-|-|
+| **--srvr** | - Адрес сервера SFTP в виде `<адрес>:<порт>` |
+| **--port** | - Порт сервера SFTP |
+| **--user** | - Имя пользователя сервера SFTP |
+| **--pwd** | - Пароль пользователя сервера SFTP, если указан параметр **--key-file**, то используется как пароль для доступа к закрытому ключу |
+| **--key-file** | - Путь к файлу закрытого ключа, если указано, то параметр **--pwd** интерпретируется как пароль к закрытому ключу |
+---
+
+## put - Помещение файла на сервер SFTP
| Параметры: ||
|-|-|
-| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
-| **--drive** | - Имя устройства (буква диска) |
-| **--res** | - Путь к подключаемому ресурсу |
-| **--user** | - Пользователь для подключения |
-| **--pwd** | - Пароль для подключения |
+| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
+| **--file** | - Путь к локальному файлу для помещения на сервер SFTP |
+| **--list** | - Путь к локальному файлу со списком файлов, которые будут помещены на сервер SFTP (параметр --file игнорируется) |
+| **--path** | - Путь к каталогу на сервере SFTP, куда помещать загружаемые файлы |
+| **--replace** | - Перезаписать файл на сервере SFTP при загрузке |
+| **--delsrc** | - Удалить исходные файлы после отправки |
#### Пример:
```bat
-cpdb file mapdrive --drive N --res "\\MyServer\MyFolder" --user superuser --pwd P@$$w0rd
+// Помещает файл "MyDatabase_copy.bak" на сервере SFTP
+cpdb sftp --server "sftp.myServer.org" --port 22 --user "admin" --pwd "P@$$w0rd" put --file "d:\MSSQL\Backup\MyDatabase_copy.bak" --path "/transfer" --delsrc
```
-## umapdrive - Отключить сетевой диск
+```bat
+// Помещает файлы, указанные в списке "MyDatabase_copy.split" на сервере SFTP
+cpdb sftp --server "sftp.myServer.org" --port 22 --user "admin" --pwd "P@$$w0rd" put --list "d:\MSSQL\Backup\MyDatabase_copy.split" --path "/transfer" --delsrc
+```
+
+## get - Получение файла с сервера SFTP
+
+### Параметры:
| Параметры: ||
|-|-|
-| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет) |
-| **--drive** | - Имя устройства (буква диска) |
+| **--params** | - Файлы JSON содержащие значения параметров, могут быть указаны несколько файлов разделенные ";" (параметры командной строки имеют более высокий приоритет)|
+| **--path** | - Путь к локальному каталогу для сохранения загруженных файлов |
+| **--file** | - Путь к файлу на сервере SFTP для загрузки |
+| **--list** | - Путь к файлу на сервере SFTP со списком файлов, которые будут загружены (параметр --file игнорируется) |
+| **--delsrc** | - Удалить файлы с сервера SFTP после получения |
#### Пример:
```bat
-cpdb file umapdrive --drive N
+// Получает файл "MyDatabase_copy.bak" с сервера SFTP
+cpdb sftp --server "sftp.myServer.org" --port 22 --user "user" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\MyDatabase_copy.bak" --file "/transfer/MyDatabase_copy.bak" --delsrc
+```
+
+```bat
+// Получает файлы, указанные в списке "MyDatabase_copy.split" с сервера SFTP
+cpdb sftp --server "sftp.myServer.org" --port 22 --user "user" --pwd "P@$$w0rd" get --path "d:\MSSQL\Backup\" --list "/transfer/MyDatabase_copy.split" -delsrc
```
## batch - Выполнить сценарий
@@ -558,11 +630,11 @@ cpdb batch "./rest_TST_DB_MyDomain.json"
"description": "Восстановление из резервной копии",
"command": "database restore",
"params": {
- "sql-srvr": "MySQLServer",
- "sql-user": "_1CSrvUsr1",
- "sql-pwd": "p@ssw0rd",
+ "srvr": "MySQLServer",
+ "user": "_1CSrvUsr1",
+ "pwd": "p@ssw0rd",
"bak-path": "d:\\tmp\\PRD_DB_MyDomain.bak",
- "sql-db": "TST_DB_MyDomain",
+ "db": "TST_DB_MyDomain",
"db-owner": "_1CSrvUsr1",
"db-path": "D:\\sqldata",
"db-logpath": "D:\\sqldata",
@@ -583,10 +655,10 @@ cpdb batch "./rest_TST_DB_MyDomain.json"
"description": "Сжатие базы данных",
"command": "database compress",
"params": {
- "sql-srvr": "Sport1",
- "sql-user": "_1CSrvUsr1",
- "sql-pwd": "p@ssw0rd",
- "sql-db": "TST_DB_MyDomain",
+ "srvr": "Sport1",
+ "user": "_1CSrvUsr1",
+ "pwd": "p@ssw0rd",
+ "db": "TST_DB_MyDomain",
"shrink-db": true
}
}
diff --git a/lib.config b/lib.config
index 6b4f23f..c2af88c 100644
--- a/lib.config
+++ b/lib.config
@@ -1,33 +1,49 @@
+
+
+
+
-
+
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/packagedef b/packagedef
index eaedcc2..d3b9fd6 100644
--- a/packagedef
+++ b/packagedef
@@ -1,5 +1,5 @@
Описание.Имя("cpdb")
- .Версия("1.0.0")
+ .Версия("1.1.0")
.ВерсияСреды("1.7.0")
.ЗависитОт("logos")
.ЗависитОт("1commands")
@@ -10,6 +10,7 @@
.ЗависитОт("fs")
.ЗависитОт("yadisk")
.ЗависитОт("nextcloud-lib")
+ .ЗависитОт("ClientSSH", "0.5.0")
.РазработкаЗависитОт("1testrunner")
.РазработкаЗависитОт("asserts")
.ВключитьФайл("src")
diff --git a/scripts/cp2test.jenkinsfile b/scripts/cp2test.jenkinsfile
index 93748bd..c33f035 100644
--- a/scripts/cp2test.jenkinsfile
+++ b/scripts/cp2test.jenkinsfile
@@ -6,21 +6,21 @@ def configVer
pipeline {
agent none
-
+
environment {
- src_db_cred = credentials("${env.src_db_cred}")
- dst_db_cred = credentials("${env.dst_db_cred}")
- dst_ib_cred = credentials("${env.dst_ib_cred}")
- dst_ib_storage_cred = credentials("${env.dst_ib_storage_cred}")
+ src_db_cred = credentials("${env.src_db_cred}")
+ dst_db_cred = credentials("${env.dst_db_cred}")
+ dst_ib_cred = credentials("${env.dst_ib_cred}")
+ dst_ib_storage_cred = credentials("${env.dst_ib_storage_cred}")
}
stages {
stage('Резервное копирование базы') {
- agent { label "${env.src_agent_label}"}
+ agent { label "${env.src_agent_label}"}
steps {
- timestamps {
- cmd("cpdb database --sql-srvr ${env.src_server_name} --sql-user ${src_db_cred_Usr} --sql-pwd ${src_db_cred_Psw} backup --sql-db ${env.src_db_name} --bak-path \"${env.src_bak_path}\\${env.bak_file_name}\"")
- }
+ timestamps {
+ cmd("cpdb database --srvr ${env.src_server_name} --user ${src_db_cred_Usr} --pwd ${src_db_cred_Psw} backup --db ${env.src_db_name} --bak-path \"${env.src_bak_path}\\${env.bak_file_name}\"")
+ }
}
}
@@ -36,43 +36,43 @@ pipeline {
agent { label "${env.src_agent_label}"}
steps {
timestamps {
- cmd("cpdb file putyadisk --list \"${env.src_bak_path}\\${env.list_file_name}\" --ya-token ${env.storage_token} --ya-path \"${env.storage_path}\" --delsrc");
+ cmd("cpdb yadisk --token ${env.storage_token} put --list \"${env.src_bak_path}\\${env.list_file_name}\" --path \"${env.storage_path}\" --delsrc");
}
}
}
stage('Получение копии из хранилища') {
- agent { label "${env.dst_agent_label}"}
+ agent { label "${env.dst_agent_label}"}
steps {
timestamps {
- cmd("cpdb file getyadisk --path \"${env.dst_bak_path}\" --ya-token ${env.storage_token} --ya-list \"${env.storage_path}/${env.list_file_name}\" --delsrc");
+ cmd("cpdb yadisk --token ${env.storage_token} get --path \"${env.dst_bak_path}\" --list \"${env.storage_path}/${env.list_file_name}\" --delsrc");
}
}
}
stage('Сборка частей') {
- agent { label "${env.dst_agent_label}"}
+ agent { label "${env.dst_agent_label}"}
steps {
timestamps {
- cmd("cpdb file merge --list \"${env.dst_bak_path}\\${env.list_file_name}\" --delsrc");
+ cmd("cpdb file merge --list \"${env.dst_bak_path}\\${env.list_file_name}\" --delsrc");
}
}
}
stage('Восстановление базы из резервной копии') {
- agent { label "${env.dst_agent_label}"}
+ agent { label "${env.dst_agent_label}"}
steps {
timestamps {
- cmd("cpdb database --sql-srvr ${env.dst_server_name} --sql-user ${dst_db_cred_Usr} --sql-pwd ${dst_db_cred_Psw} restore --sql-db ${env.dst_db_name} --bak-path \"${env.dst_bak_path}\\${env.bak_file_name}\" --create-db --shrink-db --db-owner ${env.dst_dbo} --db-path \"${env.dst_db_path}\" --db-logpath \"${env.dst_log_path}\" --db-recovery SIMPLE --db-changelfn");
+ cmd("cpdb database --srvr ${env.dst_server_name} --user ${dst_db_cred_Usr} --pwd ${dst_db_cred_Psw} restore --db ${env.dst_db_name} --bak-path \"${env.dst_bak_path}\\${env.bak_file_name}\" --create-db --shrink-db --db-owner ${env.dst_dbo} --db-path \"${env.dst_db_path}\" --db-logpath \"${env.dst_log_path}\" --db-recovery SIMPLE --db-changelfn");
}
}
}
stage('Подключение базу к хранилищу конфигурации') {
- agent { label "${dst_ib_agent_label}"}
+ agent { label "${dst_ib_agent_label}"}
steps {
timestamps {
- cmd("cpdb infobase uconstorage --ib-path ${dst_ib_con_string} --ib-user \"${dst_ib_cred_Usr}\" --ib-pwd \"${dst_ib_cred_Psw}\"");
- cmd("cpdb infobase constorage --ib-path ${dst_ib_con_string} --storage-path ${dst_ib_storage_adr} --ib-user \"${dst_ib_cred_Usr}\" --ib-pwd \"${dst_ib_cred_Psw}\" --storage-user \"${dst_ib_storage_cred_Usr}\" --storage-pwd \"${dst_ib_storage_cred_Psw}\"");
+ cmd("cpdb infobase uconstorage --ib-path ${dst_ib_con_string} --ib-user \"${dst_ib_cred_Usr}\" --ib-pwd \"${dst_ib_cred_Psw}\"");
+ cmd("cpdb infobase constorage --ib-path ${dst_ib_con_string} --storage-path ${dst_ib_storage_adr} --ib-user \"${dst_ib_cred_Usr}\" --ib-pwd \"${dst_ib_cred_Psw}\" --storage-user \"${dst_ib_storage_cred_Usr}\" --storage-pwd \"${dst_ib_storage_cred_Psw}\"");
}
}
}
diff --git a/src/cmd/cpdb.os b/src/cmd/cpdb.os
index 9da3750..ec3274b 100644
--- a/src/cmd/cpdb.os
+++ b/src/cmd/cpdb.os
@@ -24,16 +24,28 @@
Приложение.ДобавитьКоманду("database d",
"команды работы с СУБД",
- Новый КомандаРаботаССУБД());
+ Новый КомандыРаботыССУБД());
Приложение.ДобавитьКоманду("infobase i",
"команды работы с информационными базами 1С",
- Новый КомандаРаботаСИБ());
+ Новый КомандыРаботыСИБ());
Приложение.ДобавитьКоманду("file f",
"команды работы с файлами",
- Новый КомандаРаботаСФайлами());
-
+ Новый КомандыРаботыСФайлами());
+
+ Приложение.ДобавитьКоманду("yadisk y",
+ "команды обмена файлами с Yandex-диском",
+ Новый КомандыРаботыСЯндехДиск());
+
+ Приложение.ДобавитьКоманду("nextcloud n",
+ "команды обмена файлами с сервисом NextCloud",
+ Новый КомандыРаботыСNextCloud());
+
+ Приложение.ДобавитьКоманду("sftp s",
+ "команды обмена файлами с SFTP-сервером",
+ Новый КомандыРаботыСSFTP());
+
Приложение.Опция("v verbose", Ложь, "вывод отладочной информации в процессе выполнения")
.Флаговый()
.ВОкружении("CPDB_VERBOSE");
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\240\320\265\320\267\320\265\321\200\320\262\320\275\320\276\320\271\320\232\320\276\320\277\320\270\320\270.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\240\320\265\320\267\320\265\321\200\320\262\320\275\320\276\320\271\320\232\320\276\320\277\320\270\320\270.os"
index c7c2dd9..a3ee62a 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\240\320\265\320\267\320\265\321\200\320\262\320\275\320\276\320\271\320\232\320\276\320\277\320\270\320\270.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\320\276\321\201\321\201\321\202\320\260\320\275\320\276\320\262\320\270\321\202\321\214\320\230\320\267\320\240\320\265\320\267\320\265\321\200\320\262\320\275\320\276\320\271\320\232\320\276\320\277\320\270\320\270.os"
@@ -25,7 +25,7 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("d sql-db", "", "имя базы для резервного копирования")
+ Команда.Опция("d db sql-db", "", "имя базы для резервного копирования")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_DATABASE");
@@ -92,11 +92,11 @@
ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
ПараметрыПодключения = Новый Структура("Сервер, Пользователь, ПарольПользователя");
- ПараметрыПодключения.Сервер = ЧтениеОпций.ЗначениеОпции("sql-srvr", Истина);
- ПараметрыПодключения.Пользователь = ЧтениеОпций.ЗначениеОпции("sql-user", Истина);
- ПараметрыПодключения.ПарольПользователя = ЧтениеОпций.ЗначениеОпции("sql-pwd", Истина);
+ ПараметрыПодключения.Сервер = ЧтениеОпций.ЗначениеОпции("srvr", Истина);
+ ПараметрыПодключения.Пользователь = ЧтениеОпций.ЗначениеОпции("user", Истина);
+ ПараметрыПодключения.ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd", Истина);
- База = ЧтениеОпций.ЗначениеОпции("sql-db");
+ База = ЧтениеОпций.ЗначениеОпции("db");
ПутьКРезервнойКопии = ЧтениеОпций.ЗначениеОпции("bak-path");
СоздаватьБазу = ЧтениеОпций.ЗначениеОпции("create-db");
ВладелецБазы = ЧтениеОпций.ЗначениеОпции("db-owner");
@@ -122,7 +122,7 @@
СоздаватьБазу);
Если УдалитьИсточник Тогда
- РаботаССУБД.УдалитьИсточник(ПутьКРезервнойКопии);
+ УдалитьФайлы(ПутьКРезервнойКопии);
КонецЕсли;
Если ЗначениеЗаполнено(ВладелецБазы) Тогда
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\232\320\276\320\274\320\277\321\200\320\265\321\201\321\201\320\270\321\216\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\232\320\276\320\274\320\277\321\200\320\265\321\201\321\201\320\270\321\216\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os"
index cf4d8fd..9b15661 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\232\320\276\320\274\320\277\321\200\320\265\321\201\321\201\320\270\321\216\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\232\320\276\320\274\320\277\321\200\320\265\321\201\321\201\320\270\321\216\320\241\321\202\321\200\320\260\320\275\320\270\321\206.os"
@@ -25,7 +25,7 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("d sql-db", "", "имя базы для резервного копирования")
+ Команда.Опция("d db sql-db", "", "имя базы для резервного копирования")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_DATABASE");
@@ -53,10 +53,10 @@
ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
- Сервер = ЧтениеОпций.ЗначениеОпции("sql-srvr", Истина);
- Пользователь = ЧтениеОпций.ЗначениеОпции("sql-user", Истина);
- ПарольПользователя = ЧтениеОпций.ЗначениеОпции("sql-pwd", Истина);
- База = ЧтениеОпций.ЗначениеОпции("sql-db");
+ Сервер = ЧтениеОпций.ЗначениеОпции("srvr", Истина);
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user", Истина);
+ ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd", Истина);
+ База = ЧтениеОпций.ЗначениеОпции("db");
СжатьБазу = ЧтениеОпций.ЗначениеОпции("shrink-db");
СжатьФайлЛог = ЧтениеОпций.ЗначениеОпции("shrink-log");
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\237\320\260\320\272\320\265\321\202.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\237\320\260\320\272\320\265\321\202.os"
index 476a8e3..46e5c0a 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\237\320\260\320\272\320\265\321\202.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\237\320\260\320\272\320\265\321\202.os"
@@ -158,7 +158,7 @@
КонецПроцедуры // ПрочитатьСценарииИзФайла()
// Выполняет переданный сценарий
-//
+//
// Параметры:
// ОписаниеСценария - Структура - Последовательность команд с параметрами для выполнения
// *ИмяФайла - Строка - имя файла сценария
@@ -202,7 +202,7 @@
КонецПроцедуры // ВыполнитьСценарий()
// Выполняет шаг сценария
-//
+//
// Параметры:
// Шаг - Соответствие - описание шага сценария
// ОбщиеПараметры - Соответствие - значения общих параметров сценария
@@ -282,7 +282,7 @@
// Процедура - дополняет пассив параметров запуска команды шага
// переданными значениями параметров шага
-//
+//
// Параметры:
// ПараметрыЗапуска - Массив - (возвр.) массив параметров команды
// Команда - КомандаПриложения - команда, параметры которой добавляются
@@ -313,7 +313,7 @@
КонецПроцедуры // ДополнитьПараметрыКомандыДляЗапуска()
// Процедура - копирует содержимое соответствия
-//
+//
// Параметры:
// Приемник - Соответствие - (возвр.) приемник копирования значений
// Источник - Соответствие - источник копирования значений
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\241\320\272\321\200\320\270\320\277\321\202\321\213.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\241\320\272\321\200\320\270\320\277\321\202\321\213.os"
index ad98e2a..7d0e35b 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\241\320\272\321\200\320\270\320\277\321\202\321\213.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\241\320\272\321\200\320\270\320\277\321\202\321\213.os"
@@ -25,13 +25,13 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("f sql-files", "", "файлы, содержащие текст скрипта,
+ Команда.Опция("f files sql-files", "", "файлы, содержащие текст скрипта,
|могут быть указаны несколько файлов, разделённые "";""")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_SCRIPT_FILES");
- Команда.Опция("v sql-vars", "", "переменные для скриптов SQL,
+ Команда.Опция("v vars sql-vars", "", "переменные для скриптов SQL,
|имя переменной и значение разделены ""="", переменные разделены "";""")
.ТСтрока()
.ВОкружении("CPDB_SQL_SCRIPT_VARIABLES");
@@ -51,11 +51,11 @@
ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
- Сервер = ЧтениеОпций.ЗначениеОпции("sql-srvr", Истина);
- Пользователь = ЧтениеОпций.ЗначениеОпции("sql-user", Истина);
- ПарольПользователя = ЧтениеОпций.ЗначениеОпции("sql-pwd", Истина);
- СкриптыВыполнения = ЧтениеОпций.ЗначениеОпции("sql-files");
- СтрокаПеременных = ЧтениеОпций.ЗначениеОпции("sql-vars");
+ Сервер = ЧтениеОпций.ЗначениеОпции("srvr", Истина);
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user", Истина);
+ ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd", Истина);
+ СкриптыВыполнения = ЧтениеОпций.ЗначениеОпции("files");
+ СтрокаПеременных = ЧтениеОпций.ЗначениеОпции("vars");
ПодключениеКСУБД = Новый ПодключениеКСУБД(Сервер, Пользователь, ПарольПользователя);
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267NextCloud.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267NextCloud.os"
index 2c932a6..3cc4b08 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267NextCloud.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267NextCloud.os"
@@ -25,21 +25,6 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("s service", "", "адрес сервиса NextCloud")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_NC_SERVICE");
-
- Команда.Опция("u user", "", "имя пользователя сервиса NextCloud")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_NC_USER");
-
- Команда.Опция("n pwd", "", "пароль пользователя сервиса NextCloud")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_NC_PWD");
-
Команда.Опция("p path", "", "Путь к локальному каталогу для сохранения загруженных файлов")
.ТСтрока()
.Обязательный()
@@ -75,7 +60,7 @@
ЭтоСписокФайлов = Истина;
- АдресСервиса = ЧтениеОпций.ЗначениеОпции("service");
+ АдресСервиса = ЧтениеОпций.ЗначениеОпции("srvr");
ИмяПользователя = ЧтениеОпций.ЗначениеОпции("user");
ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd");
ЦелевойПуть = ЧтениеОпций.ЗначениеОпции("path");
@@ -92,9 +77,9 @@
ВызватьИсключение "Не задан путь к файлу для получения из NextCloud";
КонецЕсли;
- Сервис = Новый ПодключениеNextCloud(АдресСервиса, ИмяПользователя, ПарольПользователя);
+ Клиент = Новый РаботаСNextCloud(АдресСервиса, ИмяПользователя, ПарольПользователя);
- ПутьКСкачанномуФайлу = РаботаСФайлами.ПолучитьФайлИзNextCloud(Сервис, ПутьНаДиске, ЦелевойПуть, УдалитьИсточник);
+ ПутьКСкачанномуФайлу = Клиент.ПолучитьФайл(ПутьНаДиске, ЦелевойПуть, УдалитьИсточник);
ФайлИнфо = Новый Файл(ПутьКСкачанномуФайлу);
@@ -103,10 +88,9 @@
Если ЭтоСписокФайлов Тогда
МассивПолучаемыхФайлов = РаботаСФайлами.ПрочитатьСписокФайлов(ПутьКСкачанномуФайлу);
Для Каждого ПолучаемыйФайл Из МассивПолучаемыхФайлов Цикл
- РаботаСФайлами.ПолучитьФайлИзNextCloud(Сервис,
- ОбъединитьПути(КаталогНаДиске, ПолучаемыйФайл),
- ОбъединитьПути(ЦелевойПуть, ПолучаемыйФайл),
- УдалитьИсточник);
+ Клиент.ПолучитьФайл(ОбъединитьПути(КаталогНаДиске, ПолучаемыйФайл),
+ ОбъединитьПути(ЦелевойПуть, ПолучаемыйФайл),
+ УдалитьИсточник);
КонецЦикла;
КонецЕсли;
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267\320\257\320\224\320\270\321\201\320\272\320\260.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267\320\257\320\224\320\270\321\201\320\272\320\260.os"
index 17e18ed..6a6c80a 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267\320\257\320\224\320\270\321\201\320\272\320\260.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\230\320\267\320\257\320\224\320\270\321\201\320\272\320\260.os"
@@ -39,11 +39,6 @@
.ТСтрока()
.ВОкружении("CPDB_YD_GET_LIST");
- Команда.Опция("t yt token ya-token", "", "Token авторизации")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_YD_TOKEN");
-
Команда.Опция("ds delsrc", "", "удалить исходные файлы после получения")
.Флаговый()
.ВОкружении("CPDB_YD_GET_DEL_SRC");
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\241SFTP.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\241SFTP.os"
new file mode 100644
index 0000000..e9223b7
--- /dev/null
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\273\321\203\321\207\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\241SFTP.os"
@@ -0,0 +1,114 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+#Использовать "../../core"
+
+Перем Лог; // - Объект - объект записи лога приложения
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Процедура - устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ОписаниеКоманды(Команда) Экспорт
+
+ Команда.Опция("pp params", "", "Файлы JSON содержащие значения параметров,
+ | могут быть указаны несколько файлов разделенные "";""")
+ .ТСтрока()
+ .ВОкружении("CPDB_PARAMS");
+
+ Команда.Опция("p path", "", "Путь к локальному каталогу для сохранения загруженных файлов")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_SFTP_GET_PATH");
+
+ Команда.Опция("f file", "", "путь к файлу на NextCloud для загрузки")
+ .ТСтрока()
+ .ВОкружении("CPDB_SFTP_GET_FILE");
+
+ Команда.Опция("l list", "", "путь к файлу на NextCloud со списком файлов,
+ |которые будут загружены (параметр -file игнорируется)")
+ .ТСтрока()
+ .ВОкружении("CPDB_SFTP_GET_LIST");
+
+ Команда.Опция("ds delsrc", "", "удалить исходные файлы после получения")
+ .Флаговый()
+ .ВОкружении("CPDB_SFTP_GET_DEL_SRC");
+
+ КонецПроцедуры // ОписаниеКоманды()
+
+// Процедура - запускает выполнение команды устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ВыполнитьКоманду(Знач Команда) Экспорт
+
+ ЧтениеОпций = Новый ЧтениеОпцийКоманды(Команда);
+
+ ВыводОтладочнойИнформации = ЧтениеОпций.ЗначениеОпции("verbose");
+
+ ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
+
+ ЭтоСписокФайлов = Истина;
+
+ АдресСервера = ЧтениеОпций.ЗначениеОпции("server");
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user");
+ Пароль = ЧтениеОпций.ЗначениеОпции("pwd");
+ ПутьККлючу = ЧтениеОпций.ЗначениеОпции("key-file");
+ ЦелевойПуть = ЧтениеОпций.ЗначениеОпции("path");
+
+ ПутьНаДиске = ЧтениеОпций.ЗначениеОпции("list");
+ Если НЕ ЗначениеЗаполнено(ПутьНаДиске) Тогда
+ ПутьНаДиске = ЧтениеОпций.ЗначениеОпции("file");
+ ЭтоСписокФайлов = Ложь;
+ КонецЕсли;
+
+ УдалитьИсточник = ЧтениеОпций.ЗначениеОпции("delsrc");
+
+ Если ПустаяСтрока(ПутьНаДиске) Тогда
+ ВызватьИсключение "Не задан путь к файлу для получения из NextCloud";
+ КонецЕсли;
+
+ Клиент = Новый РаботаССерверомSSH(АдресСервера, Пользователь, Пароль, ПутьККлючу);
+
+ ПутьКСкачанномуФайлу = Клиент.ПолучитьФайл(ПутьНаДиске, ЦелевойПуть, УдалитьИсточник);
+
+ ФайлИнфо = Новый Файл(ПутьКСкачанномуФайлу);
+
+ КаталогНаДиске = СтрЗаменить(ПутьНаДиске, ФайлИнфо.Имя, "");
+
+ Если ЭтоСписокФайлов Тогда
+ МассивПолучаемыхФайлов = РаботаСФайлами.ПрочитатьСписокФайлов(ПутьКСкачанномуФайлу);
+ Для Каждого ПолучаемыйФайл Из МассивПолучаемыхФайлов Цикл
+ Клиент.ПолучитьФайл(ОбъединитьПути(КаталогНаДиске, ПолучаемыйФайл),
+ ОбъединитьПути(ЦелевойПуть, ПолучаемыйФайл),
+ УдалитьИсточник);
+ КонецЦикла;
+ КонецЕсли;
+
+КонецПроцедуры // ВыполнитьКоманду()
+
+#КонецОбласти // СлужебныйПрограммныйИнтерфейс
+
+#Область ОбработчикиСобытий
+
+// Процедура - обработчик события "ПриСозданииОбъекта"
+//
+// BSLLS:UnusedLocalMethod-off
+Процедура ПриСозданииОбъекта()
+
+ Лог = ПараметрыСистемы.Лог();
+
+КонецПроцедуры // ПриСозданииОбъекта()
+// BSLLS:UnusedLocalMethod-on
+
+#КонецОбласти // ОбработчикиСобытий
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222NextCloud.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222NextCloud.os"
index ce889fa..bb4827e 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222NextCloud.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222NextCloud.os"
@@ -25,21 +25,6 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("s service", "", "адрес сервиса NextCloud")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_NC_SERVICE");
-
- Команда.Опция("u user", "", "имя пользователя сервиса NextCloud")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_NC_USER");
-
- Команда.Опция("n pwd", "", "пароль пользователя сервиса NextCloud")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_NC_PWD");
-
Команда.Опция("f file", "", "путь к локальному файлу для помещения на NextCloud")
.ТСтрока()
.Обязательный()
@@ -56,7 +41,7 @@
.Обязательный()
.ВОкружении("CPDB_NC_PUT_PATH");
- Команда.Опция("r replace", "", "перезаписать файл на Яндекс-диске при загрузке")
+ Команда.Опция("r replace", "", "перезаписать файл на сервисе NextCloud при загрузке")
.Флаговый()
.ВОкружении("CPDB_NC_PUT_REPLACE");
@@ -86,7 +71,7 @@
ПутьКФайлу = ЧтениеОпций.ЗначениеОпции("file");
ЭтоСписокФайлов = Ложь;
КонецЕсли;
- АдресСервиса = ЧтениеОпций.ЗначениеОпции("service");
+ АдресСервиса = ЧтениеОпций.ЗначениеОпции("srvr");
ИмяПользователя = ЧтениеОпций.ЗначениеОпции("user");
ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd");
ЦелевойПуть = ЧтениеОпций.ЗначениеОпции("path");
@@ -100,12 +85,12 @@
МассивОтправляемыхФайлов = Новый Массив;
ФайлИнфо = Новый Файл(ПутьКФайлу);
- Сервис = Новый ПодключениеNextCloud(АдресСервиса, ИмяПользователя, ПарольПользователя);
+ Клиент = Новый РаботаСNextCloud(АдресСервиса, ИмяПользователя, ПарольПользователя);
- // Если целевой путь не указан - тогда используется корень Яндекс-диска
+ // Если целевой путь не указан - тогда используется корень указанного пользователя NextCloud
Если ЗначениеЗаполнено(ЦелевойПуть) Тогда
// Определяем наличие каталога
- РаботаСФайлами.СоздатьПапкуВNextCloud(Сервис, ЦелевойПуть);
+ Клиент.СоздатьКаталог(ЦелевойПуть);
Иначе
ЦелевойПуть = "";
КонецЕсли;
@@ -118,7 +103,7 @@
МассивОтправляемыхФайлов.Добавить(ФайлИнфо.ПолноеИмя);
Для Каждого ОтправляемыйФайл Из МассивОтправляемыхФайлов Цикл
- РаботаСФайлами.ОтправитьФайлВNextCloud(Сервис, ОтправляемыйФайл, ЦелевойПуть, Перезаписывать);
+ Клиент.ОтправитьФайл(ОтправляемыйФайл, ЦелевойПуть, Перезаписывать);
Если УдалитьИсточник Тогда
УдалитьФайлы(ОтправляемыйФайл);
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222\320\257\320\224\320\270\321\201\320\272.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222\320\257\320\224\320\270\321\201\320\272.os"
index f3775b2..e536935 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222\320\257\320\224\320\270\321\201\320\272.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\222\320\257\320\224\320\270\321\201\320\272.os"
@@ -35,11 +35,6 @@
.ТСтрока()
.ВОкружении("CPDB_YD_PUT_LIST");
- Команда.Опция("t yt token ya-token", "", "Token авторизации")
- .ТСтрока()
- .Обязательный()
- .ВОкружении("CPDB_YD_TOKEN");
-
Команда.Опция("p yp path ya-path", "", "путь к файлу на Yandex-Диск")
.ТСтрока()
.Обязательный()
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\235\320\260SFTP.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\235\320\260SFTP.os"
new file mode 100644
index 0000000..a731233
--- /dev/null
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\276\320\274\320\265\321\201\321\202\320\270\321\202\321\214\320\244\320\260\320\271\320\273\320\235\320\260SFTP.os"
@@ -0,0 +1,133 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+#Использовать "../../core"
+
+Перем Лог; // - Объект - объект записи лога приложения
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Процедура - устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ОписаниеКоманды(Команда) Экспорт
+
+ Команда.Опция("pp params", "", "Файлы JSON содержащие значения параметров,
+ | могут быть указаны несколько файлов разделенные "";""")
+ .ТСтрока()
+ .ВОкружении("CPDB_PARAMS");
+
+ Команда.Опция("f file", "", "путь к локальному файлу для помещения на NextCloud")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_SFTP_PUT_FILE");
+
+ Команда.Опция("l list", "", "путь к локальному файлу со списком файлов,
+ |которые будут помещены на NextCloud
+ |(параметр -file игнорируется)")
+ .ТСтрока()
+ .ВОкружении("CPDB_SFTP_PUT_LIST");
+
+ Команда.Опция("p path", "", "путь к файлу на NextCloud")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_SFTP_PUT_PATH");
+
+ Команда.Опция("r replace", "", "перезаписать файл на сервере SFTP при загрузке")
+ .Флаговый()
+ .ВОкружении("CPDB_NC_PUT_REPLACE");
+
+ Команда.Опция("ds delsrc", "", "удалить исходные файлы после отправки")
+ .Флаговый()
+ .ВОкружении("CPDB_SFTP_PUT_DEL_SRC");
+
+КонецПроцедуры // ОписаниеКоманды()
+
+// Процедура - запускает выполнение команды устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ВыполнитьКоманду(Знач Команда) Экспорт
+
+ ЧтениеОпций = Новый ЧтениеОпцийКоманды(Команда);
+
+ ВыводОтладочнойИнформации = ЧтениеОпций.ЗначениеОпции("verbose");
+
+ ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
+
+ ЭтоСписокФайлов = Истина;
+
+ ПутьКФайлу = ЧтениеОпций.ЗначениеОпции("list");
+ Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда
+ ПутьКФайлу = ЧтениеОпций.ЗначениеОпции("file");
+ ЭтоСписокФайлов = Ложь;
+ КонецЕсли;
+ АдресСервера = ЧтениеОпций.ЗначениеОпции("srvr");
+ ПортСервера = ЧтениеОпций.ЗначениеОпции("port");
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user");
+ Пароль = ЧтениеОпций.ЗначениеОпции("pwd");
+ ПутьККлючу = ЧтениеОпций.ЗначениеОпции("key-file");
+ ЦелевойПуть = ЧтениеОпций.ЗначениеОпции("path");
+ УдалитьИсточник = ЧтениеОпций.ЗначениеОпции("delsrc");
+ Перезаписывать = ЧтениеОпций.ЗначениеОпции("replace");
+
+ Если ПустаяСтрока(ПутьКФайлу) Тогда
+ ВызватьИсключение "Не указан путь к файлу для помещения на сервер SFTP";
+ КонецЕсли;
+
+ МассивОтправляемыхФайлов = Новый Массив;
+ ФайлИнфо = Новый Файл(ПутьКФайлу);
+
+ Клиент = Новый РаботаССерверомSSH(АдресСервера, Пользователь, Пароль, ПутьККлючу);
+
+ // Если целевой путь не указан - тогда используется корень SFTP сервера
+ Если ЗначениеЗаполнено(ЦелевойПуть) Тогда
+ // Определяем наличие каталога
+ Клиент.СоздатьКаталог(ЦелевойПуть);
+ Иначе
+ ЦелевойПуть = "";
+ КонецЕсли;
+
+ Если ЭтоСписокФайлов Тогда
+ МассивОтправляемыхФайлов = РаботаСФайлами.ПрочитатьСписокФайлов(ПутьКФайлу, Истина);
+ КонецЕсли;
+
+ // Добавляем файл (или файл-список файлов) списка для закачки на сервер SFTP
+ МассивОтправляемыхФайлов.Добавить(ФайлИнфо.ПолноеИмя);
+
+ Для Каждого ОтправляемыйФайл Из МассивОтправляемыхФайлов Цикл
+ Клиент.ОтправитьФайл(ОтправляемыйФайл, ЦелевойПуть, Перезаписывать);
+
+ Если УдалитьИсточник Тогда
+ УдалитьФайлы(ОтправляемыйФайл);
+ Лог.Информация("Исходный файл ""%1"" удален", ОтправляемыйФайл);
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры // ВыполнитьКоманду()
+
+#КонецОбласти // СлужебныйПрограммныйИнтерфейс
+
+#Область ОбработчикиСобытий
+
+// Процедура - обработчик события "ПриСозданииОбъекта"
+//
+// BSLLS:UnusedLocalMethod-off
+Процедура ПриСозданииОбъекта()
+
+ Лог = ПараметрыСистемы.Лог();
+
+КонецПроцедуры // ПриСозданииОбъекта()
+// BSLLS:UnusedLocalMethod-on
+
+#КонецОбласти // ОбработчикиСобытий
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os"
index 91ecaf3..36e71b1 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os"
@@ -23,7 +23,7 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("d sql-db", "", "имя создаваемой базы")
+ Команда.Опция("d db sql-db", "", "имя создаваемой базы")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_DATABASE");
@@ -52,10 +52,10 @@
ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
- Сервер = ЧтениеОпций.ЗначениеОпции("sql-srvr", Истина);
- Пользователь = ЧтениеОпций.ЗначениеОпции("sql-user", Истина);
- ПарольПользователя = ЧтениеОпций.ЗначениеОпции("sql-pwd", Истина);
- База = ЧтениеОпций.ЗначениеОпции("sql-db");
+ Сервер = ЧтениеОпций.ЗначениеОпции("srvr", Истина);
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user", Истина);
+ ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd", Истина);
+ База = ЧтениеОпций.ЗначениеОпции("db");
МодельВосстановления = ЧтениеОпций.ЗначениеОпции("db-recovery");
ПутьККаталогу = ЧтениеОпций.ЗначениеОпции("db-datapath");
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\240\320\265\320\267\320\265\321\200\320\262\320\275\321\203\321\216\320\232\320\276\320\277\320\270\321\216.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\240\320\265\320\267\320\265\321\200\320\262\320\275\321\203\321\216\320\232\320\276\320\277\320\270\321\216.os"
index 79dab9f..8efb888 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\240\320\265\320\267\320\265\321\200\320\262\320\275\321\203\321\216\320\232\320\276\320\277\320\270\321\216.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\241\320\276\320\267\320\264\320\260\321\202\321\214\320\240\320\265\320\267\320\265\321\200\320\262\320\275\321\203\321\216\320\232\320\276\320\277\320\270\321\216.os"
@@ -25,7 +25,7 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("d sql-db", "", "имя базы для резервного копирования")
+ Команда.Опция("d db sql-db", "", "имя базы для резервного копирования")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_DATABASE");
@@ -50,10 +50,10 @@
ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
- Сервер = ЧтениеОпций.ЗначениеОпции("sql-srvr", Истина);
- Пользователь = ЧтениеОпций.ЗначениеОпции("sql-user", Истина);
- ПарольПользователя = ЧтениеОпций.ЗначениеОпции("sql-pwd", Истина);
- База = ЧтениеОпций.ЗначениеОпции("sql-db");
+ Сервер = ЧтениеОпций.ЗначениеОпции("srvr", Истина);
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user", Истина);
+ ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd", Истина);
+ База = ЧтениеОпций.ЗначениеОпции("db");
ПутьКРезервнойКопии = ЧтениеОпций.ЗначениеОпции("bak-path");
ПодключениеКСУБД = Новый ПодключениеКСУБД(Сервер, Пользователь, ПарольПользователя);
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\264\320\260\320\273\320\270\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\264\320\260\320\273\320\270\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os"
index 8390e0b..c1813db 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\264\320\260\320\273\320\270\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\264\320\260\320\273\320\270\321\202\321\214\320\221\320\260\320\267\321\203\320\224\320\260\320\275\320\275\321\213\321\205.os"
@@ -23,7 +23,7 @@
.ТСтрока()
.ВОкружении("CPDB_PARAMS");
- Команда.Опция("d sql-db", "", "имя создаваемой базы")
+ Команда.Опция("d db sql-db", "", "имя создаваемой базы")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_DATABASE");
@@ -43,10 +43,10 @@
ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);
- Сервер = ЧтениеОпций.ЗначениеОпции("sql-srvr", Истина);
- Пользователь = ЧтениеОпций.ЗначениеОпции("sql-user", Истина);
- ПарольПользователя = ЧтениеОпций.ЗначениеОпции("sql-pwd", Истина);
- База = ЧтениеОпций.ЗначениеОпции("sql-db");
+ Сервер = ЧтениеОпций.ЗначениеОпции("srvr", Истина);
+ Пользователь = ЧтениеОпций.ЗначениеОпции("user", Истина);
+ ПарольПользователя = ЧтениеОпций.ЗначениеОпции("pwd", Истина);
+ База = ЧтениеОпций.ЗначениеОпции("db");
ПодключениеКСУБД = Новый ПодключениеКСУБД(Сервер, Пользователь, ПарольПользователя);
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241NextCloud.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241NextCloud.os"
new file mode 100644
index 0000000..7654022
--- /dev/null
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241NextCloud.os"
@@ -0,0 +1,39 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+// Процедура - устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ОписаниеКоманды(Команда) Экспорт
+
+ Команда.ДобавитьКоманду("put p",
+ "поместить файл в сервис NextCloud",
+ Новый КомандаПоместитьФайлВNextCloud());
+
+ Команда.ДобавитьКоманду("get g",
+ "скачать файл с сервиса NextCloud",
+ Новый КомандаПолучитьФайлИзNextCloud());
+
+ Команда.Опция("s srvr service", "", "адрес сервиса NextCloud")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_NC_SRVR");
+
+ Команда.Опция("u user", "", "Пользователь сервиса NextCloud")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_NC_USER");
+
+ Команда.Опция("p pwd", "", "Пароль пользователя сервиса NextCloud")
+ .ТСтрока()
+ .ВОкружении("CPDB_NC_PWD");
+
+КонецПроцедуры // ОписаниеКоманды()
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241SFTP.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241SFTP.os"
new file mode 100644
index 0000000..4935f81
--- /dev/null
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241SFTP.os"
@@ -0,0 +1,47 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+// Процедура - устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ОписаниеКоманды(Команда) Экспорт
+
+ Команда.ДобавитьКоманду("put p",
+ "поместить файл на сервер SFTP",
+ Новый КомандаПоместитьФайлНаSFTP());
+
+ Команда.ДобавитьКоманду("get g",
+ "скачать файл с сервера SFTP",
+ Новый КомандаПолучитьФайлСSFTP());
+
+ Команда.Опция("s srvr server", "", "адрес сервера SFTP в виде ""<адрес>:<порт>""")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_SFTP_SRVR");
+
+ Команда.Опция("u user", "", "Пользователь сервера SFTP")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_SFTP_USER");
+
+ Команда.Опция("p pwd", "", "Пароль пользователя сервера SFTP,
+ | если указан параметр ""--key-file"",
+ | то используется как пароль для доступа к закрытому ключу")
+ .ТСтрока()
+ .ВОкружении("CPDB_SFTP_PWD");
+
+ Команда.Опция("k key-file", "", "Путь к файлу закрытого ключа сервера SFTP,
+ | если указано, то параметр ""--pwd""
+ | интерпретируется как пароль к закрытому ключу")
+ .ТСтрока()
+ .ВОкружении("CPDB_SFTP_KEY_FILE");
+
+КонецПроцедуры // ОписаниеКоманды()
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\230\320\221.os"
similarity index 99%
rename from "src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os"
rename to "src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\230\320\221.os"
index 247832b..86a79db 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\230\320\221.os"
@@ -13,31 +13,31 @@
// Команда - КомандаПриложения - объект описание команды
//
Процедура ОписаниеКоманды(Команда) Экспорт
-
+
Команда.ДобавитьКоманду("create-srv-ib create createib cs",
"создать информационную базу 1С на сервере",
Новый КомандаСоздатьСервернуюИБ());
-
+
Команда.ДобавитьКоманду("create-file-ib cf",
"создать файловую информационную базу 1С",
Новый КомандаСоздатьФайловуюИБ());
-
+
Команда.ДобавитьКоманду("dump dumpib d",
"выгрузить информационную базу 1С в DT-файл",
Новый КомандаВыгрузитьИБВФайл());
-
+
Команда.ДобавитьКоманду("restore restoreib r",
"загрузить информационную базу 1С из DT-файла",
Новый КомандаЗагрузитьИБИзФайла());
-
+
Команда.ДобавитьКоманду("clearcache cc",
"очистить локальный кэш базы 1С",
Новый КомандаОчиститьЛокальныйКэшИБ());
-
+
Команда.ДобавитьКоманду("uconstorage us",
"отключить информационную базу 1С от хранилища",
Новый КомандаОтключитьОтХранилища());
-
+
Команда.ДобавитьКоманду("constorage cs",
"подключить информационную базу 1С к хранилищу",
Новый КомандаПодключитьКХранилищу());
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\241\320\243\320\221\320\224.os"
similarity index 89%
rename from "src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os"
rename to "src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\241\320\243\320\221\320\224.os"
index 423d1e3..aec5893 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\241\320\243\320\221\320\224.os"
@@ -13,7 +13,7 @@
// Команда - КомандаПриложения - объект описание команды
//
Процедура ОписаниеКоманды(Команда) Экспорт
-
+
Команда.ДобавитьКоманду("script scripts s",
"выполнить произвольные скрипты в СУБД",
Новый КомандаВыполнитьСкрипты());
@@ -38,17 +38,17 @@
"удалить базу данных",
Новый КомандаУдалитьБазуДанных());
- Команда.Опция("s sql-srvr", "", "адрес сервера СУБД")
+ Команда.Опция("s srvr sql-srvr", "", "адрес сервера СУБД")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_SRVR");
- Команда.Опция("u sql-user", "", "Пользователь сервера СУБД")
+ Команда.Опция("u user sql-user", "", "Пользователь сервера СУБД")
.ТСтрока()
.Обязательный()
.ВОкружении("CPDB_SQL_USER");
-
- Команда.Опция("p sql-pwd", "", "Пароль пользователя сервера СУБД")
+
+ Команда.Опция("p pwd sql-pwd", "", "Пароль пользователя сервера СУБД")
.ТСтрока()
.ВОкружении("CPDB_SQL_PWD");
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
similarity index 67%
rename from "src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
rename to "src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
index 190ca51..a784fc4 100644
--- "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
@@ -13,11 +13,11 @@
// Команда - КомандаПриложения - объект описание команды
//
Процедура ОписаниеКоманды(Команда) Экспорт
-
+
Команда.ДобавитьКоманду("copy c",
"копировать файл",
Новый КомандаКопироватьФайл());
-
+
Команда.ДобавитьКоманду("split s",
"разбить файл на части (используется 7-zip)",
Новый КомандаРазбитьФайлНаЧасти());
@@ -26,22 +26,6 @@
"собрать файл из частей (используется 7-zip)",
Новый КомандаСоединитьЧастиВФайл());
- Команда.ДобавитьКоманду("putyadisk py",
- "поместить файл на Yandex-диск",
- Новый КомандаПоместитьФайлВЯДиск());
-
- Команда.ДобавитьКоманду("getyadisk gy",
- "скачать файл с Yandex-диска",
- Новый КомандаПолучитьФайлИзЯДиска());
-
- Команда.ДобавитьКоманду("putnc pn",
- "поместить файл в сервис NextCloud",
- Новый КомандаПоместитьФайлВNextCloud());
-
- Команда.ДобавитьКоманду("getnc gn",
- "скачать файл с сервиса NextCloud",
- Новый КомандаПолучитьФайлИзNextCloud());
-
Команда.ДобавитьКоманду("mapdrive md",
"подключить сетевой диск",
Новый КомандаПодключитьСетевойДиск());
diff --git "a/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\257\320\275\320\264\320\265\321\205\320\224\320\270\321\201\320\272.os" "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\257\320\275\320\264\320\265\321\205\320\224\320\270\321\201\320\272.os"
new file mode 100644
index 0000000..2023fd6
--- /dev/null
+++ "b/src/cmd/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\321\213\320\240\320\260\320\261\320\276\321\202\321\213\320\241\320\257\320\275\320\264\320\265\321\205\320\224\320\270\321\201\320\272.os"
@@ -0,0 +1,30 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+// Процедура - устанавливает описание команды
+//
+// Параметры:
+// Команда - КомандаПриложения - объект описание команды
+//
+Процедура ОписаниеКоманды(Команда) Экспорт
+
+ Команда.ДобавитьКоманду("put p",
+ "поместить файл на Yandex-диск",
+ Новый КомандаПоместитьФайлВЯДиск());
+
+ Команда.ДобавитьКоманду("get g",
+ "скачать файл с Yandex-диска",
+ Новый КомандаПоместитьФайлВЯДиск());
+
+ Команда.Опция("t yt token ya-token", "", "Token авторизации для Yandex-диска")
+ .ТСтрока()
+ .Обязательный()
+ .ВОкружении("CPDB_YD_TOKEN");
+
+КонецПроцедуры // ОписаниеКоманды()
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\241\320\243\320\221\320\224.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\241\320\243\320\221\320\224.os"
index db538c0..bb1aa29 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\241\320\243\320\221\320\224.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\232\320\241\320\243\320\221\320\224.os"
@@ -1,4 +1,14 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
#Использовать 1commands
+#Использовать fs
Перем Лог; // - Объект - объект записи лога приложения
Перем Сервер; // - Строка - адрес сервера СУБД
@@ -119,7 +129,7 @@
МодельВосстановления = МоделиВосстановленияБД().Полная;
КонецЕсли;
- РаботаСФайлами.НормализоватьПуть(ПутьККаталогу);
+ ПутьККаталогу = ФС.ПолныйПуть(ПутьККаталогу);
Если ЗначениеЗаполнено(ПутьККаталогу) Тогда
ТекстЗапроса = СтрШаблон("""USE [master];
@@ -449,7 +459,7 @@
Возврат Ложь;
КонецЕсли;
- РаботаСФайлами.НормализоватьПуть(ПутьКРезервнойКопии);
+ ПутьКРезервнойКопии = ФС.ПолныйПуть(ПутьКРезервнойКопии);
ТекстЗапроса = СтрШаблон("""BACKUP DATABASE [%1] TO DISK = N'%2'
|WITH NOFORMAT, INIT, NAME = N'%1 FULL Backup',
@@ -497,16 +507,16 @@
КонецЕсли;
КонецЕсли;
- РаботаСФайлами.НормализоватьПуть(ПутьКРезервнойКопии);
+ ПутьКРезервнойКопии = ФС.ПолныйПуть(ПутьКРезервнойКопии);
Если ЗначениеЗаполнено(ПутьКФайлуДанных) Тогда
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлуДанных);
+ ПутьКФайлуДанных = ФС.ПолныйПуть(ПутьКФайлуДанных);
Иначе
ПутьКФайлуДанных = РасположениеФайловБазПоУмолчанию("D");
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКФайлуЖурнала) Тогда
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлуЖурнала);
+ ПутьКФайлуЖурнала = ФС.ПолныйПуть(ПутьКФайлуЖурнала);
Иначе
ПутьКФайлуЖурнала = РасположениеФайловБазПоУмолчанию("L");
КонецЕсли;
@@ -563,7 +573,7 @@
Возврат Неопределено;
КонецЕсли;
- РаботаСФайлами.НормализоватьПуть(ПутьКРезервнойКопии);
+ ПутьКРезервнойКопии = ФС.ПолныйПуть(ПутьКРезервнойКопии);
ТекстЗапроса = СтрШаблон("""SET NOCOUNT ON;
|
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241NextCloud.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241NextCloud.os"
new file mode 100644
index 0000000..00d7870
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241NextCloud.os"
@@ -0,0 +1,231 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+#Использовать nextcloud-lib
+
+Перем Адрес; // - Строка - адрес сервера NextCloud
+Перем Пользователь; // - Строка - имя пользователя сервера NextCloud
+Перем Соединение; // - ПодключениеNextCloud - соединение с сервером NextCloud
+
+Перем Лог; // - Объект - объект записи лога приложения
+
+#Область ПрограммныйИнтерфейс
+
+// Функция - возвращает адрес сервера NextCloud
+//
+// Возвращаемое значение:
+// Строка - адрес сервера NextCloud
+//
+Функция Адрес() Экспорт
+
+ Возврат Адрес;
+
+КонецФункции // Адрес()
+
+// Функция - возвращает имя пользователя сервера NextCloud
+//
+// Возвращаемое значение:
+// Строка - имя пользователя сервера NextCloud
+//
+Функция Пользователь() Экспорт
+
+ Возврат Пользователь;
+
+КонецФункции // Пользователь()
+
+// Функция - возвращает соединение с сервером NextCloud
+//
+// Возвращаемое значение:
+// ПодключениеNextCloud - соединение с сервером NextCloud
+//
+Функция Соединение() Экспорт
+
+ Возврат Соединение;
+
+КонецФункции // Соединение()
+
+// Создает соединение с сервером NextCloud с указанными параметрами
+//
+// Параметры:
+// _Адрес - Строка - адрес сервера NextCloud
+// _Пользователь - Строка - имя пользователя сервера NextCloud
+// Пароль - Строка - пароль пользователя сервера NextCloud
+//
+Процедура УстановитьПараметрыСоединения(Знач _Адрес, Знач _Пользователь, Знач Пароль = "") Экспорт
+
+ Адрес = _Адрес;
+ Пользователь = _Пользователь;
+
+ Соединение = Новый ПодключениеNextCloud(Адрес, Пользователь, Пароль);
+
+КонецПроцедуры // УстановитьПараметрыСоединения()
+
+// Создает каталог в сервисе NextCloud
+//
+// Параметры:
+// ЦелевойПуть - Строка - путь к создаваемому каталогу
+//
+Процедура СоздатьКаталог(Знач ЦелевойПуть) Экспорт
+
+ Попытка
+ Соединение.Файлы().СоздатьКаталог(ЦелевойПуть);
+ Лог.Информация("Создан каталог ""%1"" на сервисе NextCloud", ЦелевойПуть);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка при создании каталога ""%1"" на сервисе NextCloud: %2%3",
+ ЦелевойПуть,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+КонецПроцедуры // СоздатьКаталог()
+
+// Процедура - отправляет файл в сервис NextCloud
+//
+// Параметры:
+// ПутьКФайлу - Строка - путь к отправляемому файлу
+// ЦелевойПуть - Строка - путь к каталогу в сервисе NextCloud, куда будет загружен файл
+// Перезаписывать - Булево - перезаписать файл в сервисе NextCloud при загрузке
+//
+Процедура ОтправитьФайл(Знач ПутьКФайлу, Знач ЦелевойПуть, Перезаписывать = Ложь) Экспорт
+
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
+
+ Лог.Информация("Начало отправки файла в сервис NextCloud ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
+
+ ИсходныйФайл = Новый Файл(ПутьКФайлу);
+
+ Попытка
+ Соединение.Файлы().Отправить(ИсходныйФайл.ПолноеИмя, ЦелевойПуть, ИсходныйФайл.Имя, Перезаписывать);
+ Лог.Информация("Файл загружен в сервис NextCloud ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка загрузки файла ""%1"" в ""%2/%1"":%3%4",
+ ИсходныйФайл.Имя,
+ ЦелевойПуть,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+КонецПроцедуры // ОтправитьФайл()
+
+// Функция - получает файл из сервиса NextCloud
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на сервисе NextCloud
+// ЦелевойКаталог - Строка - путь к каталогу, куда будет загружен файл
+// УдалитьИсточник - Булево - Истина - удалить файл после загрузки
+//
+// Возвращаемое значение:
+// Строка - путь к полученному файлу
+//
+Функция ПолучитьФайл(Знач ПутьНаДиске, Знач ЦелевойКаталог, УдалитьИсточник = Ложь) Экспорт
+
+ ЧастиПути = РаботаСФайлами.ЧастиПути(ПутьНаДиске);
+
+ ЦелевойПуть = ОбъединитьПути(ЦелевойКаталог, ЧастиПути.Имя);
+
+ ЦелевойПуть = ФС.ПолныйПуть(ЦелевойПуть);
+
+ Лог.Информация("Начало получения файла из сервиса NextCloud ""%1"" -> ""%2""", ПутьНаДиске, ЦелевойПуть);
+
+ Попытка
+ Соединение.Файлы().Получить(ПутьНаДиске, ЦелевойПуть, Истина);
+
+ Лог.Информация("Файл ""%1"" получен из сервиса NextCloud", ЦелевойПуть);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"" из сервиса NextCloud: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ Если УдалитьИсточник Тогда
+ Удалить(ПутьНаДиске);
+ КонецЕсли;
+
+ Возврат ЦелевойПуть;
+
+КонецФункции // ПолучитьФайл()
+
+// Функция - проверяет существование файла / каталога в сервиса NextCloud
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на сервисе NextCloud
+//
+// Возвращаемое значение:
+// Булево - Истина - Файл / каталг существует
+//
+Функция Существует(Знач ПутьНаДиске) Экспорт
+
+ Результат = Ложь;
+
+ Попытка
+ Результат = Соединение.Файлы().Существует(ПутьНаДиске);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка проверки существования файла ""%1"" в сервисе NextCloud: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ Возврат Результат;
+
+КонецФункции // Существует()
+
+// Процедура - удаляет файл из сервиса NextCloud
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на сервисе NextCloud
+//
+Процедура Удалить(Знач ПутьНаДиске) Экспорт
+
+ Попытка
+ Соединение.Файлы().Удалить(ПутьНаДиске);
+
+ Лог.Информация("Удален файл ""%1"" из сервиса NextCloud", ПутьНаДиске);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка удаления файла ""%1"" из сервиса NextCloud: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+КонецПроцедуры // Удалить()
+
+#КонецОбласти // ПрограммныйИнтерфейс
+
+#Область ОбработчикиСобытий
+
+// Процедура - обработчик события "ПриСозданииОбъекта"
+//
+// Параметры:
+// _Адрес - Строка - адрес сервера NextCloud
+// _Пользователь - Строка - имя пользователя сервера NextCloud
+// Пароль - Строка - пароль пользователя сервера NextCloud
+//
+// BSLLS:UnusedLocalMethod-off
+Процедура ПриСозданииОбъекта(Знач _Адрес, Знач _Пользователь, Знач Пароль = "") Экспорт
+
+ Лог = ПараметрыСистемы.Лог();
+
+ УстановитьПараметрыСоединения(_Адрес, _Пользователь, Пароль);
+
+КонецПроцедуры // ПриСозданииОбъекта()
+// BSLLS:UnusedLocalMethod-on
+
+#КонецОбласти // ОбработчикиСобытий
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os"
index 41ac70b..15cffd2 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\243\320\221\320\224.os"
@@ -39,7 +39,7 @@
КонецФункции // БазаСуществует()
// Создает базу данных
-//
+//
// Параметры:
// База - Строка - имя базы
// МодельВосстановления - Строка - новая модель восстановления (FULL, SIMPLE, BULK_LOGGED)
@@ -84,7 +84,7 @@
КонецПроцедуры // СоздатьБазуДанных()
// Удаляет базу данных
-//
+//
// Параметры:
// База - Строка - имя базы
//
@@ -126,7 +126,7 @@
КонецПроцедуры // УдалитьБазуДанных()
// Выполняет резервное копирование базы
-//
+//
// Параметры:
// База - Строка - имя базы
// ПутьКРезервнойКопии - Строка - путь к файлу резервной копии
@@ -173,7 +173,7 @@
КонецПроцедуры // ВыполнитьРезервноеКопирование()
// Выполняет восстановление базы из резервной копии
-//
+//
// Параметры:
// База - Строка - имя базы
// ПутьКРезервнойКопии - Строка - путь к файлу резервной копии
@@ -228,28 +228,8 @@
КонецПроцедуры // ВыполнитьВосстановление()
-// Удаляет файл-источник резервной копии
-//
-// Параметры:
-// ПутьКРезервнойКопии - Строка - путь к файлу резервной копии
-//
-Процедура УдалитьИсточник(ПутьКРезервнойКопии) Экспорт
-
- Попытка
- УдалитьФайлы(ПутьКРезервнойКопии);
- Лог.Информация("Исходный файл %1 удален", ПутьКРезервнойКопии);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка удаления файла %1: %2",
- ПутьКРезервнойКопии,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
-КонецПроцедуры // УдалитьИсточник()
-
// Получает текущего владельца базы
-//
+//
// Параметры:
// База - Строка - имя базы данных
//
@@ -274,7 +254,7 @@
КонецФункции // ПолучитьВладельца()
// Устанавливает нового владельца базы
-//
+//
// Параметры:
// База - Строка - имя базы
// ВладелецБазы - Строка - новый владелец базы
@@ -332,7 +312,7 @@
КонецФункции // ПолучитьМодельВосстановления()
// Устанавливает модель восстановления базы (FULL, SIMPLE, BULK_LOGGED)
-//
+//
// Параметры:
// База - Строка - имя базы
// МодельВосстановления - Строка - новая модель восстановления (FULL, SIMPLE, BULK_LOGGED)
@@ -365,7 +345,7 @@
КонецПроцедуры // ИзменитьМодельВосстановления()
// Получает логическое имя файла в базе
-//
+//
// Параметры:
// База - Строка - имя базы данных
// ТипФайла - Строка - ROWS - файл базы; LOG - файл журнала транзакций
@@ -510,7 +490,7 @@
КонецПроцедуры // УстановитьЛогическиеИменаФайлов()
// Включает компрессию данных базы на уровне страниц
-//
+//
// Параметры:
// База - Строка - имя базы
//
@@ -538,7 +518,7 @@
КонецПроцедуры // ВключитьКомпрессию()
// Выполняет сжатие базы (shrink)
-//
+//
// Параметры:
// База - Строка - имя базы
//
@@ -567,7 +547,7 @@
КонецПроцедуры // СжатьБазу()
// Выполняет сжатие файла лога (shrink)
-//
+//
// Параметры:
// База - Строка - имя базы
//
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\265\321\200\320\262\320\265\321\200\320\276\320\274SSH.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\265\321\200\320\262\320\265\321\200\320\276\320\274SSH.os"
new file mode 100644
index 0000000..dd4932a
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\241\320\265\321\200\320\262\320\265\321\200\320\276\320\274SSH.os"
@@ -0,0 +1,321 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+#Использовать ClientSSH
+
+Перем Адрес; // - Строка - адрес сервера SSH
+Перем Пользователь; // - Строка - имя пользователя сервера SSH
+Перем Соединение; // - КлиентSSH - соединение с SSH-сервером
+
+Перем Лог; // - Объект - объект записи лога приложения
+
+#Область ПрограммныйИнтерфейс
+
+// Функция - возвращает адрес сервера SSH
+//
+// Возвращаемое значение:
+// Строка - адрес сервера SSH
+//
+Функция Адрес() Экспорт
+
+ Возврат Адрес;
+
+КонецФункции // Адрес()
+
+// Функция - возвращает имя пользователя сервера SSH
+//
+// Возвращаемое значение:
+// Строка - имя пользователя сервера SSH
+//
+Функция Пользователь() Экспорт
+
+ Возврат Пользователь;
+
+КонецФункции // Пользователь()
+
+// Функция - возвращает соединение с сервером SSH
+//
+// Возвращаемое значение:
+// КлиентSSH - соединение с сервером SSH
+//
+Функция Соединение() Экспорт
+
+ Возврат Соединение;
+
+КонецФункции // Соединение()
+
+// Создает соединение с сервером SSH с указанными параметрами
+//
+// Параметры:
+// _Адрес - Строка - адрес сервера SSH
+// _Пользователь - Строка - имя пользователя сервера SSH
+// Пароль - Строка - пароль пользователя сервера SSH
+// или пароль к файлу закрытого ключа (если указан параметр ПутьККлючу)
+// ПутьККлючу - Строка - путь к файлу закрытого ключа сервера SSH
+//
+Процедура УстановитьПараметрыСоединения(Знач _Адрес, Знач _Пользователь, Знач Пароль = "", Знач ПутьККлючу = "") Экспорт
+
+ ЧастиАдреса = СтрРазделить(_Адрес, ":", Ложь);
+
+ Адрес = ЧастиАдреса[0];
+ Порт = 22;
+ Если ЧастиАдреса.ВГраница() > 0 Тогда
+ Порт = Число(ЧастиАдреса[1]);
+ КонецЕсли;
+
+ Пользователь = _Пользователь;
+
+ Соединение = Новый КлиентSSH(Адрес, Порт, Пользователь, Пароль);
+ Если ЗначениеЗаполнено(ПутьККлючу) Тогда
+ Соединение = Новый КлиентSSH(Адрес, Порт, Пользователь, "");
+ Соединение.УстановитьКлюч(ПутьККлючу, Пароль);
+ Иначе
+ Соединение = Новый КлиентSSH(Адрес, Порт, Пользователь, Пароль);
+ КонецЕсли;
+
+КонецПроцедуры // УстановитьПараметрыСоединения()
+
+// Создает каталог на сервере SFTP
+//
+// Параметры:
+// ЦелевойПуть - Строка - путь к создаваемому каталогу
+//
+Процедура СоздатьКаталог(Знач ЦелевойПуть) Экспорт
+
+ Попытка
+ ФайлыНаСервере = Соединение.ПолучитьScp();
+
+ ФайлыНаСервере.СоздатьКаталог(ЦелевойПуть);
+
+ Лог.Информация("Создан каталог ""%1"" на SFTP-сервере", ЦелевойПуть);
+ Исключение
+ Если ТипЗнч(ФайлыНаСервере) = Тип("СоединениеSCP") Тогда
+ ФайлыНаСервере.Отключиться();
+ КонецЕсли;
+
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка при создании каталога ""%1"" на SFTP-сервере: %2%3",
+ ЦелевойПуть,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ФайлыНаСервере.Отключиться();
+
+КонецПроцедуры // СоздатьКаталог()
+
+// Процедура - отправляет файл на сервер SFTP
+//
+// Параметры:
+// ПутьКФайлу - Строка - путь к отправляемому файлу
+// ЦелевойПуть - Строка - путь к каталогу на сервере SFTP, куда будет загружен файл
+// Перезаписывать - Булево - перезаписать файл на сервере SFTP при загрузке
+//
+Процедура ОтправитьФайл(Знач ПутьКФайлу, Знач ЦелевойПуть, Перезаписывать = Ложь) Экспорт
+
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
+
+ Лог.Информация("Начало отправки файла на SFTP-сервер ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
+
+ ИсходныйФайл = Новый Файл(ПутьКФайлу);
+
+ Попытка
+ ФайлыНаСервере = Соединение.ПолучитьScp();
+
+ ФайлыНаСервере.ОтправитьФайл(ИсходныйФайл.ПолноеИмя,
+ СтрШаблон("%1/%2", ЦелевойПуть, ИсходныйФайл.Имя),
+ Перезаписывать);
+
+ Лог.Информация("Файл загружен на SFTP-сервер ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
+ Исключение
+ Если ТипЗнч(ФайлыНаСервере) = Тип("СоединениеSCP") Тогда
+ ФайлыНаСервере.Отключиться();
+ КонецЕсли;
+
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка загрузки файла ""%1"" на SFTP-сервер в ""%2/%1"":%3%4",
+ ИсходныйФайл.Имя,
+ ЦелевойПуть,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ФайлыНаСервере.Отключиться();
+
+КонецПроцедуры // ОтправитьФайл()
+
+// Процедура - получает файл с сервера SFTP
+//
+// Параметры:
+// ПутьНаСервере - Строка - расположение файла на сервере SFTP
+// ЦелевойКаталог - Строка - путь к каталогу, куда будет загружен файл
+// УдалитьИсточник - Булево - Истина - удалить файл после загрузки
+//
+// Возвращаемое значение:
+// Строка - путь к полученному файлу
+//
+Функция ПолучитьФайл(Знач ПутьНаСервере, Знач ЦелевойКаталог, УдалитьИсточник = Ложь) Экспорт
+
+ ЧастиПути = РаботаСФайлами.ЧастиПути(ПутьНаСервере);
+
+ ЦелевойПуть = ОбъединитьПути(ЦелевойКаталог, ЧастиПути.Имя);
+
+ ЦелевойПуть = ФС.ПолныйПуть(ЦелевойПуть);
+
+ Лог.Информация("Начало получения файла c SFTP-сервера ""%1"" -> ""%2""", ПутьНаСервере, ЦелевойПуть);
+
+ Попытка
+ ФайлыНаСервере = Соединение.ПолучитьScp();
+
+ ФайлыНаСервере.ПолучитьФайл(ПутьНаСервере, ЦелевойПуть);
+
+ Лог.Информация("Файл ""%1"" получен c SFTP-сервера", ЦелевойПуть);
+ Исключение
+ Если ТипЗнч(ФайлыНаСервере) = Тип("СоединениеSCP") Тогда
+ ФайлыНаСервере.Отключиться();
+ КонецЕсли;
+
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"" c SFTP-сервера: %2%3",
+ ПутьНаСервере,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ФайлыНаСервере.Отключиться();
+
+ Если УдалитьИсточник Тогда
+ УдалитьФайл(ПутьНаСервере);
+ КонецЕсли;
+
+ Возврат ЦелевойПуть;
+
+КонецФункции // ПолучитьФайл()
+
+// Функция - проверяет существование файла / каталога на сервере SFTP
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на сервере SFTP
+//
+// Возвращаемое значение:
+// Булево - Истина - Файл / каталг существует
+//
+Функция Существует(Знач ПутьНаДиске) Экспорт
+
+ Результат = Ложь;
+
+ Попытка
+ ФайлыНаСервере = Соединение.ПолучитьScp();
+ Результат = ФайлыНаСервере.Существует(ПутьНаДиске);
+ Исключение
+ Если ТипЗнч(ФайлыНаСервере) = Тип("СоединениеSCP") Тогда
+ ФайлыНаСервере.Отключиться();
+ КонецЕсли;
+
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка проверки существования файла ""%1"" на сервере SFTP: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ФайлыНаСервере.Отключиться();
+
+ Возврат Результат;
+
+КонецФункции // Существует()
+
+// Процедура - удаляет файл на сервере SFTP
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на сервере SFTP
+//
+Процедура УдалитьФайл(Знач ПутьНаДиске) Экспорт
+
+ Попытка
+ ФайлыНаСервере = Соединение.ПолучитьScp();
+
+ ФайлыНаСервере.УдалитьФайл(ПутьНаДиске);
+
+ Лог.Информация("Удален файл ""%1"" на сервере SFTP", ПутьНаДиске);
+ Исключение
+ Если ТипЗнч(ФайлыНаСервере) = Тип("СоединениеSCP") Тогда
+ ФайлыНаСервере.Отключиться();
+ КонецЕсли;
+
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка удаления файла ""%1"" на сервере SFTP: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ФайлыНаСервере.Отключиться();
+
+КонецПроцедуры // УдалитьФайл()
+
+// Процедура - удаляет каталог на сервере SFTP
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение каталог на сервере SFTP
+//
+Процедура УдалитьКаталог(Знач ПутьНаДиске) Экспорт
+
+ Попытка
+ ФайлыНаСервере = Соединение.ПолучитьScp();
+
+ ФайлыНаСервере.УдалитьКаталог(ПутьНаДиске);
+
+ Лог.Информация("Удален каталог ""%1"" на сервере SFTP", ПутьНаДиске);
+ Исключение
+ Если ТипЗнч(ФайлыНаСервере) = Тип("СоединениеSCP") Тогда
+ ФайлыНаСервере.Отключиться();
+ КонецЕсли;
+
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка удаления каталога ""%1"" на сервере SFTP: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ ФайлыНаСервере.Отключиться();
+
+КонецПроцедуры // УдалитьКаталог()
+
+#КонецОбласти // ПрограммныйИнтерфейс
+
+#Область ОбработчикиСобытий
+
+// Процедура - обработчик события "ПриСозданииОбъекта"
+//
+// Параметры:
+// _Адрес - Строка - адрес сервера SSH
+// _Пользователь - Строка - имя пользователя сервера SSH
+// Пароль - Строка - пароль пользователя сервера SSH
+// или пароль к закрытому ключу (если указан ключ)
+// ПутьККлючу - Строка - путь к файлу закрытого ключа сервера SSH
+//
+// BSLLS:UnusedLocalMethod-off
+Процедура ПриСозданииОбъекта(Знач _Адрес, Знач _Пользователь, Знач Пароль = "", Знач ПутьККлючу = "") Экспорт
+
+ Лог = ПараметрыСистемы.Лог();
+
+ УстановитьПараметрыСоединения(_Адрес, _Пользователь, Пароль, ПутьККлючу);
+
+КонецПроцедуры // ПриСозданииОбъекта()
+// BSLLS:UnusedLocalMethod-on
+
+#КонецОбласти // ОбработчикиСобытий
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\257\320\275\320\264\320\265\320\272\321\201\320\224\320\270\321\201\320\272.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\257\320\275\320\264\320\265\320\272\321\201\320\224\320\270\321\201\320\272.os"
new file mode 100644
index 0000000..5f1512a
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\257\320\275\320\264\320\265\320\272\321\201\320\224\320\270\321\201\320\272.os"
@@ -0,0 +1,244 @@
+// ----------------------------------------------------------
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v.2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain one
+// at http://mozilla.org/MPL/2.0/.
+// ----------------------------------------------------------
+// Codebase: https://github.com/ArKuznetsov/cpdb/
+// ----------------------------------------------------------
+
+#Использовать yadisk
+#Использовать fs
+
+Перем Токен; // - Строка - токен авторизации Yandex-диска
+Перем Соединение; // - ЯндексДиск - соединение с сервером NextCloud
+
+Перем Лог; // - Объект - объект записи лога приложения
+
+#Область ПрограммныйИнтерфейс
+
+// Функция - возвращает соединение с Yandex-диском
+//
+// Возвращаемое значение:
+// ЯндексДиск - соединение с Yandex-диском
+//
+Функция Соединение() Экспорт
+
+ Возврат Соединение;
+
+КонецФункции // Соединение()
+
+// Создает соединение с Yandex-диском с указанными параметрами
+//
+// Параметры:
+// _Токен - Строка - токен авторизации Yandex-диска
+//
+Процедура УстановитьПараметрыСоединения(Знач _Токен) Экспорт
+
+ Токен = _Токен;
+
+ Соединение = Новый ЯндексДиск();
+ Соединение.УстановитьТокенАвторизации(Токен);
+
+КонецПроцедуры // УстановитьПараметрыСоединения()
+
+// Создает каталог на Yandex-диске
+//
+// Параметры:
+// ЦелевойПуть - ЯндексДиск - путь на yandex-диске к создаваемому каталогу
+//
+// Возвращаемое значение:
+// Строка - Созданный путь
+//
+Функция СоздатьКаталог(Знач ЦелевойПуть) Экспорт
+
+ КаталогНайден = Ложь;
+ Попытка
+ СвойстваПапки = Соединение.ПолучитьСвойстваРесурса(ЦелевойПуть);
+ КаталогНайден = Истина;
+ Исключение
+ СвойстваПапки = Новый Структура("type", "dir");
+ КонецПопытки;
+
+ Если СвойстваПапки["type"] <> "dir" Тогда
+ ТекстОшибки = СтрШаблон("Ошибка при создании каталога ""%1"" на Yandex-Диске", ЦелевойПуть);
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+ ТекущийПуть = "";
+ Если НЕ КаталогНайден Тогда
+ Попытка
+ Соединение.СоздатьПапку(ЦелевойПуть);
+ Лог.Информация("Создан каталог ""%1"" на Yandex-Диске", ЦелевойПуть);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка при создании каталога ""%1"" на Yandex-Диске: %2%3",
+ ЦелевойПуть,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+ КонецЕсли;
+
+ Возврат ТекущийПуть;
+
+КонецФункции // СоздатьКаталог()
+
+// Функция отправки файла на Yandex-Диск
+//
+// Параметры:
+// ПутьКФайлу - Строка - путь к отправляемому файлу
+// ЦелевойПуть - ЯндексДиск - путь на yandex-диске, куда будет загружен файл
+// Перезаписывать - Булево - перезаписать файл на Яндекс-диске при загрузке
+//
+Процедура ОтправитьФайл(Знач ПутьКФайлу, Знач ЦелевойПуть, Перезаписывать = Ложь) Экспорт
+
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
+
+ Лог.Информация("Начало отправки файла на yandex-диск ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
+
+ СвойстваДиска = Соединение.ПолучитьСвойстваДиска();
+ Лог.Отладка("Всего доступно %1 байт", СвойстваДиска.total_space);
+ Лог.Отладка("Из них занято %1 байт", СвойстваДиска.used_space);
+
+ СвободноМеста = СвойстваДиска.total_space - СвойстваДиска.used_space;
+
+ ИсходныйФайл = Новый Файл(ПутьКФайлу);
+ ИмяЗагружаемогоФайла = СтрШаблон("%1/%2", ЦелевойПуть, ИсходныйФайл.Имя);
+
+ РазмерФайла = ИсходныйФайл.Размер();
+
+ Если СвободноМеста < РазмерФайла Тогда
+ ТекстОшибки = СтрШаблон("Недостаточно места на Yandex-диск для копирования файла ""%1"": есть %2, надо %3",
+ ПутьКФайлу,
+ СвободноМеста,
+ РазмерФайла);
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+ Попытка
+ Соединение.ЗагрузитьНаДиск(ИсходныйФайл.ПолноеИмя, ИмяЗагружаемогоФайла, Перезаписывать);
+ Лог.Информация("Файл загружен на yandex-диск ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка загрузки файла ""%1"" в %2:%3%4",
+ ИсходныйФайл.Имя,
+ ИмяЗагружаемогоФайла,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ Попытка
+ Соединение.ПолучитьСвойстваРесурса(ИмяЗагружаемогоФайла);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка при получении свойств файла %1:%2%3",
+ ИмяЗагружаемогоФайла,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+КонецПроцедуры // ОтправитьФайл()
+
+// Функция получения файла из Yandex-Диска
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на yandex-диске
+// ЦелевойПуть - Строка - путь, куда будет загружен файл
+// УдалитьИсточник - Булево - Истина - удалить файл после загрузки
+//
+// Возвращаемое значение:
+// Число - код возврата команды
+//
+Функция ПолучитьФайл(Знач ПутьНаДиске, Знач ЦелевойПуть, УдалитьИсточник = Ложь) Экспорт
+
+ ЦелевойПуть = ФС.ПолныйПуть(ЦелевойПуть);
+
+ Лог.Информация("Начало получения файла ""%1"" -> ""%2""", ПутьНаДиске, ЦелевойПуть);
+
+ ПутьКСкачанномуФайлу = "";
+
+ Попытка
+ ПутьКСкачанномуФайлу = Соединение.СкачатьФайлСДиска(ЦелевойПуть, ПутьНаДиске, Истина);
+
+ Лог.Информация("Файл получен %1", ПутьКСкачанномуФайлу);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"": %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+ Если УдалитьИсточник Тогда
+ Удалить(ПутьНаДиске);
+ СвойстваДиска = Соединение.ПолучитьСвойстваДиска();
+ Лог.Отладка("Всего доступно %1 байт", СвойстваДиска.total_space);
+ Лог.Отладка("Из них занято %1 байт", СвойстваДиска.used_space);
+ КонецЕсли;
+
+ Возврат ПутьКСкачанномуФайлу;
+
+КонецФункции // ПолучитьФайл()
+
+// Функция - проверяет существование файла / каталога на Yandex-Диске
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на Yandex-Диске
+//
+// Возвращаемое значение:
+// Булево - Истина - Файл / каталг существует
+//
+Функция Существует(Знач ПутьНаДиске) Экспорт
+
+ ВызватьИсключение "Метод не реализован!";
+
+ Возврат Ложь;
+
+КонецФункции // Существует()
+
+// Процедура - удаляет файл из Yandex-Диска
+//
+// Параметры:
+// ПутьНаДиске - Строка - расположение файла на Yandex-Диске
+//
+Процедура Удалить(Знач ПутьНаДиске) Экспорт
+
+ Попытка
+ Соединение.Удалить(ПутьНаДиске, Истина);
+
+ Лог.Информация("Удален файл ""%1"" из Yandex-Диска", ПутьНаДиске);
+ Исключение
+ ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
+ ТекстОшибки = СтрШаблон("Ошибка удаления файла ""%1"" из Yandex-Диска: %2%3",
+ ПутьНаДиске,
+ Символы.ПС,
+ ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецПопытки;
+
+КонецПроцедуры // Удалить()
+
+#КонецОбласти // ПрограммныйИнтерфейс
+
+#Область ОбработчикиСобытий
+
+// Процедура - обработчик события "ПриСозданииОбъекта"
+//
+// Параметры:
+// _Токен - Строка - токен авторизации Yandex-диска
+//
+// BSLLS:UnusedLocalMethod-off
+Процедура ПриСозданииОбъекта(Знач _Токен) Экспорт
+
+ Лог = ПараметрыСистемы.Лог();
+
+ УстановитьПараметрыСоединения(_Токен);
+
+КонецПроцедуры // ПриСозданииОбъекта()
+// BSLLS:UnusedLocalMethod-on
+
+#КонецОбласти // ОбработчикиСобытий
diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os"
index 72ce764..fc56481 100644
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os"
+++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os"
@@ -137,6 +137,6 @@
//
Функция Версия() Экспорт
- Возврат "1.0.0";
+ Возврат "1.1.0";
КонецФункции // Версия()
diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os"
index ae91fee..1d147b6 100644
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os"
+++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\230\320\221.os"
@@ -10,6 +10,7 @@
#Использовать v8runner
#Использовать v8storage
#Использовать ParserFileV8i
+#Использовать fs
Перем Лог; // - Объект - объект записи лога приложения
@@ -31,7 +32,7 @@
Знач ИспользуемаяВерсияПлатформы,
Знач КлючРазрешения = "") Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлу);
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
Конфигуратор = НастроитьКонфигуратор(ПараметрыИБ.СтрокаПодключения,
ПараметрыИБ.Пользователь,
@@ -80,7 +81,7 @@
Знач ИспользуемаяВерсияПлатформы,
Знач КлючРазрешения = "") Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлу);
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
Конфигуратор = НастроитьКонфигуратор(ПараметрыИБ.СтрокаПодключения,
ПараметрыИБ.Пользователь,
@@ -355,7 +356,7 @@
Знач ПутьКШаблону = "",
Знач ИмяВСпискеБаз = "") Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКШаблону);
+ ПутьКШаблону = ФС.ПолныйПуть(ПутьКШаблону);
Конфигуратор = Новый УправлениеКонфигуратором();
Конфигуратор.ИспользоватьВерсиюПлатформы(ИспользуемаяВерсияПлатформы);
@@ -404,9 +405,9 @@
Знач ПутьКШаблону = "",
Знач ИмяВСпискеБаз = "") Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКБазе);
+ ПутьКБазе = ФС.ПолныйПуть(ПутьКБазе);
- РаботаСФайлами.НормализоватьПуть(ПутьКШаблону);
+ ПутьКШаблону = ФС.ПолныйПуть(ПутьКШаблону);
Конфигуратор = Новый УправлениеКонфигуратором();
Конфигуратор.ИспользоватьВерсиюПлатформы(ИспользуемаяВерсияПлатформы);
@@ -441,7 +442,7 @@
#Область СлужебныеПроцедурыИФункции
// Функция подготавливает конфигуратор 1С для выполнения в режиме командной строки
-//
+//
// Параметры:
// СтрокаПодключения - Строка - строка подключения к базе 1С
// ИмяПользователя - Строка - имя пользователя базы 1С
diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
index 6a70ca8..b3ca8ed 100644
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
+++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\260\320\271\320\273\320\260\320\274\320\270.os"
@@ -8,7 +8,6 @@
// ----------------------------------------------------------
#Использовать yadisk
-#Использовать nextcloud-lib
#Использовать fs
#Использовать 1commands
@@ -24,11 +23,14 @@
// Перемещение - Булево - выполнить перемещение файлов (удалить источник после копирования)
// ТолькоСегодня - Булево - копирование файлов, измененных не ранее текущей даты (параметр /D для xcopy)
//
-Процедура КомандаСистемыКопироватьФайл(Источник,
- Приемник,
+Процедура КомандаСистемыКопироватьФайл(Знач Источник,
+ Знач Приемник,
Перемещение = Ложь,
ТолькоСегодня = Ложь) Экспорт
+ Источник = ФС.ПолныйПуть(Источник);
+ Приемник = ФС.ПолныйПуть(Приемник);
+
ВремФайл = Новый Файл(Приемник);
Лог.Информация("Начало копирования файла ""%1"" -> ""%2""", Источник, Приемник);
@@ -82,23 +84,23 @@
КонецПроцедуры // КомандаСистемыКопироватьФайл()
// Функция, выполняет удаление указанных файлов с использованием команды системы (del)
-//
+//
// Параметры:
// ПутьКФайлу - Строка - путь к удаляемому файлы
// ИсключениеПриОшибке - Строка - Истина - вызывать исключение при ошибке удаления
//
Процедура КомандаСистемыУдалитьФайл(Знач ПутьКФайлу, ИсключениеПриОшибке = Ложь) Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлу);
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
Лог.Информация("Начало удаления файла ""%1""", ПутьКФайлу);
КомандаРК = Новый Команда;
КомандаРК.УстановитьКоманду("del");
- КомандаРК.ДобавитьПараметр("/F ");
- КомандаРК.ДобавитьПараметр("/Q ");
- КомандаРК.ДобавитьПараметр(ПутьКФайлу);
+ КомандаРК.ДобавитьПараметр("/F");
+ КомандаРК.ДобавитьПараметр("/Q");
+ КомандаРК.ДобавитьПараметр(КомандаРК.ОбернутьВКавычки(ПутьКФайлу));
КомандаРК.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
КомандаРК.ПоказыватьВыводНемедленно(Ложь);
@@ -141,17 +143,17 @@
//
Функция ПрочитатьСписокФайлов(Знач ПутьКСписку, ДобавитьПутьКИсходномуФайлу = Ложь, ДобавитьИсходныйФайл = Ложь) Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКСписку);
+ ПутьКСписку = ФС.ПолныйПуть(ПутьКСписку);
ДанныеИсхФайла = Новый Файл(ПутьКСписку);
МассивФайловЧастей = Новый Массив();
ЧтениеСписка = Новый ЧтениеТекста(ПутьКСписку, КодировкаТекста.UTF8);
- СтрокаСписка = СокрЛП(ЧтениеСписка.ПрочитатьСтроку());
+ СтрокаСписка = ЧтениеСписка.ПрочитатьСтроку();
Пока СтрокаСписка <> Неопределено Цикл
Если ЗначениеЗаполнено(СтрокаСписка) Тогда
- ИмяФайла = ИмяФайлаИзСтрокиСписка(СтрокаСписка);
+ ИмяФайла = ИмяФайлаИзСтрокиСписка(СокрЛП(СтрокаСписка));
Если ДобавитьПутьКИсходномуФайлу Тогда
МассивФайловЧастей.Добавить(ОбъединитьПути(ДанныеИсхФайла.Путь, ИмяФайла));
Иначе
@@ -159,7 +161,7 @@
КонецЕсли;
КонецЕсли;
- СтрокаСписка = СокрЛП(ЧтениеСписка.ПрочитатьСтроку());
+ СтрокаСписка = ЧтениеСписка.ПрочитатьСтроку();
КонецЦикла;
ЧтениеСписка.Закрыть();
@@ -173,7 +175,7 @@
КонецФункции // ПрочитатьСписокФайлов()
// Выполняет архиваци указанного файла с разбитием на части указанного размера
-//
+//
// Параметры:
// ПутьКФайлу - Строка - путь к файлу, который будет архивироваться
// ИмяАрхива - Строка - имя файла-архива
@@ -183,13 +185,13 @@
// УдалитьИсточник - Булево - Истина - после архивации исходный файл будет удален
//
Процедура ЗапаковатьВАрхив(Знач ПутьКФайлу,
- Знач ИмяАрхива,
- Знач ИмяСпискаФайлов,
+ Знач ИмяАрхива = Неопределено,
+ Знач ИмяСпискаФайлов = Неопределено,
Знач РазмерТома = Неопределено,
Знач СтепеньСжатия = 0,
Знач УдалитьИсточник = Ложь) Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлу);
+ ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);
ПутьКАрхиватору = НайтиАрхиватор();
@@ -207,7 +209,7 @@
ПутьКАрхиву = ОбъединитьПути(ДанныеИсхФайла.Путь, ДанныеИсхФайла.ИмяБезРасширения + ".7z");
КонецЕсли;
- РаботаСФайлами.НормализоватьПуть(ПутьКАрхиву);
+ ПутьКАрхиву = ФС.ПолныйПуть(ПутьКАрхиву);
Если НЕ ЗначениеЗаполнено(ИмяСпискаФайлов) Тогда
ИмяСпискаФайлов = ОбъединитьПути(ДанныеИсхФайла.Путь, ДанныеИсхФайла.ИмяБезРасширения + ".split");
@@ -259,7 +261,7 @@
КонецПроцедуры // ЗапаковатьВАрхив()
// Процедура, выполняет распаковку архива
-//
+//
// Параметры:
// ПутьКАрхиву - Строка - путь к файлу архива, который будет распаковываться
// ЭтоСписокФайлов - Булево - Истина - передан список файлов;
@@ -268,7 +270,7 @@
//
Процедура РаспаковатьАрхив(Знач ПутьКАрхиву, Знач ЭтоСписокФайлов = Ложь, Знач УдалитьИсточник = Ложь) Экспорт
- РаботаСФайлами.НормализоватьПуть(ПутьКАрхиву);
+ ПутьКАрхиву = ФС.ПолныйПуть(ПутьКАрхиву);
ПутьКАрхиватору = НайтиАрхиватор();
@@ -314,9 +316,9 @@
Если УдалитьИсточник Тогда
Для Каждого ФайлЧасти Из МассивФайловЧастей Цикл
Если ТипЗнч(ФайлЧасти) = Тип("Файл") Тогда
- КомандаСистемыУдалитьФайл(ФайлЧасти.ПолноеИмя);
+ УдалитьФайлы(ФайлЧасти.ПолноеИмя);
Иначе
- КомандаСистемыУдалитьФайл(ФайлЧасти);
+ УдалитьФайлы(ФайлЧасти);
КонецЕсли;
КонецЦикла;
КонецЕсли;
@@ -332,246 +334,6 @@
КонецПроцедуры // РаспаковатьАрхив()
-// Создает папку на Я-Диске
-//
-// Параметры:
-// ЯДиск - ЯндексДиск - объект ЯндексДиск для работы с yandex-диском
-// ЦелевойПуть - ЯндексДиск - путь на yandex-диске к создаваемому каталогу
-//
-// Возвращаемое значение:
-// Строка - Созданный путь
-//
-Функция СоздатьПапкуНаЯДиске(ЯДиск, Знач ЦелевойПуть) Экспорт
-
- КаталогНайден = Ложь;
- Попытка
- СвойстваПапки = ЯДиск.ПолучитьСвойстваРесурса(ЦелевойПуть);
- КаталогНайден = Истина;
- Исключение
- СвойстваПапки = Новый Структура("type", "dir");
- КонецПопытки;
-
- Если СвойстваПапки["type"] <> "dir" Тогда
- ТекстОшибки = СтрШаблон("Ошибка при создании папки Яндекс-Диска: %1", ЦелевойПуть);
- ВызватьИсключение ТекстОшибки;
- КонецЕсли;
-
- ТекущийПуть = "";
- Если НЕ КаталогНайден Тогда
- Попытка
- ЯДиск.СоздатьПапку(ЦелевойПуть);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка при создании папки %1: %2%3",
- ЦелевойПуть,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
- КонецЕсли;
-
- Возврат ТекущийПуть;
-
-КонецФункции // СоздатьПапкуНаЯДиске()
-
-// Функция отправки файла на Yandex-Диск
-//
-// Параметры:
-// ЯДиск - ЯндексДиск - объект ЯндексДиск для работы с yandex-диском
-// ПутьКФайлу - Строка - путь к отправляемому файлу
-// ЦелевойПуть - ЯндексДиск - путь на yandex-диске, куда будет загружен файл
-// Перезаписывать - Булево - перезаписать файл на Яндекс-диске при загрузке
-//
-Процедура ОтправитьФайлНаЯДиск(ЯДиск, Знач ПутьКФайлу, Знач ЦелевойПуть, Перезаписывать = Ложь) Экспорт
-
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлу);
-
- Лог.Информация("Начало отправки файла на yandex-диск ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
-
- СвойстваДиска = ЯДиск.ПолучитьСвойстваДиска();
- Лог.Отладка("Всего доступно %1 байт", СвойстваДиска.total_space);
- Лог.Отладка("Из них занято %1 байт", СвойстваДиска.used_space);
-
- СвободноМеста = СвойстваДиска.total_space - СвойстваДиска.used_space;
-
- ИсходныйФайл = Новый Файл(ПутьКФайлу);
- ИмяЗагружаемогоФайла = СтрШаблон("%1/%2", ЦелевойПуть, ИсходныйФайл.Имя);
-
- РазмерФайла = ИсходныйФайл.Размер();
-
- Если СвободноМеста < РазмерФайла Тогда
- ТекстОшибки = СтрШаблон("Недостаточно места на ЯДиске для копирования файла ""%1"": есть %2, надо %3",
- ПутьКФайлу,
- СвободноМеста,
- РазмерФайла);
- ВызватьИсключение ТекстОшибки;
- КонецЕсли;
-
- Попытка
- ЯДиск.ЗагрузитьНаДиск(ИсходныйФайл.ПолноеИмя, ИмяЗагружаемогоФайла, Перезаписывать);
- Лог.Информация("Файл загружен на yandex-диск ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка загрузки файла ""%1"" в %2:%3%4",
- ИсходныйФайл.Имя,
- ИмяЗагружаемогоФайла,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
- Попытка
- ЯДиск.ПолучитьСвойстваРесурса(ИмяЗагружаемогоФайла);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка при получении свойств файла %1:%2%3",
- ИмяЗагружаемогоФайла,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
-КонецПроцедуры // ОтправитьФайлНаЯДиск()
-
-// Функция получения файла из Yandex-Диска
-//
-// Параметры:
-// ЯДиск - ЯндексДиск - объект для работы с yandex-диском
-// ПутьНаДиске - Строка - расположение файла на yandex-диске
-// ЦелевойПуть - Строка - путь, куда будет загружен файл
-// УдалитьИсточник - Булево - Истина - удалить файл после загрузки
-//
-// Возвращаемое значение:
-// Число - код возврата команды
-//
-Функция ПолучитьФайлИзЯДиска(ЯДиск, Знач ПутьНаДиске, Знач ЦелевойПуть, УдалитьИсточник = Ложь) Экспорт
-
- РаботаСФайлами.НормализоватьПуть(ЦелевойПуть);
-
- Лог.Информация("Начало получения файла ""%1"" -> ""%2""", ПутьНаДиске, ЦелевойПуть);
-
- ПутьКСкачанномуФайлу = "";
-
- Попытка
- ПутьКСкачанномуФайлу = ЯДиск.СкачатьФайлСДиска(ЦелевойПуть, ПутьНаДиске, Истина);
-
- Лог.Информация("Файл получен %1", ПутьКСкачанномуФайлу);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"": %2%3",
- ПутьНаДиске,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
- Если УдалитьИсточник Тогда
- ЯДиск.Удалить(ПутьНаДиске, Истина);
- СвойстваДиска = ЯДиск.ПолучитьСвойстваДиска();
- Лог.Информация("Удален файл на Yandex-Диск %1", ПутьНаДиске);
- Лог.Отладка("Всего доступно %1 байт", СвойстваДиска.total_space);
- Лог.Отладка("Из них занято %1 байт", СвойстваДиска.used_space);
- КонецЕсли;
-
- Возврат ПутьКСкачанномуФайлу;
-
-КонецФункции // ПолучитьФайлИзЯДиска()
-
-// Создает папку в сервисе NextCloud
-//
-// Параметры:
-// Сервис - ПодключениеNextCloud - объект для работы с сервисом NextCloud
-// ЦелевойПуть - Строка - путь к создаваемому каталогу
-//
-Процедура СоздатьПапкуВNextCloud(Сервис, Знач ЦелевойПуть) Экспорт
-
- Попытка
- Сервис.Файлы().СоздатьКаталог(ЦелевойПуть);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка при создании папки %1: %2%3",
- ЦелевойПуть,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
-КонецПроцедуры // СоздатьПапкуВNextCloud()
-
-// Процедура - отправляет файл в сервис ТучеСдщгв
-//
-// Параметры:
-// Сервис - ПодключениеNextCloud - объект для работы с сервисом NextCloud
-// ПутьКФайлу - Строка - путь к отправляемому файлу
-// ЦелевойПуть - Строка - путь к каталогу в сервисе NextCloud, куда будет загружен файл
-// Перезаписывать - Булево - перезаписать файл в сервисе NextCloud при загрузке
-//
-Процедура ОтправитьФайлВNextCloud(Сервис, Знач ПутьКФайлу, Знач ЦелевойПуть, Перезаписывать = Ложь) Экспорт
-
- РаботаСФайлами.НормализоватьПуть(ПутьКФайлу);
-
- Лог.Информация("Начало отправки файла в сервис NextCloud ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
-
- ИсходныйФайл = Новый Файл(ПутьКФайлу);
-
- Попытка
- Сервис.Файлы().Отправить(ИсходныйФайл.ПолноеИмя, ЦелевойПуть, ИсходныйФайл.Имя, Перезаписывать);
- Лог.Информация("Файл загружен в сервис NextCloud ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка загрузки файла ""%1"" в ""%2/%1"":%3%4",
- ИсходныйФайл.Имя,
- ЦелевойПуть,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
-КонецПроцедуры // ОтправитьФайлВNextCloud()
-
-// Процедура - получает файл из сервиса NextCloud
-//
-// Параметры:
-// Сервис - ПодключениеNextCloud - объект для работы с сервисом NextCloud
-// ПутьНаДиске - Строка - расположение файла на сервисе NextCloud
-// ЦелевойКаталог - Строка - путь к каталогу, куда будет загружен файл
-// УдалитьИсточник - Булево - Истина - удалить файл после загрузки
-//
-// Возвращаемое значение:
-// Строка - путь к полученному файлу
-//
-Функция ПолучитьФайлИзNextCloud(Сервис, Знач ПутьНаДиске, Знач ЦелевойКаталог, УдалитьИсточник = Ложь) Экспорт
-
- ЧастиПути = ЧастиПути(ПутьНаДиске);
-
- ЦелевойПуть = ОбъединитьПути(ЦелевойКаталог, ЧастиПути.Имя);
-
- РаботаСФайлами.НормализоватьПуть(ЦелевойПуть);
-
- Лог.Информация("Начало получения файла ""%1"" -> ""%2""", ПутьНаДиске, ЦелевойПуть);
-
- Попытка
- Сервис.Файлы().Получить(ПутьНаДиске, ЦелевойПуть, Истина);
-
- Лог.Информация("Файл получен ""%1""", ЦелевойПуть);
- Исключение
- ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
- ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"": %2%3",
- ПутьНаДиске,
- Символы.ПС,
- ТекстОшибки);
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
-
- Если УдалитьИсточник Тогда
- Сервис.Файлы.Удалить(ПутьНаДиске);
- Лог.Информация("Удален файл в сервисе NextCloud ""%1""", ПутьНаДиске);
- КонецЕсли;
-
- Возврат ЦелевойПуть;
-
-КонецФункции // ПолучитьФайлИзNextCloud()
-
// Процедура подключает указанный сетевой диск
//
// Параметры:
@@ -619,7 +381,7 @@
КонецПроцедуры // ПодключитьДиск()
// Процедура отключает указанный сетевой диск
-//
+//
// Параметры:
// ИмяУстройства - Строка - имя (буква) отключаемого диска
//
@@ -655,28 +417,40 @@
КонецПроцедуры // ОтключитьДиск()
-// Процедура приводит переданный путь к "нормализованному" виду
-//
+#КонецОбласти // ПрограммныйИнтерфейс
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Функция - разбивает переданный путь к файлу на части
+//
// Параметры:
-// Путь - Строка - (возвр.) нормализуемый путь
+// ПутьКФайлу - Строка - путь к файлу/каталогу
+//
+// Возвращаемое значение:
+// Структура - части пути к файлу
+// *Имя - Строка - имя файла/каталога
+// *Путь - Строка - путь к каталогу в котором расположен файл/каталог
+// *ПолныйПуть - Строка - полный путь к файлу/каталогу
//
-Процедура НормализоватьПуть(Путь) Экспорт
+Функция ЧастиПути(Знач ПутьКФайлу) Экспорт
- Попытка
- Файл = Новый Файл(Путь);
- Исключение
- ТекстОшибки = СтрШаблон("Ошибка нормализации пути ""%1"":%2%3",
- Путь,
- Символы.ПС,
- ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
- ВызватьИсключение ТекстОшибки;
- КонецПопытки;
+ Результат = Новый Структура();
+
+ ПутьКФайлу = СтрЗаменить(ПутьКФайлу, "\", "/");
+
+ Результат.Вставить("ПолныйПуть", ПутьКФайлу);
+
+ ЧастиПути = СтрРазделить(ПутьКФайлу, "/", Ложь);
+
+ Результат.Вставить("Имя", ЧастиПути[ЧастиПути.ВГраница()]);
- Лог.Отладка("Нормализован путь ""%1"" -> ""%2""", Путь, Файл.ПолноеИмя);
+ ЧастиПути.Удалить(ЧастиПути.ВГраница());
+
+ Результат.Вставить("Путь", СтрСоединить(ЧастиПути, "/"));
- Путь = Файл.ПолноеИмя;
+ Возврат Результат;
-КонецПроцедуры // НормализоватьПуть()
+КонецФункции // ЧастиПути()
#КонецОбласти // ПрограммныйИнтерфейс
@@ -772,7 +546,7 @@
КонецФункции // НайтиАрхиватор()
// Функция создает файл-список файлов архива и возвращает количество
-//
+//
// Параметры:
// ПутьКАрхиву - Строка - путь к файлу архива
// ИмяСпискаФайлов - Строка - имя файла-списка файлов архива
@@ -782,7 +556,7 @@
//
Функция СоздатьСписокФайлов(ПутьКАрхиву, ИмяСпискаФайлов)
- РаботаСФайлами.НормализоватьПуть(ПутьКАрхиву);
+ ПутьКАрхиву = ФС.ПолныйПуть(ПутьКАрхиву);
ВремАрхив = Новый Файл(ПутьКАрхиву);
@@ -829,37 +603,6 @@
КонецФункции // ИмяФайлаИзСтрокиСписка()
-// Функция - разбивает переданный путь к файлу на части
-//
-// Параметры:
-// ПутьКФайлу - Строка - путь к файлу/каталогу
-//
-// Возвращаемое значение:
-// Структура - части пути к файлу
-// *Имя - Строка - имя файла/каталога
-// *Путь - Строка - путь к каталогу в котором расположен файл/каталог
-// *ПолныйПуть - Строка - полный путь к файлу/каталогу
-//
-Функция ЧастиПути(Знач ПутьКФайлу)
-
- Результат = Новый Структура();
-
- ПутьКФайлу = СтрЗаменить(ПутьКФайлу, "\", "/");
-
- Результат.Вставить("ПолныйПуть", ПутьКФайлу);
-
- ЧастиПути = СтрРазделить(ПутьКФайлу, "/", Ложь);
-
- Результат.Вставить("Имя", ЧастиПути[ЧастиПути.ВГраница()]);
-
- ЧастиПути.Удалить(ЧастиПути.ВГраница());
-
- Результат.Вставить("Путь", СтрСоединить(ЧастиПути, "/"));
-
- Возврат Результат;
-
-КонецФункции // ЧастиПути()
-
#КонецОбласти // СлужебныеПроцедурыИФункции
Лог = ПараметрыСистемы.Лог();
diff --git a/src/lib.config b/src/lib.config
index f279854..a639a52 100644
--- a/src/lib.config
+++ b/src/lib.config
@@ -1,33 +1,49 @@
+
+
+
+
-
+
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/file-tests.os b/tests/file-tests.os
index 328d749..fb6fe0f 100644
--- a/tests/file-tests.os
+++ b/tests/file-tests.os
@@ -2,17 +2,20 @@
#Использовать "../src/core"
#Использовать "../src/cmd"
-Перем ШаблонБазы; // - путь к файлу шаблона базы для тестов
+Перем ПутьКТестовомуФайлу; // - путь к файлу для тестов
Перем КаталогВременныхДанных; // - путь к каталогу временных данных
Перем Лог; // - логгер
+#Область ОбработчикиСобытий
+
// Процедура выполняется после запуска теста
//
Процедура ПередЗапускомТеста() Экспорт
КаталогВременныхДанных = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "build", "tmpdata");
+ КаталогВременныхДанных = ФС.ПолныйПуть(КаталогВременныхДанных);
- ШаблонБазы = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "cpdb_test_db.dt");
+ ПутьКТестовомуФайлу = ОбъединитьПути(КаталогВременныхДанных, "testFile1.tst");
Лог = ПараметрыСистемы.Лог();
Лог.УстановитьУровень(УровниЛога.Информация);
@@ -25,101 +28,121 @@
КонецПроцедуры // ПослеЗапускаТеста()
+#КонецОбласти // ОбработчикиСобытий
+
+#Область Тесты
+
+&Тест
+Процедура ТестДолжен_СоздатьФайл() Экспорт
+
+ ФС.ОбеспечитьПустойКаталог(КаталогВременныхДанных);
+
+ РазмерФайла = 31457280;
+
+ СоздатьСлучайныйФайл(ПутьКТестовомуФайлу, РазмерФайла);
+
+ ТекстОшибки = СтрШаблон("Ошибка создания файла ""%1""", ПутьКТестовомуФайлу);
+
+ Утверждения.ПроверитьИстину(ФС.ФайлСуществует(ПутьКТестовомуФайлу), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_СоздатьФайл()
+
&Тест
Процедура ТестДолжен_СоздатьПапкуВNextCloud() Экспорт
- АдресСервиса = ПолучитьПеременнуюСреды("NC_ADDRESS");
- АдминИмя = ПолучитьПеременнуюСреды("NC_ADMIN_NAME");
- АдминПароль = ПолучитьПеременнуюСреды("NC_ADMIN_PWD");
+ АдресСервиса = ПолучитьПеременнуюСреды("NC_TEST_ADDRESS");
+ АдминИмя = ПолучитьПеременнуюСреды("NC_TEST_ADMIN_NAME");
+ АдминПароль = ПолучитьПеременнуюСреды("NC_TEST_ADMIN_PWD");
- Сервис = Новый ПодключениеNextCloud(АдресСервиса, АдминИмя, АдминПароль);
+ Клиент = Новый РаботаСNextCloud(АдресСервиса, АдминИмя, АдминПароль);
ИмяКаталога = "testFolder1";
- РаботаСФайлами.СоздатьПапкуВNextCloud(Сервис, ИмяКаталога);
+ Клиент.СоздатьКаталог(ИмяКаталога);
ТекстОшибки = СтрШаблон("Ошибка создания каталога ""%1"" в сервисе ""%2"", для пользователя ""%3""",
ИмяКаталога,
АдресСервиса,
АдминИмя);
- Утверждения.ПроверитьИстину(Сервис.Файлы().Существует(ИмяКаталога), ТекстОшибки);
+ Утверждения.ПроверитьИстину(Клиент.Существует(ИмяКаталога), ТекстОшибки);
- Сервис.Файлы().Удалить(ИмяКаталога);
+ Клиент.Удалить(ИмяКаталога);
КонецПроцедуры // ТестДолжен_СоздатьПапкуВNextCloud()
&Тест
Процедура ТестДолжен_ОтправитьФайлВNextCloud() Экспорт
- АдресСервиса = ПолучитьПеременнуюСреды("NC_ADDRESS");
- АдминИмя = ПолучитьПеременнуюСреды("NC_ADMIN_NAME");
- АдминПароль = ПолучитьПеременнуюСреды("NC_ADMIN_PWD");
+ АдресСервиса = ПолучитьПеременнуюСреды("NC_TEST_ADDRESS");
+ АдминИмя = ПолучитьПеременнуюСреды("NC_TEST_ADMIN_NAME");
+ АдминПароль = ПолучитьПеременнуюСреды("NC_TEST_ADMIN_PWD");
- Сервис = Новый ПодключениеNextCloud(АдресСервиса, АдминИмя, АдминПароль);
+ Клиент = Новый РаботаСNextCloud(АдресСервиса, АдминИмя, АдминПароль);
ИмяКаталога = "testFolder1";
- ТестовыйФайл = Новый Файл(ШаблонБазы);
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
- РаботаСФайлами.СоздатьПапкуВNextCloud(Сервис, ИмяКаталога);
+ Клиент.СоздатьКаталог(ИмяКаталога);
ТекстОшибки = СтрШаблон("Ошибка создания каталога ""%1"" в сервисе ""%2"", для пользователя ""%3""",
ИмяКаталога,
АдресСервиса,
АдминИмя);
- Утверждения.ПроверитьИстину(Сервис.Файлы().Существует(ИмяКаталога), ТекстОшибки);
+ Утверждения.ПроверитьИстину(Клиент.Существует(ИмяКаталога), ТекстОшибки);
- РаботаСФайлами.ОтправитьФайлВNextCloud(Сервис, ТестовыйФайл.ПолноеИмя, ИмяКаталога);
+ Клиент.ОтправитьФайл(ТестовыйФайл.ПолноеИмя, ИмяКаталога);
ТекстОшибки = СтрШаблон("Ошибка отправки файла ""%1"" в сервис ""%2"", для пользователя ""%3""",
ТестовыйФайл.ПолноеИмя,
АдресСервиса,
АдминИмя);
- Утверждения.ПроверитьИстину(Сервис.Файлы().Существует(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя)), ТекстОшибки);
+ Утверждения.ПроверитьИстину(Клиент.Существует(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя)), ТекстОшибки);
- Сервис.Файлы().Удалить(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя));
+ Клиент.Удалить(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя));
- Сервис.Файлы().Удалить(ИмяКаталога);
+ Клиент.Удалить(ИмяКаталога);
КонецПроцедуры // ТестДолжен_ОтправитьФайлВNextCloud()
&Тест
Процедура ТестДолжен_ПолучитьФайлИзNextCloud() Экспорт
- АдресСервиса = ПолучитьПеременнуюСреды("NC_ADDRESS");
- АдминИмя = ПолучитьПеременнуюСреды("NC_ADMIN_NAME");
- АдминПароль = ПолучитьПеременнуюСреды("NC_ADMIN_PWD");
+ АдресСервиса = ПолучитьПеременнуюСреды("NC_TEST_ADDRESS");
+ АдминИмя = ПолучитьПеременнуюСреды("NC_TEST_ADMIN_NAME");
+ АдминПароль = ПолучитьПеременнуюСреды("NC_TEST_ADMIN_PWD");
- Сервис = Новый ПодключениеNextCloud(АдресСервиса, АдминИмя, АдминПароль);
+ Клиент = Новый РаботаСNextCloud(АдресСервиса, АдминИмя, АдминПароль);
ИмяКаталога = "testFolder1";
- ТестовыйФайл = Новый Файл(ШаблонБазы);
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
- РаботаСФайлами.СоздатьПапкуВNextCloud(Сервис, ИмяКаталога);
+ Клиент.СоздатьКаталог(ИмяКаталога);
ТекстОшибки = СтрШаблон("Ошибка создания каталога ""%1"" в сервисе ""%2"", для пользователя ""%3""",
ИмяКаталога,
АдресСервиса,
АдминИмя);
- Утверждения.ПроверитьИстину(Сервис.Файлы().Существует(ИмяКаталога), ТекстОшибки);
+ Утверждения.ПроверитьИстину(Клиент.Существует(ИмяКаталога), ТекстОшибки);
- РаботаСФайлами.ОтправитьФайлВNextCloud(Сервис, ТестовыйФайл.ПолноеИмя, ИмяКаталога);
+ Клиент.ОтправитьФайл(ТестовыйФайл.ПолноеИмя, ИмяКаталога);
ТекстОшибки = СтрШаблон("Ошибка отправки файла ""%1"" в сервис ""%2"", для пользователя ""%3""",
ТестовыйФайл.ПолноеИмя,
АдресСервиса,
АдминИмя);
- Утверждения.ПроверитьИстину(Сервис.Файлы().Существует(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя)), ТекстОшибки);
+ Утверждения.ПроверитьИстину(Клиент.Существует(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя)), ТекстОшибки);
ФС.ОбеспечитьКаталог(КаталогВременныхДанных);
- ПутьКЗагруженномуФайлу = РаботаСФайлами.ПолучитьФайлИзNextCloud(Сервис, ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя), КаталогВременныхДанных);
+ Клиент.ПолучитьФайл(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя),
+ КаталогВременныхДанных);
ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"" из сервиса ""%2"", для пользователя ""%3""",
ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя),
@@ -128,10 +151,265 @@
Утверждения.ПроверитьИстину(ТестовыйФайл.Существует(), ТекстОшибки);
- Сервис.Файлы().Удалить(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя));
+ Клиент.Удалить(ОбъединитьПути(ИмяКаталога, ТестовыйФайл.Имя));
+
+ Клиент.Удалить(ИмяКаталога);
+
+КонецПроцедуры // ТестДолжен_ПолучитьФайлИзNextCloud()
+
+&Тест
+Процедура ТестДолжен_СоздатьПапкуНаSFTP() Экспорт
+
+ АдресСервера = ПолучитьПеременнуюСреды("SFTP_TEST_ADDRESS");
+ ПользовательИмя = ПолучитьПеременнуюСреды("SFTP_TEST_USER");
+ ПользовательПароль = ПолучитьПеременнуюСреды("SFTP_TEST_PWD");
+
+ Клиент = Новый РаботаССерверомSSH(АдресСервера, ПользовательИмя, ПользовательПароль);
+
+ ИмяКаталога = "testFolder1";
+
+ Клиент.СоздатьКаталог(ИмяКаталога);
+
+ ТекстОшибки = СтрШаблон("Ошибка создания каталога ""%1"" на сервере ""%2"", для пользователя ""%3""",
+ ИмяКаталога,
+ АдресСервера,
+ ПользовательИмя);
+
+ Утверждения.ПроверитьИстину(Клиент.Существует(ИмяКаталога), ТекстОшибки);
+
+ Клиент.УдалитьКаталог(ИмяКаталога);
+
+КонецПроцедуры // ТестДолжен_СоздатьПапкуНаSFTP()
+
+&Тест
+Процедура ТестДолжен_ОтправитьФайлНаSFTP() Экспорт
+
+ АдресСервера = ПолучитьПеременнуюСреды("SFTP_TEST_ADDRESS");
+ ПользовательИмя = ПолучитьПеременнуюСреды("SFTP_TEST_USER");
+ ПользовательПароль = ПолучитьПеременнуюСреды("SFTP_TEST_PWD");
+
+ Клиент = Новый РаботаССерверомSSH(АдресСервера, ПользовательИмя, ПользовательПароль);
+
+ ИмяКаталога = "testFolder1";
+
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
+
+ Клиент.СоздатьКаталог(ИмяКаталога);
+
+ ТекстОшибки = СтрШаблон("Ошибка создания каталога ""%1"" на сервере ""%2"", для пользователя ""%3""",
+ ИмяКаталога,
+ АдресСервера,
+ ПользовательИмя);
+
+ Утверждения.ПроверитьИстину(Клиент.Существует(ИмяКаталога), ТекстОшибки);
+
+ Клиент.ОтправитьФайл(ТестовыйФайл.ПолноеИмя, ИмяКаталога);
+
+ ТекстОшибки = СтрШаблон("Ошибка отправки файла ""%1"" на сервер ""%2"", для пользователя ""%3""",
+ ТестовыйФайл.ПолноеИмя,
+ АдресСервера,
+ ПользовательИмя);
+
+ ПутьКФайлу = СтрШаблон("%1/%2", ИмяКаталога, ТестовыйФайл.Имя);
+
+ Утверждения.ПроверитьИстину(Клиент.Существует(ПутьКФайлу), ТекстОшибки);
+
+ Клиент.УдалитьФайл(ПутьКФайлу);
+
+ Клиент.УдалитьКаталог(ИмяКаталога);
+
+КонецПроцедуры // ТестДолжен_ОтправитьФайлНаSFTP()
+
+&Тест
+Процедура ТестДолжен_ПолучитьФайлСSFTP() Экспорт
+
+ АдресСервера = ПолучитьПеременнуюСреды("SFTP_TEST_ADDRESS");
+ ПользовательИмя = ПолучитьПеременнуюСреды("SFTP_TEST_USER");
+ ПользовательПароль = ПолучитьПеременнуюСреды("SFTP_TEST_PWD");
+
+ Клиент = Новый РаботаССерверомSSH(АдресСервера, ПользовательИмя, ПользовательПароль);
+
+ ИмяКаталога = "testFolder1";
+
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
+
+ Клиент.СоздатьКаталог(ИмяКаталога);
+
+ ТекстОшибки = СтрШаблон("Ошибка создания каталога ""%1"" на сервере ""%2"", для пользователя ""%3""",
+ ИмяКаталога,
+ АдресСервера,
+ ПользовательИмя);
+
+ Утверждения.ПроверитьИстину(Клиент.Существует(ИмяКаталога), ТекстОшибки);
+
+ Клиент.ОтправитьФайл(ТестовыйФайл.ПолноеИмя, ИмяКаталога);
+
+ ТекстОшибки = СтрШаблон("Ошибка отправки файла ""%1"" на сервер ""%2"", для пользователя ""%3""",
+ ТестовыйФайл.ПолноеИмя,
+ АдресСервера,
+ ПользовательИмя);
+
+ ПутьКФайлу = СтрШаблон("%1/%2", ИмяКаталога, ТестовыйФайл.Имя);
+
+ Утверждения.ПроверитьИстину(Клиент.Существует(ПутьКФайлу), ТекстОшибки);
+
+ ФС.ОбеспечитьКаталог(КаталогВременныхДанных);
+
+ Клиент.ПолучитьФайл(ПутьКФайлу, КаталогВременныхДанных);
+
+ ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"" с сервера ""%2"", для пользователя ""%3""",
+ ПутьКФайлу,
+ АдресСервера,
+ ПользовательИмя);
+
+ Утверждения.ПроверитьИстину(ТестовыйФайл.Существует(), ТекстОшибки);
- Сервис.Файлы().Удалить(ИмяКаталога);
+ Клиент.УдалитьФайл(ПутьКФайлу);
+
+ Клиент.УдалитьКаталог(ИмяКаталога);
+
+КонецПроцедуры // ТестДолжен_ПолучитьФайлСSFTP()
+
+&Тест
+Процедура ТестДолжен_ПроверитьКопированиеФайла() Экспорт
+
+ КаталогДляКопирования = ОбъединитьПути(КаталогВременныхДанных, "ForCopy");
+
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
+
+ НовыйПутьКТестовомуФайлу = ОбъединитьПути(КаталогДляКопирования, ТестовыйФайл.Имя);
+
+ РаботаСФайлами.КомандаСистемыКопироватьФайл(ПутьКТестовомуФайлу, КаталогДляКопирования);
+
+ ТекстОшибки = СтрШаблон("Ошибка копирования файла ""%1"" -> ""%2""", ПутьКТестовомуФайлу, НовыйПутьКТестовомуФайлу);
+
+ Утверждения.ПроверитьИстину(ФС.ФайлСуществует(НовыйПутьКТестовомуФайлу), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_ПроверитьКопированиеФайла()
+
+&Тест
+Процедура ТестДолжен_ПроверитьРазбиениеФайлаНаЧасти() Экспорт
+
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
+
+ ПутьКАрхиву = ОбъединитьПути(КаталогВременныхДанных, СтрШаблон("%1.7z.001", ТестовыйФайл.ИмяБезРасширения));
+
+ РаботаСФайлами.ЗапаковатьВАрхив(ПутьКТестовомуФайлу, , , "10m", 1);
+
+ ТекстОшибки = СтрШаблон("Ошибка упаковки файла ""%1"" в архив.", ПутьКТестовомуФайлу);
+
+ Утверждения.ПроверитьИстину(ФС.ФайлСуществует(ПутьКАрхиву), ТекстОшибки);
+
+ ПутьКСпискуФайлов = ОбъединитьПути(КаталогВременныхДанных, СтрШаблон("%1.split", ТестовыйФайл.ИмяБезРасширения));
+
+ ТекстОшибки = СтрШаблон("Ошибка создания списка файлов архива ""%1"" в архив.", ПутьКАрхиву);
+
+ Утверждения.ПроверитьИстину(ФС.ФайлСуществует(ПутьКСпискуФайлов), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_ПроверитьРазбиениеФайлаНаЧасти()
+
+&Тест
+Процедура ТестДолжен_УдалитьТестовыйФайл() Экспорт
+
+ УдалитьФайлы(ПутьКТестовомуФайлу);
+
+ ТекстОшибки = СтрШаблон("Ошибка удаления файла ""%1""", ПутьКТестовомуФайлу);
+
+ Утверждения.ПроверитьЛожь(ФС.ФайлСуществует(ПутьКТестовомуФайлу), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_УдалитьТестовыйФайл()
+
+&Тест
+Процедура ТестДолжен_ПроверитьСборкуФайлаИзЧастейИзАрхива() Экспорт
+
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
+
+ Если ТестовыйФайл.Существует() Тогда
+ УдалитьФайлы(ПутьКТестовомуФайлу);
+ КонецЕсли;
+
+ ПутьКАрхиву = ОбъединитьПути(КаталогВременныхДанных, СтрШаблон("%1.7z.001", ТестовыйФайл.ИмяБезРасширения));
+
+ РаботаСФайлами.РаспаковатьАрхив(ПутьКАрхиву);
+
+ ТекстОшибки = СтрШаблон("Ошибка сборки файла из частей ""%1""....", ПутьКАрхиву);
+
+ Утверждения.ПроверитьИстину(ФС.ФайлСуществует(ПутьКТестовомуФайлу), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_ПроверитьСборкуФайлаИзЧастейИзАрхива()
+
+&Тест
+Процедура ТестДолжен_ПроверитьСборкуФайлаИзЧастейИзСписка() Экспорт
+
+ ТестовыйФайл = Новый Файл(ПутьКТестовомуФайлу);
+
+ Если ТестовыйФайл.Существует() Тогда
+ УдалитьФайлы(ПутьКТестовомуФайлу);
+ КонецЕсли;
+
+ ПутьКСпискуФайлов = ОбъединитьПути(КаталогВременныхДанных, СтрШаблон("%1.split", ТестовыйФайл.ИмяБезРасширения));
+
+ РаботаСФайлами.РаспаковатьАрхив(ПутьКСпискуФайлов, Истина, Истина);
+
+ ТекстОшибки = СтрШаблон("Ошибка сборки файла из частей в списке ""%1""....", ПутьКСпискуФайлов);
+
+ Утверждения.ПроверитьИстину(ФС.ФайлСуществует(ПутьКТестовомуФайлу), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_ПроверитьСборкуФайлаИзЧастейИзСписка()
+
+&Тест
+Процедура ТестДолжен_УдалитьТестовыйКаталог() Экспорт
УдалитьФайлы(КаталогВременныхДанных);
-КонецПроцедуры // ТестДолжен_ПолучитьФайлИзNextCloud()
+ ТекстОшибки = СтрШаблон("Ошибка удаления каталога временных файлов ""%1""", КаталогВременныхДанных);
+
+ Утверждения.ПроверитьЛожь(ФС.ФайлСуществует(КаталогВременныхДанных), ТекстОшибки);
+
+КонецПроцедуры // ТестДолжен_УдалитьТестовыйКаталог()
+
+#КонецОбласти // Тесты
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура СоздатьСлучайныйФайл(ПутьКФайлу, РазмерФайла)
+
+ Если ФС.ФайлСуществует(ПутьКФайлу) Тогда
+ УдалитьФайлы(ПутьКФайлу);
+ КонецЕсли;
+
+ НачальноеЧисло = 1113;
+ ДлинаЧисла = 8;
+ ГраницаГСЧ = 4294836225;
+
+ ЧастейЗаписи = 100;
+ МаксПорцияЗаписи = 10485760;
+ ПорцияЗаписи = 1024;
+ Если Цел(РазмерФайла / ЧастейЗаписи) <= МаксПорцияЗаписи Тогда
+ ПорцияЗаписи = Цел(РазмерФайла / ЧастейЗаписи);
+ Иначе
+ ПорцияЗаписи = МаксПорцияЗаписи;
+ КонецЕсли;
+
+ ГСЧ = Новый ГенераторСлучайныхЧисел(НачальноеЧисло);
+
+ ЗаписьДанных = Новый ЗаписьДанных(ПутьКФайлу);
+
+ Записано = 0;
+
+ Пока Записано < РазмерФайла Цикл
+ Число = ГСЧ.СлучайноеЧисло(0, ГраницаГСЧ);
+
+ ЗаписьДанных.ЗаписатьЦелое64(Число);
+
+ Записано = Записано + ДлинаЧисла;
+ Если Записано % ПорцияЗаписи = 0 Тогда
+ ЗаписьДанных.СброситьБуферы();
+ КонецЕсли;
+ КонецЦикла;
+
+ ЗаписьДанных.Закрыть();
+
+КонецПроцедуры // СоздатьФайл()
+
+#КонецОбласти // СлужебныеПроцедурыИФункции
diff --git a/tests/fixtures/batch_test_sql.json b/tests/fixtures/batch_test_sql.json
index ac1a8d9..dc8ba6b 100644
--- a/tests/fixtures/batch_test_sql.json
+++ b/tests/fixtures/batch_test_sql.json
@@ -1,6 +1,6 @@
{
"params": {
- "sql-db": "cpdb_test_db_batch"
+ "db": "cpdb_test_db_batch"
},
"stages": {
"Создание": {
diff --git a/tests/fixtures/params_test_sql.json b/tests/fixtures/params_test_sql.json
index 5313507..db2b231 100644
--- a/tests/fixtures/params_test_sql.json
+++ b/tests/fixtures/params_test_sql.json
@@ -1,4 +1,4 @@
{
- "sql-db" : "cpdb_test_db_params",
+ "db" : "cpdb_test_db_params",
"db-recovery": "FULL"
}
\ No newline at end of file
diff --git a/tests/ib-tests.os b/tests/ib-tests.os
index 98d85b2..0b82a03 100644
--- a/tests/ib-tests.os
+++ b/tests/ib-tests.os
@@ -11,6 +11,7 @@
Процедура ПередЗапускомТеста() Экспорт
КаталогВременныхДанных = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "build", "tmpdata");
+ КаталогВременныхДанных = ФС.ПолныйПуть(КаталогВременныхДанных);
ПрефиксИмениИБ = "cpdb_test_db";
diff --git a/tests/sql-tests.os b/tests/sql-tests.os
index 01f8f0e..265c078 100644
--- a/tests/sql-tests.os
+++ b/tests/sql-tests.os
@@ -293,7 +293,7 @@
РаботаССУБД.УдалитьБазуДанных(ИмяБД);
- РаботаССУБД.УдалитьИсточник(ПутьКРезервнойКопии);
+ УдалитьФайлы(ПутьКРезервнойКопии);
УдалитьФайлы(КаталогВременныхДанных);
diff --git a/tools/.env b/tools/.env
new file mode 100644
index 0000000..53a7231
--- /dev/null
+++ b/tools/.env
@@ -0,0 +1,6 @@
+NC_TEST_ADDRESS=http://localhost:8080
+NC_TEST_ADMIN_NAME=admin
+NC_TEST_ADMIN_PWD=P@ssw0rd
+SFTP_TEST_ADDRESS=localhost:2222
+SFTP_TEST_USER=user
+SFTP_TEST_PWD=P@ssw0rd
diff --git a/tools/docker-compose.yml b/tools/docker-compose.yml
new file mode 100644
index 0000000..82c0829
--- /dev/null
+++ b/tools/docker-compose.yml
@@ -0,0 +1,31 @@
+version: '3.1'
+
+services:
+ nextcloud:
+ image: nextcloud
+ restart: always
+ container_name: test_nextcloud
+ environment:
+ SQLITE_DATABASE: nextcloud
+ NEXTCLOUD_ADMIN_USER: ${NC_TEST_ADMIN_NAME}
+ NEXTCLOUD_ADMIN_PASSWORD: ${NC_TEST_ADMIN_PWD}
+ ports:
+ - "8080:80"
+ networks:
+ - cpdb_test_network
+
+ sftp:
+ image: onescript-ssh/test-ssh
+ build:
+ context: "./openssh"
+ args:
+ SFTP_TEST_USER: ${SFTP_TEST_USER}
+ SFTP_TEST_PWD: ${SFTP_TEST_PWD}
+ container_name: test_ssh
+ ports:
+ - "2222:22"
+ networks:
+ - cpdb_test_network
+
+networks:
+ cpdb_test_network:
\ No newline at end of file
diff --git a/tools/nextcloud/.env b/tools/nextcloud/.env
deleted file mode 100644
index 4b4897f..0000000
--- a/tools/nextcloud/.env
+++ /dev/null
@@ -1,3 +0,0 @@
-NC_ADDRESS=http://localhost:8080
-NC_ADMIN_NAME=admin
-NC_ADMIN_PWD=P@$$w0rd
diff --git a/tools/nextcloud/checkenv.os b/tools/nextcloud/checkenv.os
new file mode 100644
index 0000000..cd78bfc
--- /dev/null
+++ b/tools/nextcloud/checkenv.os
@@ -0,0 +1,72 @@
+#Использовать 1commands
+#Использовать "../../src/core"
+
+Перем Лог; // логгер
+
+Функция СервисГотов()
+
+ СистемнаяИнформация = Новый СистемнаяИнформация;
+ ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
+
+ КодировкаВывода = КодировкаТекста.UTF8;
+ Если ЭтоWindows Тогда
+ КодировкаВывода = КодировкаТекста.OEM;
+ КонецЕсли;
+
+ Команда = Новый Команда();
+ Команда.УстановитьКоманду("curl");
+ Команда.УстановитьКодировкуВывода(КодировкаВывода);
+ Команда.ДобавитьПараметр("-I");
+ Команда.ДобавитьПараметр("-L");
+ Команда.ДобавитьПараметр("-s");
+ Команда.ДобавитьПараметр("http://localhost:8080");
+
+ Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
+ Команда.ПоказыватьВыводНемедленно(Ложь);
+
+ Лог.Информация("Проверка готовности сервиса NextCloud");
+
+ КодВозврата = Команда.Исполнить();
+
+ ВыводКоманды = Команда.ПолучитьВывод();
+
+ Если НЕ КодВозврата = 0 Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ РВ = Новый РегулярноеВыражение("HTTP\/1.1\s*(\d{3})");
+ Совпадения = РВ.НайтиСовпадения(ВыводКоманды);
+
+ Если Совпадения.Количество() = 0 Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Для Каждого ТекСовпадение Из Совпадения Цикл
+ Если СокрЛП(ТекСовпадение.Группы[1].Значение) = "200" Тогда
+ Возврат Истина;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Ложь;
+
+КонецФункции // СервисГотов()
+
+Процедура Инициализация() Экспорт
+
+ Лог = ПараметрыСистемы.Лог();
+
+КонецПроцедуры
+
+Инициализация();
+
+Счетчик = 0;
+Пока НЕ СервисГотов() И Счетчик < 20 Цикл
+ Приостановить(10000);
+ Счетчик = 0;
+КонецЦикла;
+
+Если НЕ СервисГотов() Тогда
+ ВызватьИсключение "Истекло время ожидания запуска сервиса NextCloud";
+КонецЕсли;
+
+Лог.Информация("Контейнер NextCloud запущен.");
diff --git a/tools/nextcloud/runtests.bat b/tools/nextcloud/runtests.bat
deleted file mode 100644
index d90ee96..0000000
--- a/tools/nextcloud/runtests.bat
+++ /dev/null
@@ -1,12 +0,0 @@
-@ECHO OFF
-
-FOR /f "usebackq tokens=*" %%a in (".env") DO (
- FOR /F "tokens=1,2 delims==" %%b IN ("%%a") DO (
- set "%%b=%%c"
- )
-)
-
-@oscript %~dp0startenv.os
-@oscript %~dp0..\..\tasks\test.os
-@oscript %~dp0stopenv.os
-@exit /b %ERRORLEVEL%
\ No newline at end of file
diff --git a/tools/nextcloud/startenv.bat b/tools/nextcloud/startenv.bat
deleted file mode 100644
index 6324784..0000000
--- a/tools/nextcloud/startenv.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@ECHO OFF
-
-FOR /f "usebackq tokens=*" %%a in (".env") DO (
- FOR /F "tokens=1,2 delims==" %%b IN ("%%a") DO (
- set "%%b=%%c"
- )
-)
-
-@oscript %~dp0startenv.os
diff --git a/tools/nextcloud/startenv.os b/tools/nextcloud/startenv.os
deleted file mode 100644
index ee25679..0000000
--- a/tools/nextcloud/startenv.os
+++ /dev/null
@@ -1,191 +0,0 @@
-#Использовать 1commands
-#Использовать "../../src/core"
-#Использовать "../../src/cmd"
-
-Перем Лог; // логгер
-
-Процедура ЗапуститьКонтейнер()
-
- Команда = Новый Команда();
- Команда.УстановитьКоманду("docker");
- Команда.УстановитьКодировкуВывода(КодировкаВывода());
- Команда.ДобавитьПараметр("run");
- Команда.ДобавитьПараметр("--name nextcloud");
- Команда.ДобавитьПараметр("-d");
- Команда.ДобавитьПараметр("-p 8080:80");
- Команда.ДобавитьПараметр("nextcloud");
-
- Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
- Команда.ПоказыватьВыводНемедленно(Ложь);
-
- Лог.Информация("Запуск контейнера NextCloud");
-
- КодВозврата = Команда.Исполнить();
-
- ВыводКоманды = Команда.ПолучитьВывод();
-
- Если НЕ КодВозврата = 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка запуска контейнера, код возврата %1:%2%3",
- КодВозврата,
- Символы.ПС,
- ВыводКоманды);
- КонецЕсли;
-
-КонецПроцедуры // ЗапуститьКонтейнер()
-
-Процедура ИнициализироватьСервис()
-
- АдминИмя = ПолучитьПеременнуюСреды("NC_ADMIN_NAME");
- АдминПароль = ПолучитьПеременнуюСреды("NC_ADMIN_PWD");
-
- Команда = Новый Команда();
- Команда.УстановитьКоманду("docker");
- Команда.УстановитьКодировкуВывода(КодировкаВывода());
- Команда.ДобавитьПараметр("exec");
- Команда.ДобавитьПараметр("--user www-data");
- Команда.ДобавитьПараметр("nextcloud");
- Команда.ДобавитьПараметр("php occ maintenance:install");
- Команда.ДобавитьПараметр(СтрШаблон("--admin-user %1", АдминИмя));
- Команда.ДобавитьПараметр(СтрШаблон("--admin-pass %1", АдминПароль));
-
- Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
- Команда.ПоказыватьВыводНемедленно(Ложь);
-
- Лог.Информация("Инициализация сервиса NextCloud");
-
- КодВозврата = Команда.Исполнить();
-
- Если НЕ КодВозврата = 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка инициализации сервиса NextCloud, код возврата %1:%2%3",
- КодВозврата,
- Символы.ПС,
- Команда.ПолучитьВывод());
- КонецЕсли;
-
-КонецПроцедуры // ИнициализироватьСервис()
-
-Процедура ПодготовитьОкружение()
-
- Если КонтейнерЗапущен("nextcloud") Тогда
- Лог.Информация("Контейнер NextCloud уже запущен");
- Возврат;
- Иначе
- ЗапуститьКонтейнер();
- КонецЕсли;
-
- Счетчик = 0;
- КоличествоПопыток = 20;
- Пока НЕ СервисГотов() И Счетчик < КоличествоПопыток Цикл
- Приостановить(10000);
- Счетчик = 0;
- КонецЦикла;
-
- Если НЕ СервисГотов() Тогда
- ВызватьИсключение "Истекло время ожидания запуска сервиса NextCloud";
- КонецЕсли;
-
- Лог.Информация("Контейнер NextCloud запущен.");
-
- ИнициализироватьСервис();
-
- Лог.Информация("Сервис NextCloud инициализирован");
-
-КонецПроцедуры // ПодготовитьОкружение()
-
-Функция СервисГотов()
-
- Команда = Новый Команда();
- Команда.УстановитьКоманду("curl");
- Команда.УстановитьКодировкуВывода(КодировкаВывода());
- Команда.ДобавитьПараметр("-I");
- Команда.ДобавитьПараметр("-L");
- Команда.ДобавитьПараметр("-s");
- Команда.ДобавитьПараметр("http://localhost:8080");
-
- Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
- Команда.ПоказыватьВыводНемедленно(Ложь);
-
- Лог.Информация("Проверка готовности сервиса NextCloud");
-
- КодВозврата = Команда.Исполнить();
-
- ВыводКоманды = Команда.ПолучитьВывод();
-
- Если НЕ КодВозврата = 0 Тогда
- Возврат Ложь;
- КонецЕсли;
-
- РВ = Новый РегулярноеВыражение("HTTP\/1.1\s*(\d{3})");
- Совпадения = РВ.НайтиСовпадения(ВыводКоманды);
-
- Если Совпадения.Количество() = 0 Тогда
- Возврат Ложь;
- КонецЕсли;
-
- Для Каждого ТекСовпадение Из Совпадения Цикл
- Если СокрЛП(ТекСовпадение.Группы[1].Значение) = "200" Тогда
- Возврат Истина;
- КонецЕсли;
- КонецЦикла;
-
- Возврат Ложь;
-
-КонецФункции // СервисГотов()
-
-Функция КонтейнерЗапущен(ИмяКонтейнера)
-
- Команда = Новый Команда();
- Команда.УстановитьКоманду("docker");
- Команда.УстановитьКодировкуВывода(КодировкаВывода());
- Команда.ДобавитьПараметр("ps");
- Команда.ДобавитьПараметр("--format ""table {{.Names}}""");
-
- Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
- Команда.ПоказыватьВыводНемедленно(Ложь);
-
- Лог.Информация("Поиск запущенного контейнера ""%1""", ИмяКонтейнера);
-
- КодВозврата = Команда.Исполнить();
-
- ВыводКоманды = Команда.ПолучитьВывод();
-
- Если НЕ КодВозврата = 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка поиска запущенного контейнера ""%1"", код возврата %2:%3%4",
- ИмяКонтейнера,
- КодВозврата,
- Символы.ПС,
- Команда.ПолучитьВывод());
- КонецЕсли;
-
- СписокКонтейнеров = СтрРазделить(ВыводКоманды, Символы.ПС);
-
- Для й = 1 По СписокКонтейнеров.ВГраница() Цикл
- СписокКонтейнеров[й] = СокрЛП(СписокКонтейнеров[й]);
- КонецЦикла;
-
- Возврат НЕ (СписокКонтейнеров.Найти(ИмяКонтейнера) = Неопределено);
-
-КонецФункции // КонтейнерЗапущен()
-
-Функция КодировкаВывода()
-
- СистемнаяИнформация = Новый СистемнаяИнформация;
- ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
-
- КодировкаВывода = КодировкаТекста.UTF8;
- Если ЭтоWindows Тогда
- КодировкаВывода = КодировкаТекста.OEM;
- КонецЕсли;
-
- Возврат КодировкаВывода;
-
-КонецФункции // КодировкаВывода()
-
-Процедура Инициализация() Экспорт
-
- Лог = Служебный.Лог();
-
-КонецПроцедуры
-
-Инициализация();
-ПодготовитьОкружение();
diff --git a/tools/nextcloud/stopenv.bat b/tools/nextcloud/stopenv.bat
deleted file mode 100644
index 65bee04..0000000
--- a/tools/nextcloud/stopenv.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-@ECHO OFF
-
-@oscript %~dp0stopenv.os
-@exit /b %ERRORLEVEL%
\ No newline at end of file
diff --git a/tools/nextcloud/stopenv.os b/tools/nextcloud/stopenv.os
deleted file mode 100644
index 70ca4fa..0000000
--- a/tools/nextcloud/stopenv.os
+++ /dev/null
@@ -1,76 +0,0 @@
-#Использовать 1commands
-#Использовать "../../src/core"
-#Использовать "../../src/cmd"
-
-Перем Лог; // логгер
-
-Процедура СвернутьОкружение()
-
- Команда = Новый Команда();
- Команда.УстановитьКоманду("docker");
- Команда.УстановитьКодировкуВывода(КодировкаВывода());
- Команда.ДобавитьПараметр("stop");
- Команда.ДобавитьПараметр("nextcloud");
-
- Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
- Команда.ПоказыватьВыводНемедленно(Ложь);
-
- Лог.Информация("Остановка контейнера NextCloud");
-
- КодВозврата = Команда.Исполнить();
-
- Если НЕ КодВозврата = 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка остановки контейнера, код возврата %1:%2%3",
- КодВозврата,
- Символы.ПС,
- Команда.ПолучитьВывод());
- КонецЕсли;
-
- Лог.Информация("Контейнер NextCloud остановлен");
-
- Команда = Новый Команда();
- Команда.УстановитьКоманду("docker");
- Команда.УстановитьКодировкуВывода(КодировкаВывода());
- Команда.ДобавитьПараметр("rm");
- Команда.ДобавитьПараметр("nextcloud");
-
- Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь);
- Команда.ПоказыватьВыводНемедленно(Ложь);
-
- Лог.Информация("Удаление контейнера NextCloud");
-
- КодВозврата = Команда.Исполнить();
-
- Если НЕ КодВозврата = 0 Тогда
- ВызватьИсключение СтрШаблон("Ошибка удаления контейнера, код возврата %1:%2%3",
- КодВозврата,
- Символы.ПС,
- Команда.ПолучитьВывод());
- КонецЕсли;
-
- Лог.Информация("Контейнер NextCloud удален");
-
-КонецПроцедуры // СвернутьОкружение()
-
-Функция КодировкаВывода()
-
- СистемнаяИнформация = Новый СистемнаяИнформация;
- ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
-
- КодировкаВывода = КодировкаТекста.UTF8;
- Если ЭтоWindows Тогда
- КодировкаВывода = КодировкаТекста.OEM;
- КонецЕсли;
-
- Возврат КодировкаВывода;
-
-КонецФункции // КодировкаВывода()
-
-Процедура Инициализация() Экспорт
-
- Лог = Служебный.Лог();
-
-КонецПроцедуры // Инициализация()
-
-Инициализация();
-СвернутьОкружение();
\ No newline at end of file
diff --git a/tools/openssh/Dockerfile b/tools/openssh/Dockerfile
new file mode 100644
index 0000000..3c30e09
--- /dev/null
+++ b/tools/openssh/Dockerfile
@@ -0,0 +1,26 @@
+FROM debian:bullseye
+
+ARG SFTP_TEST_USER=user
+ARG SFTP_TEST_PWD=P@ssw0rd
+ENV SFTP_TEST_USER=${SFTP_TEST_USER}
+ENV SFTP_TEST_PWD=${SFTP_TEST_PWD}
+
+COPY files/sshd_config /etc/ssh/sshd_config
+COPY files/prepare-ssh.sh /tmp/
+COPY files/sftp-key.pub /tmp/
+
+# Steps done in one RUN layer:
+# - Install packages
+# - OpenSSH needs /var/run/sshd to run
+# - Remove generic host keys, entrypoint generates unique keys
+RUN apt-get update && \
+ apt-get -y install openssh-server && \
+ rm -rf /var/lib/apt/lists/* && \
+ mkdir -p /var/run/sshd && \
+ chmod +x /tmp/prepare-ssh.sh && \
+ /tmp/prepare-ssh.sh
+
+EXPOSE 22
+
+ENTRYPOINT ["/usr/sbin/sshd","-D","-e"]
+
diff --git a/tools/openssh/files/prepare-ssh.sh b/tools/openssh/files/prepare-ssh.sh
new file mode 100644
index 0000000..6826577
--- /dev/null
+++ b/tools/openssh/files/prepare-ssh.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# Create user if needed
+getent passwd ${SFTP_TEST_USER} > /dev/null
+if [ $? != 0 ]; then
+ useradd -m -s /bin/bash ${SFTP_TEST_USER}
+ passwd ${SFTP_TEST_USER} <> /home/${SFTP_TEST_USER}/.ssh/authorized_keys
+chmod -R 700 /home/${SFTP_TEST_USER}/.ssh && chmod -R 600 /home/${SFTP_TEST_USER}/.ssh/*
+chown -R ${SFTP_TEST_USER} /home/${SFTP_TEST_USER}/.ssh
diff --git a/tools/openssh/files/sftp-key b/tools/openssh/files/sftp-key
new file mode 100644
index 0000000..fd567ee
--- /dev/null
+++ b/tools/openssh/files/sftp-key
@@ -0,0 +1,7 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
+QyNTUxOQAAACDx2PBgIk6XT1cewWdeJI7mspOOVuJqj2ZzCvqBwQMMfwAAAJDwkc868JHP
+OgAAAAtzc2gtZWQyNTUxOQAAACDx2PBgIk6XT1cewWdeJI7mspOOVuJqj2ZzCvqBwQMMfw
+AAAECq8psmXPysf7Nyz7P0jEFv4sDVnXolDXNu8UJa10VUcfHY8GAiTpdPVx7BZ14kjuay
+k45W4mqPZnMK+oHBAwx/AAAADXJvb3RAc3BvcnQtMDI=
+-----END OPENSSH PRIVATE KEY-----
diff --git a/tools/openssh/files/sftp-key.ppk b/tools/openssh/files/sftp-key.ppk
new file mode 100644
index 0000000..b205dd2
--- /dev/null
+++ b/tools/openssh/files/sftp-key.ppk
@@ -0,0 +1,9 @@
+PuTTY-User-Key-File-3: ssh-ed25519
+Encryption: none
+Comment: root@sport-02
+Public-Lines: 2
+AAAAC3NzaC1lZDI1NTE5AAAAIPHY8GAiTpdPVx7BZ14kjuayk45W4mqPZnMK+oHB
+Awx/
+Private-Lines: 1
+AAAAIKrymyZc/Kx/s3LPs/SMQW/iwNWdeiUNc27xQlrXRVRx
+Private-MAC: e9b48a294d980654aa59204057f28c2f1e991629bcfaa3e84ed6061ebb0ecf74
diff --git a/tools/openssh/files/sftp-key.pub b/tools/openssh/files/sftp-key.pub
new file mode 100644
index 0000000..75362f1
--- /dev/null
+++ b/tools/openssh/files/sftp-key.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPHY8GAiTpdPVx7BZ14kjuayk45W4mqPZnMK+oHBAwx/ root@sport-02
diff --git a/tools/openssh/files/sshd_config b/tools/openssh/files/sshd_config
new file mode 100644
index 0000000..7644695
--- /dev/null
+++ b/tools/openssh/files/sshd_config
@@ -0,0 +1,20 @@
+Protocol 2
+UseDNS no
+
+HostKey /etc/ssh/id_key
+
+# Limited access
+PubkeyAuthentication yes
+PermitRootLogin no
+X11Forwarding no
+AllowTcpForwarding yes
+#PermitRootLogin without-password
+
+Subsystem sftp /usr/lib/openssh/sftp-server
+# Force sftp and chroot jail
+#Subsystem sftp internal-sftp
+#ForceCommand internal-sftp
+#ChrootDirectory /upload/
+
+# Enable this for more logs
+LogLevel VERBOSE
diff --git a/tools/runtests.bat b/tools/runtests.bat
new file mode 100644
index 0000000..68ea11f
--- /dev/null
+++ b/tools/runtests.bat
@@ -0,0 +1,17 @@
+@ECHO OFF
+
+FOR /f "usebackq tokens=*" %%a in ("%~dp0.env") DO (
+ FOR /F "tokens=1,2 delims==" %%b IN ("%%a") DO (
+ set "%%b=%%c"
+ )
+)
+
+@docker-compose --file %~dp0docker-compose.yml up --build -d
+@oscript %~dp0nextcloud\checkenv.os
+IF %ERRORLEVEL% NEQ 0 GOTO END
+
+@oscript %~dp0..\tasks\test.os
+
+:END
+@docker-compose --file %~dp0docker-compose.yml down
+@exit /b %ERRORLEVEL%
\ No newline at end of file
diff --git a/tools/startenv.bat b/tools/startenv.bat
new file mode 100644
index 0000000..5868cb7
--- /dev/null
+++ b/tools/startenv.bat
@@ -0,0 +1,11 @@
+@ECHO OFF
+
+FOR /f "usebackq tokens=*" %%a in ("%~dp0.env") DO (
+ FOR /F "tokens=1,2 delims==" %%b IN ("%%a") DO (
+ set "%%b=%%c"
+ )
+)
+
+@docker-compose --file %~dp0docker-compose.yml up --build -d
+@oscript %~dp0nextcloud\checkenv.os
+@exit /b %ERRORLEVEL%
\ No newline at end of file
diff --git a/tools/stopenv.bat b/tools/stopenv.bat
new file mode 100644
index 0000000..4d97694
--- /dev/null
+++ b/tools/stopenv.bat
@@ -0,0 +1,4 @@
+@ECHO OFF
+
+@docker-compose --file %~dp0docker-compose.yml down
+@exit /b %ERRORLEVEL%
\ No newline at end of file