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