1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-17 21:08:03 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot) 2024-11-14 17:27:44 +03:00
parent 0a3980c4d5
commit 4b1a85a89a
52 changed files with 6675 additions and 5601 deletions

View File

@ -1619,6 +1619,10 @@ def test_s3(){
powershell encoding: 'UTF-8', script:'./oint.exe s3 SendRequestWithoutBody --method "test" --data "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 SendRequestWithBody --method "test" --data "test" --body "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 CreateBucket --name "test" --data "test" --dir "test" --headers "test" --debug --test '
}
@ -1631,6 +1635,14 @@ def test_s3(){
powershell encoding: 'UTF-8', script:'./oint.exe s3 CheckBucketAvailability --name "test" --data "test" --dir "test" --account "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 PutBucketEncryption --name "test" --data "test" --conf "test" --dir "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 GetBucketEncryption --name "test" --data "test" --dir "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 GetBucketsList --data "test" --prefix "test" --region "test" --ctoken "test" --headers "test" --debug --test '
}

View File

@ -1619,6 +1619,10 @@ def test_s3(){
powershell encoding: 'UTF-8', script:'./oint.exe s3 ОтправитьЗапросБезТела --method "test" --data "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 ОтправитьЗапросСТелом --method "test" --data "test" --body "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 СоздатьБакет --name "test" --data "test" --dir "test" --headers "test" --debug --test '
}
@ -1631,6 +1635,14 @@ def test_s3(){
powershell encoding: 'UTF-8', script:'./oint.exe s3 ПроверитьДоступностьБакета --name "test" --data "test" --dir "test" --account "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 УстановитьШифрованиеБакета --name "test" --data "test" --conf "test" --dir "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 ПолучитьШифрованиеБакета --name "test" --data "test" --dir "test" --headers "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 ПолучитьСписокБакетов --data "test" --prefix "test" --region "test" --ctoken "test" --headers "test" --debug --test '
}

View File

@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}

View File

@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}

View File

@ -1,10 +1,10 @@
 URL = "storage-155.s3hoster.by";
 URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);

View File

@ -7,12 +7,12 @@
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData);
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False);

View File

@ -7,12 +7,12 @@
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData);
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False);

View File

@ -0,0 +1,10 @@
 URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
Result = OPI_S3.GetBucketEncryption(Name, BasicData, False);

View File

@ -0,0 +1,18 @@
 URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
XmlConfig = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
| </ApplyServerSideEncryptionByDefault>
| </Rule>
|</ServerSideEncryptionConfiguration>";
Result = OPI_S3.PutBucketEncryption(Name, BasicData, XmlConfig, False);

View File

@ -32,13 +32,13 @@ Method at AWS documentation: [HeadBucket](https://docs.aws.amazon.com/AmazonS3/l
```bsl title="1C:Enterprise/OneScript code example"
URL = "storage-155.s3hoster.by";
URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);

View File

@ -40,13 +40,13 @@ Method at AWS documentation: [CreateBucket](https://docs.aws.amazon.com/AmazonS3
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData);
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False);
```

View File

@ -40,13 +40,13 @@ Method at AWS documentation: [DeleteBucket](https://docs.aws.amazon.com/AmazonS3
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData);
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False);
```

View File

@ -0,0 +1,49 @@
---
sidebar_position: 5
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Get bucket encryption
Gets the previously set bucket encryption configuration
`Function GetBucketEncryption(Val Name, Val BasicData, Val Directory = True, Val Headers = Undefined) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Name | --name | String | &#x2714; | Bucket name |
| BasicData | --data | Structure of KeyAndValue | &#x2714; | Basic request data. See GetBasicDataStructure |
| Directory | --dir | Boolean | &#x2716; | True > Directory Bucket, False > General Purpose Bucket |
| Headers | --headers | Map Of KeyAndValue | &#x2716; | Additional request headers, if necessary |
Returns: Map Of KeyAndValue - serialized JSON response from storage
<br/>
:::tip
Method at AWS documentation: [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
:::
<br/>
```bsl title="1C:Enterprise/OneScript code example"
URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
Result = OPI_S3.GetBucketEncryption(Name, BasicData, False);
```

View File

@ -1,5 +1,5 @@
---
sidebar_position: 4
sidebar_position: 6
---
import Tabs from '@theme/Tabs';

View File

@ -0,0 +1,58 @@
---
sidebar_position: 4
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Put bucket encryption
Sets bucket encryption by XML configuration
`Function PutBucketEncryption(Val Name, Val BasicData, Val XmlConfig, Val Directory = True, Val Headers = Undefined) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Name | --name | String | &#x2714; | Bucket name |
| BasicData | --data | Structure of KeyAndValue | &#x2714; | Basic request data. See GetBasicDataStructure |
| XmlConfig | --conf | String | &#x2714; | XML string or file of encryption configuration |
| Directory | --dir | Boolean | &#x2716; | True > Directory Bucket, False > General Purpose Bucket |
| Headers | --headers | Map Of KeyAndValue | &#x2716; | Additional request headers, if necessary |
Returns: Map Of KeyAndValue - serialized JSON response from storage
<br/>
:::tip
Method at AWS documentation: [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
:::
<br/>
```bsl title="1C:Enterprise/OneScript code example"
URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
XmlConfig = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
| </ApplyServerSideEncryptionByDefault>
| </Rule>
|</ServerSideEncryptionConfiguration>";
Result = OPI_S3.PutBucketEncryption(Name, BasicData, XmlConfig, False);
```

View File

@ -0,0 +1,40 @@
---
sidebar_position: 3
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Send request with body
Send http request with body
`Function SendRequestWithBody(Val Method, Val BasicData, Val Body, Val Headers = Undefined) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Method | --method | String | &#x2714; | HTTP method |
| BasicData | --data | Structure of KeyAndValue | &#x2714; | Basic request data (with full URL). See GetBasicDataStructure |
| Body | --body | String, BinaryData | &#x2714; | Binary data or file of request body data |
| Headers | --headers | Map Of KeyAndValue | &#x2716; | Additional request headers, if necessary |
Returns: Map Of KeyAndValue - serialized JSON response from storage
<br/>
:::tip
Parameters with Binary data type can also accept file paths on disk and URLs
:::
<br/>
```bsl title="1C:Enterprise/OneScript code example"
```

View File

@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}

View File

@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}

View File

@ -0,0 +1,10 @@
 URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2";
Результат = OPI_S3.ПолучитьШифрованиеБакета(Имя, ОсновныеДанные, Ложь);

View File

@ -1,10 +1,10 @@
 URL = "storage-155.s3hoster.by";
 URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "opi-dirbucket1";
Наименование = "opi-dirbucket3";
Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина);

View File

@ -7,12 +7,12 @@
// Directory bucket
Наименование = "opi-dirbucket1";
Наименование = "opi-dirbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные);
// General purpose bucket
Наименование = "opi-gpbucket1";
Наименование = "opi-gpbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные, Ложь);

View File

@ -7,12 +7,12 @@
// Directory bucket
Имя = "opi-dirbucket1";
Имя = "opi-dirbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные);
// General purpose bucket
Имя = "opi-gpbucket1";
Имя = "opi-gpbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные, Ложь);

View File

@ -0,0 +1,18 @@
 URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2";
XMLКонфигурация = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
| </ApplyServerSideEncryptionByDefault>
| </Rule>
|</ServerSideEncryptionConfiguration>";
Результат = OPI_S3.УстановитьШифрованиеБакета(Имя, ОсновныеДанные, XMLКонфигурация, Ложь);

View File

@ -32,13 +32,13 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "storage-155.s3hoster.by";
URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "opi-dirbucket1";
Наименование = "opi-dirbucket3";
Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина);

View File

@ -40,13 +40,13 @@ import TabItem from '@theme/TabItem';
// Directory bucket
Наименование = "opi-dirbucket1";
Наименование = "opi-dirbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные);
// General purpose bucket
Наименование = "opi-gpbucket1";
Наименование = "opi-gpbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные, Ложь);
```

View File

@ -40,13 +40,13 @@ import TabItem from '@theme/TabItem';
// Directory bucket
Имя = "opi-dirbucket1";
Имя = "opi-dirbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные);
// General purpose bucket
Имя = "opi-gpbucket1";
Имя = "opi-gpbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные, Ложь);
```

View File

@ -0,0 +1,49 @@
---
sidebar_position: 5
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Получить шифрование бакета
Получает установленную ранее конфигурацию шифрования бакета
`Функция ПолучитьШифрованиеБакета(Знач Наименование, Знач ОсновныеДанные, Знач Каталог = Истина, Знач Заголовки = Неопределено) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Наименование | --name | Строка | &#x2714; | Наименование бакета |
| ОсновныеДанные | --data | Структура Из КлючИЗначение | &#x2714; | Основные данные запроса. См. ПолучитьСтруктуруДанных |
| Каталог | --dir | Булево | &#x2716; | Истина > Directory Bucket, Ложь > General Purpose Bucket |
| Заголовки | --headers | Соответствие Из КлючИЗначение | &#x2716; | Дополнительные заголовки запроса, если необходимо |
Возвращаемое значение: Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
<br/>
:::tip
Метод в документации AWS: [GetBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
:::
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2";
Результат = OPI_S3.ПолучитьШифрованиеБакета(Имя, ОсновныеДанные, Ложь);
```

View File

@ -1,5 +1,5 @@
---
sidebar_position: 4
sidebar_position: 6
---
import Tabs from '@theme/Tabs';

View File

@ -0,0 +1,58 @@
---
sidebar_position: 4
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Установить шифрование бакета
Устанавлиает шифрование бакета по XML конфигурации
`Функция УстановитьШифрованиеБакета(Знач Наименование, Знач ОсновныеДанные, Знач XMLКонфигурация, Знач Каталог = Истина, Знач Заголовки = Неопределено) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Наименование | --name | Строка | &#x2714; | Наименование бакета |
| ОсновныеДанные | --data | Структура Из КлючИЗначение | &#x2714; | Основные данные запроса. См. ПолучитьСтруктуруДанных |
| XMLКонфигурация | --conf | Строка | &#x2714; | XML строка или файл конфигурации шифрования |
| Каталог | --dir | Булево | &#x2716; | Истина > Directory Bucket, Ложь > General Purpose Bucket |
| Заголовки | --headers | Соответствие Из КлючИЗначение | &#x2716; | Дополнительные заголовки запроса, если необходимо |
Возвращаемое значение: Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
<br/>
:::tip
Метод в документации AWS: [PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
:::
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2";
XMLКонфигурация = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
| </ApplyServerSideEncryptionByDefault>
| </Rule>
|</ServerSideEncryptionConfiguration>";
Результат = OPI_S3.УстановитьШифрованиеБакета(Имя, ОсновныеДанные, XMLКонфигурация, Ложь);
```

View File

@ -0,0 +1,40 @@
---
sidebar_position: 3
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Отправить запрос с телом
Отправляет http запрос с телом
`Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Метод | --method | Строка | &#x2714; | HTTP метод |
| ОсновныеДанные | --data | Структура Из КлючИЗначение | &#x2714; | Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных |
| Тело | --body | Строка, ДвоичныеДанные | &#x2714; | Двоичное тело запроса или путь к файлу |
| Заголовки | --headers | Соответствие Из КлючИЗначение | &#x2716; | Дополнительные заголовки запроса, если необходимо |
Возвращаемое значение: Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
<br/>
:::tip
Параметры с типом данных Двоичные данные могут принимать также пути к файлам на диске и URL
:::
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
```

File diff suppressed because it is too large Load Diff

View File

@ -82,26 +82,25 @@ EndFunction
// Map Of KeyAndValue - serialized JSON response from storage
Function SendRequestWithoutBody(Val Method, Val BasicData, Val Headers = Undefined) Export
CheckBasicData(BasicData);
Response = SendRequest(Method, BasicData, , Headers);
Return Response;
URL = BasicData["URL"];
EndFunction
URLStructure = OPI_Tools.SplitURL(URL);
Server = URLStructure["Server"];
Address = URLStructure["Address"];
Safe = URLStructure["Safe"];
Request = OPI_Tools.CreateRequest(Address);
Connection = OPI_Tools.CreateConnection(Server, Safe);
AddAdditionalHeaders(Request, Headers);
AuthorizationHeader = CreateAuthorizationHeader(BasicData, Request, Connection, Method);
Request.Headers.Insert("Authorization", AuthorizationHeader);
Response = OPI_Tools.ExecuteRequest(Request, Connection, Method, , True);
Response = FormResponse(Response);
// Send request with body
// Send http request with body
//
// Parameters:
// Method - String - HTTP method - method
// BasicData - Structure of KeyAndValue - Basic request data (with full URL). See GetBasicDataStructure - data
// Body - String, BinaryData - Binary data or file of request body data - body
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - serialized JSON response from storage
Function SendRequestWithBody(Val Method, Val BasicData, Val Body, Val Headers = Undefined) Export
Response = SendRequest(Method, BasicData, Body, Headers);
Return Response;
EndFunction
@ -186,6 +185,73 @@ Function CheckBucketAvailability(Val Name
EndFunction
// Put bucket encryption
// Sets bucket encryption by XML configuration
//
// Note
// Method at AWS documentation: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
//
// Parameters:
// Name - String - Bucket name - name
// BasicData - Structure of KeyAndValue - Basic request data. See GetBasicDataStructure - data
// XmlConfig - String - XML string or file of encryption configuration - conf
// Directory - Boolean - True > Directory Bucket, False > General Purpose Bucket - dir
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - serialized JSON response from storage
Function PutBucketEncryption(Val Name
, Val BasicData
, Val XmlConfig
, Val Directory = True
, Val Headers = Undefined) Export
OPI_TypeConversion.GetLine(XmlConfig, True);
XmlConfig = ПолучитьДвоичныеДанныеИзСтроки(XmlConfig);
URL = GetServiceURL(BasicData);
URL = FormBucketURL(URL, Name, Directory);
URL = URL + "?encryption";
BasicData.Insert("URL", URL);
Response = SendRequestWithBody("PUT", BasicData, XmlConfig, Headers);
Return Response;
EndFunction
// Get bucket encryption
// Gets the previously set bucket encryption configuration
//
// Note
// Method at AWS documentation: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
//
// Parameters:
// Name - String - Bucket name - name
// BasicData - Structure of KeyAndValue - Basic request data. See GetBasicDataStructure - data
// Directory - Boolean - True > Directory Bucket, False > General Purpose Bucket - dir
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - serialized JSON response from storage
Function GetBucketEncryption(Val Name
, Val BasicData
, Val Directory = True
, Val Headers = Undefined) Export
URL = GetServiceURL(BasicData);
URL = FormBucketURL(URL, Name, Directory);
URL = URL + "?encryption";
BasicData.Insert("URL", URL);
Response = SendRequestWithoutBody("GET", BasicData, Headers);
Return Response;
EndFunction
// Get buckets list
// Gets a list of buckets. It is possible to use filters if they are provided by your service
//
@ -370,26 +436,23 @@ Function GetURIString(Val Request)
EndFunction
Function GetParamsString(Val Request)
Function GetParamsString(Request)
URI = Request.ResourceAddress;
ParamsStart = StrFind(URI, "?");
If ParamsStart = 0 Then
If ParamsStart = 0 Then
ParameterString = "";
Else
URILength = StrLen(URI);
ParameterString = Right(URI, URILength - ParamsStart);
ProcessRequestParametersString(ParameterString);
EndIf;
ParameterArray = StrSplit(ParameterString, "&");
ParamsList = New ValueList();
ParamsList.LoadValues(ParameterArray);
ParamsList.SortByValue();
ParameterString = StrConcat(ParamsList.UnloadValues(), "&");
Return ParameterString;
EndFunction
@ -482,28 +545,69 @@ Function FormAuthorisationHeader(Val AccessKey, Val Scope, Val Signature, Val He
EndFunction
Procedure ProcessRequestParametersString(ParameterString)
ParameterArray = StrSplit(ParameterString, "&");
ParamsList = New ValueList();
ParamsList.LoadValues(ParameterArray);
ParamsList.SortByValue();
ParameterArray = ParamsList.UnloadValues();
FinalParamsArray = New Array;
For N = 0 To ParameterArray.UBound() Do
QueryParameter = ParameterArray[N];
If StrFind(QueryParameter, "=") = 0 Then
ParameterArray[N] = QueryParameter + "=";
EndIf;
EndDo;
ParameterString = StrConcat(ParameterArray, "&");
EndProcedure
#EndRegion
#Region Miscellaneous
Function SendRequest(Val Method, Val BasicData, Val Body = Undefined, Val Headers = Undefined)
CheckBasicData(BasicData);
URL = BasicData["URL"];
URLStructure = OPI_Tools.SplitURL(URL);
Server = URLStructure["Server"];
Address = URLStructure["Address"];
Safe = URLStructure["Safe"];
Request = OPI_Tools.CreateRequest(Address);
Connection = OPI_Tools.CreateConnection(Server, Safe);
If ValueIsFilled(Body) Then
SetRequestBody(Request, Body);
EndIf;
AddAdditionalHeaders(Request, Headers);
AuthorizationHeader = CreateAuthorizationHeader(BasicData, Request, Connection, Method);
Request.Headers.Insert("Authorization", AuthorizationHeader);
Response = OPI_Tools.ExecuteRequest(Request, Connection, Method, , True);
Response = FormResponse(Response);
Return Response;
EndFunction
Function BucketManagment(Val Name, Val BasicData, Val Directory, Val Method, Val Headers)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
URL = GetServiceURL(BasicData);
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
EndIf;
URL = FormBucketURL(URL, Name, Directory);
BasicData.Insert("URL", URL);
@ -519,22 +623,25 @@ Function FormResponse(Val Response, Val ExpectedBinary = False)
If Not ExpectedBinary Or Status > 299 Then
ResponseData = New Map;
BodyData = New Map;
ResponseBody = Response.GetBodyAsString();
ResponseBody = TrimAll(ResponseBody);
If ValueIsFilled(ResponseBody) Then
Try
ResponseData = OPI_Tools.ProcessXML(ResponseBody);
BodyData = OPI_Tools.ProcessXML(ResponseBody);
Except
ResponseData = New Structure("notXMLMessage", ResponseBody);
BodyData.Insert("notValidXMLMessage", ResponseBody);
EndTry;
Else
ResponseData = New Structure;
EndIf;
ResponseData = New Structure("status,response", Status, ResponseData);
ResponseData = New Map;
ResponseData.Insert("status" , Status);
ResponseData.Insert("response", BodyData);
Else
ResponseData = Response.ПолучитьТелоКакДвоичныеДанные();
@ -596,6 +703,38 @@ Procedure AddAdditionalHeaders(Receiver, Val Headers)
EndProcedure
Procedure SetRequestBody(Request, Body)
OPI_TypeConversion.GetBinaryData(Body);
Request.SetBodyFromBinary(Body);
EndProcedure
Function FormBucketURL(Val URL, Val Name, Val Directory)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
EndIf;
If Not StrEndsWith(URL, "/") Then
URL = URL + "/";
EndIf;
Return URL;
EndFunction
#EndRegion
#EndRegion

View File

@ -2113,6 +2113,8 @@ Procedure AWS_BucketsManagment() Export
S3_CreateBucket(TestParameters);
S3_GetBucketsList(TestParameters);
S3_CheckBucketAvailability(TestParameters);
S3_PutBucketEncryption(TestParameters);
S3_GetBucketEncryption(TestParameters);
S3_DeleteBucket(TestParameters);
EndProcedure
@ -14621,7 +14623,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData);
@ -14631,7 +14633,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False);
@ -14653,16 +14655,17 @@ Procedure S3_DeleteBucket(FunctionParameters)
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData);
OPI_TestDataRetrieval.WriteLog(Result, "DeleteBucket (DB)", "S3"); // SKIP
OPI_TestDataRetrieval.Check_S3Success(Result); // SKIP
BasicData.Insert("URL", FunctionParameters["S3_URL"]); // SKIP
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False);
@ -14693,13 +14696,13 @@ EndProcedure
Procedure S3_CheckBucketAvailability(FunctionParameters)
URL = FunctionParameters["S3_URL"];
URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);
@ -14715,6 +14718,56 @@ Procedure S3_CheckBucketAvailability(FunctionParameters)
EndProcedure
Procedure S3_GetBucketEncryption(FunctionParameters)
URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
Result = OPI_S3.GetBucketEncryption(Name, BasicData, False);
// END
OPI_TestDataRetrieval.WriteLog(Result, "GetBucketEncryption", "S3");
OPI_TestDataRetrieval.Check_Map(Result);
OPI_TestDataRetrieval.WriteLogFile("", "GetBucketEncryption", "S3");
EndProcedure
Procedure S3_PutBucketEncryption(FunctionParameters)
URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
XmlConfig = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
| </ApplyServerSideEncryptionByDefault>
| </Rule>
|</ServerSideEncryptionConfiguration>";
Result = OPI_S3.PutBucketEncryption(Name, BasicData, XmlConfig, False);
// END
OPI_TestDataRetrieval.WriteLog(Result, "PutBucketEncryption", "S3");
OPI_TestDataRetrieval.Check_S3NotImplemented(Result);
OPI_TestDataRetrieval.WriteLogFile("", "PutBucketEncryption", "S3");
EndProcedure
#EndRegion
#EndRegion

View File

@ -443,6 +443,40 @@ Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
EndProcedure
Procedure WriteLogFile(Val Data, Val Method, Val Library) Export
Try
LogPath = "./docs/en/results";
LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath);
If Not LogDirectory.Exist() Then
CreateDirectory(LogPath);
EndIf;
LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exist() Then
CreateDirectory(LibraryLogPath);
EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath);
If Not LogFile.Exist() Then
LogDocument = New TextDocument;
LogDocument.SetText(Data);
LogDocument.Write(FilePath);
EndIf;
Except
Message("Failed to write log file!: " + ErrorDescription());
EndTry;
EndProcedure
Procedure WriteLogCLI(Val Result, Val Method, Val Library = "") Export
WriteLog(Result, Method + " (CLI)");
@ -1961,6 +1995,13 @@ Procedure Check_S3NotFound(Val Result) Export
EndProcedure
Procedure Check_S3NotImplemented(Val Result) Export
Success = Result["status"] = 501;
ExpectsThat(Success).Равно(True);
EndProcedure
#EndRegion
#EndRegion
@ -2147,40 +2188,6 @@ Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
EndProcedure
Procedure WriteLogFile(Val Data, Val Method, Val Library)
Try
LogPath = "./docs/en/results";
LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath);
If Not LogDirectory.Exist() Then
CreateDirectory(LogPath);
EndIf;
LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exist() Then
CreateDirectory(LibraryLogPath);
EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath);
If Not LogFile.Exist() Then
LogDocument = New TextDocument;
LogDocument.SetText(Data);
LogDocument.Write(FilePath);
EndIf;
Except
Message("Failed to write log file!: " + ErrorDescription());
EndTry;
EndProcedure
Procedure WriteCLICall(Val Library, Val Method, Val Options)
If Not OPI_Tools.IsOneScript() Then

View File

@ -52,11 +52,18 @@ Procedure GetBinaryData(Value) Export
File = New File(Value);
If File.Exist() Then
Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then
ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
Value = OPI_Tools.Get(Value);
Else
Value = Base64Value(Value);
EndIf;
EndIf;
@ -243,20 +250,15 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = TextReader.Read();
TextReader.Close();
ElsIf StrStartsWith(Lower(Value), "http") Then
ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
TFN = GetTempFileName();
CopyFile(Value, TFN);
TextReader = New TextReader(TFN);
Value = TextReader.Read();
TextReader.Close();
DeleteFiles(TFN);
Value = OPI_Tools.Get(Value);
GetLine(Value);
Else
Return;
Value = OPI_Tools.NumberToString(Value);
EndIf;
@ -268,6 +270,10 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = OPI_Tools.JSONString(Value);
ElsIf TypeOf(Value) = Type("XMLWriter") Then
Value = Value.Close();
Else
Return;
EndIf;

View File

@ -483,6 +483,8 @@ Function RequestParametersToMap(Val ParameterString) Export
If KeyValueArray.Count() = NumberOfParts Then
ReturnMapping.Insert(KeyValueArray[0], KeyValueArray[1]);
Else
ReturnMapping.Insert(KeyValueArray[0], Undefined);
EndIf;
EndDo;

View File

@ -82,26 +82,25 @@ EndFunction
// Map Of KeyAndValue - serialized JSON response from storage
Function SendRequestWithoutBody(Val Method, Val BasicData, Val Headers = Undefined) Export
CheckBasicData(BasicData);
Response = SendRequest(Method, BasicData, , Headers);
Return Response;
URL = BasicData["URL"];
EndFunction
URLStructure = OPI_Tools.SplitURL(URL);
Server = URLStructure["Server"];
Address = URLStructure["Address"];
Safe = URLStructure["Safe"];
Request = OPI_Tools.CreateRequest(Address);
Connection = OPI_Tools.CreateConnection(Server, Safe);
AddAdditionalHeaders(Request, Headers);
AuthorizationHeader = CreateAuthorizationHeader(BasicData, Request, Connection, Method);
Request.Headers.Insert("Authorization", AuthorizationHeader);
Response = OPI_Tools.ExecuteRequest(Request, Connection, Method, , True);
Response = FormResponse(Response);
// Send request with body
// Send http request with body
//
// Parameters:
// Method - String - HTTP method - method
// BasicData - Structure of KeyAndValue - Basic request data (with full URL). See GetBasicDataStructure - data
// Body - String, BinaryData - Binary data or file of request body data - body
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - serialized JSON response from storage
Function SendRequestWithBody(Val Method, Val BasicData, Val Body, Val Headers = Undefined) Export
Response = SendRequest(Method, BasicData, Body, Headers);
Return Response;
EndFunction
@ -186,6 +185,73 @@ Function CheckBucketAvailability(Val Name
EndFunction
// Put bucket encryption
// Sets bucket encryption by XML configuration
//
// Note
// Method at AWS documentation: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
//
// Parameters:
// Name - String - Bucket name - name
// BasicData - Structure of KeyAndValue - Basic request data. See GetBasicDataStructure - data
// XmlConfig - String - XML string or file of encryption configuration - conf
// Directory - Boolean - True > Directory Bucket, False > General Purpose Bucket - dir
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - serialized JSON response from storage
Function PutBucketEncryption(Val Name
, Val BasicData
, Val XmlConfig
, Val Directory = True
, Val Headers = Undefined) Export
OPI_TypeConversion.GetLine(XmlConfig, True);
XmlConfig = GetBinaryDataFromString(XmlConfig);
URL = GetServiceURL(BasicData);
URL = FormBucketURL(URL, Name, Directory);
URL = URL + "?encryption";
BasicData.Insert("URL", URL);
Response = SendRequestWithBody("PUT", BasicData, XmlConfig, Headers);
Return Response;
EndFunction
// Get bucket encryption
// Gets the previously set bucket encryption configuration
//
// Note
// Method at AWS documentation: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
//
// Parameters:
// Name - String - Bucket name - name
// BasicData - Structure of KeyAndValue - Basic request data. See GetBasicDataStructure - data
// Directory - Boolean - True > Directory Bucket, False > General Purpose Bucket - dir
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
//
// Returns:
// Map Of KeyAndValue - serialized JSON response from storage
Function GetBucketEncryption(Val Name
, Val BasicData
, Val Directory = True
, Val Headers = Undefined) Export
URL = GetServiceURL(BasicData);
URL = FormBucketURL(URL, Name, Directory);
URL = URL + "?encryption";
BasicData.Insert("URL", URL);
Response = SendRequestWithoutBody("GET", BasicData, Headers);
Return Response;
EndFunction
// Get buckets list
// Gets a list of buckets. It is possible to use filters if they are provided by your service
//
@ -370,26 +436,23 @@ Function GetURIString(Val Request)
EndFunction
Function GetParamsString(Val Request)
Function GetParamsString(Request)
URI = Request.ResourceAddress;
ParamsStart = StrFind(URI, "?");
If ParamsStart = 0 Then
If ParamsStart = 0 Then
ParameterString = "";
Else
URILength = StrLen(URI);
ParameterString = Right(URI, URILength - ParamsStart);
ProcessRequestParametersString(ParameterString);
EndIf;
ParameterArray = StrSplit(ParameterString, "&");
ParamsList = New ValueList();
ParamsList.LoadValues(ParameterArray);
ParamsList.SortByValue();
ParameterString = StrConcat(ParamsList.UnloadValues(), "&");
Return ParameterString;
EndFunction
@ -482,28 +545,69 @@ Function FormAuthorisationHeader(Val AccessKey, Val Scope, Val Signature, Val He
EndFunction
Procedure ProcessRequestParametersString(ParameterString)
ParameterArray = StrSplit(ParameterString, "&");
ParamsList = New ValueList();
ParamsList.LoadValues(ParameterArray);
ParamsList.SortByValue();
ParameterArray = ParamsList.UnloadValues();
FinalParamsArray = New Array;
For N = 0 To ParameterArray.UBound() Do
QueryParameter = ParameterArray[N];
If StrFind(QueryParameter, "=") = 0 Then
ParameterArray[N] = QueryParameter + "=";
EndIf;
EndDo;
ParameterString = StrConcat(ParameterArray, "&");
EndProcedure
#EndRegion
#Region Miscellaneous
Function SendRequest(Val Method, Val BasicData, Val Body = Undefined, Val Headers = Undefined)
CheckBasicData(BasicData);
URL = BasicData["URL"];
URLStructure = OPI_Tools.SplitURL(URL);
Server = URLStructure["Server"];
Address = URLStructure["Address"];
Safe = URLStructure["Safe"];
Request = OPI_Tools.CreateRequest(Address);
Connection = OPI_Tools.CreateConnection(Server, Safe);
If ValueIsFilled(Body) Then
SetRequestBody(Request, Body);
EndIf;
AddAdditionalHeaders(Request, Headers);
AuthorizationHeader = CreateAuthorizationHeader(BasicData, Request, Connection, Method);
Request.Headers.Insert("Authorization", AuthorizationHeader);
Response = OPI_Tools.ExecuteRequest(Request, Connection, Method, , True);
Response = FormResponse(Response);
Return Response;
EndFunction
Function BucketManagment(Val Name, Val BasicData, Val Directory, Val Method, Val Headers)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
URL = GetServiceURL(BasicData);
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
EndIf;
URL = FormBucketURL(URL, Name, Directory);
BasicData.Insert("URL", URL);
@ -519,22 +623,25 @@ Function FormResponse(Val Response, Val ExpectedBinary = False)
If Not ExpectedBinary Or Status > 299 Then
ResponseData = New Map;
BodyData = New Map;
ResponseBody = Response.GetBodyAsString();
ResponseBody = TrimAll(ResponseBody);
If ValueIsFilled(ResponseBody) Then
Try
ResponseData = OPI_Tools.ProcessXML(ResponseBody);
BodyData = OPI_Tools.ProcessXML(ResponseBody);
Except
ResponseData = New Structure("notXMLMessage", ResponseBody);
BodyData.Insert("notValidXMLMessage", ResponseBody);
EndTry;
Else
ResponseData = New Structure;
EndIf;
ResponseData = New Structure("status,response", Status, ResponseData);
ResponseData = New Map;
ResponseData.Insert("status" , Status);
ResponseData.Insert("response", BodyData);
Else
ResponseData = Response.GetBodyAsBinaryData();
@ -596,6 +703,38 @@ Procedure AddAdditionalHeaders(Receiver, Val Headers)
EndProcedure
Procedure SetRequestBody(Request, Body)
OPI_TypeConversion.GetBinaryData(Body);
Request.SetBodyFromBinaryData(Body);
EndProcedure
Function FormBucketURL(Val URL, Val Name, Val Directory)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
EndIf;
If Not StrEndsWith(URL, "/") Then
URL = URL + "/";
EndIf;
Return URL;
EndFunction
#EndRegion
#EndRegion

View File

@ -443,6 +443,40 @@ Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
EndProcedure
Procedure WriteLogFile(Val Data, Val Method, Val Library) Export
Try
LogPath = "./docs/en/results";
LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath);
If Not LogDirectory.Exists() Then
CreateDirectory(LogPath);
EndIf;
LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exists() Then
CreateDirectory(LibraryLogPath);
EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath);
If Not LogFile.Exists() Then
LogDocument = New TextDocument;
LogDocument.SetText(Data);
LogDocument.Write(FilePath);
EndIf;
Except
Message("Failed to write log file!: " + ErrorDescription());
EndTry;
EndProcedure
Procedure WriteLogCLI(Val Result, Val Method, Val Library = "") Export
WriteLog(Result, Method + " (CLI)");
@ -1961,6 +1995,13 @@ Procedure Check_S3NotFound(Val Result) Export
EndProcedure
Procedure Check_S3NotImplemented(Val Result) Export
Success = Result["status"] = 501;
ExpectsThat(Success).Равно(True);
EndProcedure
#EndRegion
#EndRegion
@ -2147,40 +2188,6 @@ Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
EndProcedure
Procedure WriteLogFile(Val Data, Val Method, Val Library)
Try
LogPath = "./docs/en/results";
LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath);
If Not LogDirectory.Exists() Then
CreateDirectory(LogPath);
EndIf;
LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exists() Then
CreateDirectory(LibraryLogPath);
EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath);
If Not LogFile.Exists() Then
LogDocument = New TextDocument;
LogDocument.SetText(Data);
LogDocument.Write(FilePath);
EndIf;
Except
Message("Failed to write log file!: " + ErrorDescription());
EndTry;
EndProcedure
Procedure WriteCLICall(Val Library, Val Method, Val Options)
If Not OPI_Tools.IsOneScript() Then

View File

@ -2113,6 +2113,8 @@ Procedure AWS_BucketsManagment() Export
S3_CreateBucket(TestParameters);
S3_GetBucketsList(TestParameters);
S3_CheckBucketAvailability(TestParameters);
S3_PutBucketEncryption(TestParameters);
S3_GetBucketEncryption(TestParameters);
S3_DeleteBucket(TestParameters);
EndProcedure
@ -14621,7 +14623,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData);
@ -14631,7 +14633,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False);
@ -14653,16 +14655,17 @@ Procedure S3_DeleteBucket(FunctionParameters)
// Directory bucket
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData);
OPI_TestDataRetrieval.WriteLog(Result, "DeleteBucket (DB)", "S3"); // SKIP
OPI_TestDataRetrieval.Check_S3Success(Result); // SKIP
BasicData.Insert("URL", FunctionParameters["S3_URL"]); // SKIP
// General purpose bucket
Name = "opi-gpbucket1";
Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False);
@ -14693,13 +14696,13 @@ EndProcedure
Procedure S3_CheckBucketAvailability(FunctionParameters)
URL = FunctionParameters["S3_URL"];
URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1";
Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);
@ -14715,6 +14718,56 @@ Procedure S3_CheckBucketAvailability(FunctionParameters)
EndProcedure
Procedure S3_GetBucketEncryption(FunctionParameters)
URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
Result = OPI_S3.GetBucketEncryption(Name, BasicData, False);
// END
OPI_TestDataRetrieval.WriteLog(Result, "GetBucketEncryption", "S3");
OPI_TestDataRetrieval.Check_Map(Result);
OPI_TestDataRetrieval.WriteLogFile("", "GetBucketEncryption", "S3");
EndProcedure
Procedure S3_PutBucketEncryption(FunctionParameters)
URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-newbucket2";
XmlConfig = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
| </ApplyServerSideEncryptionByDefault>
| </Rule>
|</ServerSideEncryptionConfiguration>";
Result = OPI_S3.PutBucketEncryption(Name, BasicData, XmlConfig, False);
// END
OPI_TestDataRetrieval.WriteLog(Result, "PutBucketEncryption", "S3");
OPI_TestDataRetrieval.Check_S3NotImplemented(Result);
OPI_TestDataRetrieval.WriteLogFile("", "PutBucketEncryption", "S3");
EndProcedure
#EndRegion
#EndRegion

View File

@ -483,6 +483,8 @@ Function RequestParametersToMap(Val ParameterString) Export
If KeyValueArray.Count() = NumberOfParts Then
ReturnMapping.Insert(KeyValueArray[0], KeyValueArray[1]);
Else
ReturnMapping.Insert(KeyValueArray[0], Undefined);
EndIf;
EndDo;

View File

@ -52,11 +52,18 @@ Procedure GetBinaryData(Value) Export
File = New File(Value);
If File.Exists() Then
Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then
ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
Value = OPI_Tools.Get(Value);
Else
Value = Base64Value(Value);
EndIf;
EndIf;
@ -243,20 +250,15 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = TextReader.Read();
TextReader.Close();
ElsIf StrStartsWith(Lower(Value), "http") Then
ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
TFN = GetTempFileName();
FileCopy(Value, TFN);
TextReader = New TextReader(TFN);
Value = TextReader.Read();
TextReader.Close();
DeleteFiles(TFN);
Value = OPI_Tools.Get(Value);
GetLine(Value);
Else
Return;
Value = OPI_Tools.NumberToString(Value);
EndIf;
@ -268,6 +270,10 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = OPI_Tools.JSONString(Value);
ElsIf TypeOf(Value) = Type("XMLWriter") Then
Value = Value.Close();
Else
Return;
EndIf;

View File

@ -92,6 +92,47 @@
NewLine.Область = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "SendRequestWithBody";
NewLine.МетодПоиска = "SENDREQUESTWITHBODY";
NewLine.Параметр = "--method";
NewLine.Описание = "HTTP method";
NewLine.Область = "Common methods";
NewLine.ОписаниеМетода = "Send http request with body";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "SendRequestWithBody";
NewLine.МетодПоиска = "SENDREQUESTWITHBODY";
NewLine.Параметр = "--data";
NewLine.Описание = "Basic request data (with full URL). See GetBasicDataStructure";
NewLine.Область = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "SendRequestWithBody";
NewLine.МетодПоиска = "SENDREQUESTWITHBODY";
NewLine.Параметр = "--body";
NewLine.Описание = "Binary data or file of request body data";
NewLine.Область = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "SendRequestWithBody";
NewLine.МетодПоиска = "SENDREQUESTWITHBODY";
NewLine.Параметр = "--headers";
NewLine.Описание = "Additional request headers, if necessary (optional, def. val. - Empty value)";
NewLine.Область = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
@ -225,6 +266,98 @@
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "PutBucketEncryption";
NewLine.МетодПоиска = "PUTBUCKETENCRYPTION";
NewLine.Параметр = "--name";
NewLine.Описание = "Bucket name";
NewLine.Область = "Buckets managment";
NewLine.ОписаниеМетода = "Sets bucket encryption by XML configuration";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "PutBucketEncryption";
NewLine.МетодПоиска = "PUTBUCKETENCRYPTION";
NewLine.Параметр = "--data";
NewLine.Описание = "Basic request data. See GetBasicDataStructure";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "PutBucketEncryption";
NewLine.МетодПоиска = "PUTBUCKETENCRYPTION";
NewLine.Параметр = "--conf";
NewLine.Описание = "XML string or file of encryption configuration";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "PutBucketEncryption";
NewLine.МетодПоиска = "PUTBUCKETENCRYPTION";
NewLine.Параметр = "--dir";
NewLine.Описание = "True > Directory Bucket, False > General Purpose Bucket (optional, def. val. - Yes)";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "PutBucketEncryption";
NewLine.МетодПоиска = "PUTBUCKETENCRYPTION";
NewLine.Параметр = "--headers";
NewLine.Описание = "Additional request headers, if necessary (optional, def. val. - Empty value)";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "GetBucketEncryption";
NewLine.МетодПоиска = "GETBUCKETENCRYPTION";
NewLine.Параметр = "--name";
NewLine.Описание = "Bucket name";
NewLine.Область = "Buckets managment";
NewLine.ОписаниеМетода = "Gets the previously set bucket encryption configuration";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "GetBucketEncryption";
NewLine.МетодПоиска = "GETBUCKETENCRYPTION";
NewLine.Параметр = "--data";
NewLine.Описание = "Basic request data. See GetBasicDataStructure";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "GetBucketEncryption";
NewLine.МетодПоиска = "GETBUCKETENCRYPTION";
NewLine.Параметр = "--dir";
NewLine.Описание = "True > Directory Bucket, False > General Purpose Bucket (optional, def. val. - Yes)";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";
NewLine.Метод = "GetBucketEncryption";
NewLine.МетодПоиска = "GETBUCKETENCRYPTION";
NewLine.Параметр = "--headers";
NewLine.Описание = "Additional request headers, if necessary (optional, def. val. - Empty value)";
NewLine.Область = "Buckets managment";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3";

View File

@ -81,15 +81,15 @@
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки);
Возврат Ответ;
КонецФункции
// Отправить запрос с телом
// Отправляет http запрос с телом
//
//
// Параметры:
// Метод - Строка - HTTP метод - method
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных - data
@ -99,10 +99,10 @@
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
@ -186,8 +186,8 @@
КонецФункции
// Установить шифрование бакета
// Устанавлиает шифрование бакета по дайджесту
//
// Устанавлиает шифрование бакета по XML конфигурации
//
// Примечание:
// Метод в документации AWS: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
//
@ -195,35 +195,35 @@
// Наименование - Строка - Наименование бакета - name
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - data
// XMLКонфигурация - Строка - XML строка или файл конфигурации шифрования - conf
// Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir
// Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач XMLКонфигурация
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
, Знач ОсновныеДанные
, Знач XMLКонфигурация
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(XMLКонфигурация, Истина);
XMLКонфигурация = ПолучитьДвоичныеДанныеИзСтроки(XMLКонфигурация);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, XMLКонфигурация, Заголовки);
Возврат Ответ;
КонецФункции
// Получить шифрование бакета
// Получает установленную ранее конфигурацию шифрования бакета
//
//
// Примечание:
// Метод в документации AWS: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
//
@ -236,20 +236,20 @@
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
, Знач ОсновныеДанные
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption";
URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросБезТела("GET", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
// Получить список бакетов
@ -437,22 +437,22 @@
КонецФункции
Функция ПолучитьСтрокуПараметров(Запрос)
URI = Запрос.АдресРесурса;
НачалоПараметров = СтрНайти(URI, "?");
Если НачалоПараметров = 0 Тогда
СтрокаПараметров = "";
Иначе
ДлинаURI = СтрДлина(URI);
СтрокаПараметров = Прав(URI, ДлинаURI - НачалоПараметров);
ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров);
КонецЕсли;
Возврат СтрокаПараметров;
КонецФункции
@ -546,26 +546,26 @@
КонецФункции
Процедура ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров)
МассивПараметров = СтрРазделить(СтрокаПараметров, "&");
СписокПараметров = Новый СписокЗначений();
СписокПараметров.ЗагрузитьЗначения(МассивПараметров);
СписокПараметров.СортироватьПоЗначению();
МассивПараметров = СписокПараметров.ВыгрузитьЗначения();
КонечныйМассивПараметров = Новый Массив;
Для Н = 0 По МассивПараметров.ВГраница() Цикл
ПараметрЗапроса = МассивПараметров[Н];
Если СтрНайти(ПараметрЗапроса, "=") = 0 Тогда
МассивПараметров[Н] = ПараметрЗапроса + "=";
КонецЕсли;
КонецЦикла;
СтрокаПараметров = СтрСоединить(МассивПараметров, "&");
КонецПроцедуры
@ -574,8 +574,8 @@
#Область Прочее
Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено)
Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено)
ПроверитьОсновныеДанные(ОсновныеДанные);
URL = ОсновныеДанные["URL"];
@ -587,7 +587,7 @@
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, Защищенное);
Если ЗначениеЗаполнено(Тело) Тогда
УстановитьТелоЗапроса(Запрос, Тело);
КонецЕсли;
@ -607,7 +607,7 @@
Функция УправлениеБакетом(Знач Имя, Знач ОсновныеДанные, Знач Каталог, Знач Метод, Знач Заголовки)
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Имя, Каталог);
URL = СформироватьURLБакета(URL, Имя, Каталог);
ОсновныеДанные.Вставить("URL", URL);
@ -622,7 +622,7 @@
Статус = Ответ.КодСостояния;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие;
@ -704,18 +704,18 @@
КонецПроцедуры
Процедура УстановитьТелоЗапроса(Запрос, Тело)
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Тело);
Запрос.УстановитьТелоИзДвоичныхДанных(Тело);
КонецПроцедуры
Функция СформироватьURLБакета(Знач URL, Знач Имя, Знач Каталог)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог);
Если Каталог Тогда
Если Каталог Тогда
URL = URL + Имя;
Иначе
@ -725,14 +725,14 @@
URL = Имя + "." + URL;
КонецЕсли;
КонецЕсли;
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/";
КонецЕсли;
Возврат URL;
КонецЕсли;
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/";
КонецЕсли;
Возврат URL;
КонецФункции
#КонецОбласти

View File

@ -14734,7 +14734,7 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3");
КонецПроцедуры
@ -14749,8 +14749,8 @@
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2";
КонфигурацияXML = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
XMLКонфигурация = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm>
@ -14758,7 +14758,7 @@
| </Rule>
|</ServerSideEncryptionConfiguration>";
Результат = OPI_S3.УстановитьШифрованиеБакета(Имя, ОсновныеДанные, КонфигурацияXML, Ложь);
Результат = OPI_S3.УстановитьШифрованиеБакета(Имя, ОсновныеДанные, XMLКонфигурация, Ложь);
// END

View File

@ -1996,11 +1996,11 @@
КонецПроцедуры
Процедура Проверка_S3НеПоддерживается(Знач Результат) Экспорт
Успех = Результат["status"] = 501;
ОжидаетЧто(Успех).Равно(Истина);
КонецПроцедуры
КонецПроцедуры
#КонецОбласти
@ -2038,9 +2038,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@ -52,18 +52,18 @@
Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение);
Иначе
Значение = Base64Значение(Значение);
КонецЕсли;
КонецЕсли;
@ -252,7 +252,7 @@
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение);
ПолучитьСтроку(Значение);
@ -269,11 +269,11 @@
ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение);
ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда
Значение = Значение.Закрыть();
Иначе
Возврат;
КонецЕсли;

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_S3.os
// OneScript: ./OInt/core/Modules/OPI_S3.os
// Lib: S3
// CLI: s3
@ -81,15 +81,15 @@
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки);
Возврат Ответ;
КонецФункции
// Отправить запрос с телом
// Отправляет http запрос с телом
//
//
// Параметры:
// Метод - Строка - HTTP метод - method
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных - data
@ -99,10 +99,10 @@
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
@ -187,7 +187,7 @@
// Установить шифрование бакета
// Устанавлиает шифрование бакета по XML конфигурации
//
//
// Примечание:
// Метод в документации AWS: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
//
@ -195,35 +195,35 @@
// Наименование - Строка - Наименование бакета - name
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - data
// XMLКонфигурация - Строка - XML строка или файл конфигурации шифрования - conf
// Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir
// Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач XMLКонфигурация
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
, Знач ОсновныеДанные
, Знач XMLКонфигурация
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(XMLКонфигурация, Истина);
XMLКонфигурация = ПолучитьДвоичныеДанныеИзСтроки(XMLКонфигурация);
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, XMLКонфигурация, Заголовки);
Возврат Ответ;
КонецФункции
// Получить шифрование бакета
// Получает установленную ранее конфигурацию шифрования бакета
//
//
// Примечание:
// Метод в документации AWS: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
//
@ -236,20 +236,20 @@
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
, Знач ОсновныеДанные
, Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption";
URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросБезТела("GET", ОсновныеДанные, Заголовки);
Возврат Ответ;
КонецФункции
// Получить список бакетов
@ -437,22 +437,22 @@
КонецФункции
Функция ПолучитьСтрокуПараметров(Запрос)
URI = Запрос.АдресРесурса;
НачалоПараметров = СтрНайти(URI, "?");
Если НачалоПараметров = 0 Тогда
СтрокаПараметров = "";
Иначе
ДлинаURI = СтрДлина(URI);
СтрокаПараметров = Прав(URI, ДлинаURI - НачалоПараметров);
ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров);
КонецЕсли;
Возврат СтрокаПараметров;
КонецФункции
@ -546,26 +546,26 @@
КонецФункции
Процедура ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров)
МассивПараметров = СтрРазделить(СтрокаПараметров, "&");
СписокПараметров = Новый СписокЗначений();
СписокПараметров.ЗагрузитьЗначения(МассивПараметров);
СписокПараметров.СортироватьПоЗначению();
МассивПараметров = СписокПараметров.ВыгрузитьЗначения();
КонечныйМассивПараметров = Новый Массив;
Для Н = 0 По МассивПараметров.ВГраница() Цикл
ПараметрЗапроса = МассивПараметров[Н];
Если СтрНайти(ПараметрЗапроса, "=") = 0 Тогда
МассивПараметров[Н] = ПараметрЗапроса + "=";
КонецЕсли;
КонецЦикла;
СтрокаПараметров = СтрСоединить(МассивПараметров, "&");
КонецПроцедуры
@ -574,8 +574,8 @@
#Область Прочее
Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено)
Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено)
ПроверитьОсновныеДанные(ОсновныеДанные);
URL = ОсновныеДанные["URL"];
@ -587,7 +587,7 @@
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, Защищенное);
Если ЗначениеЗаполнено(Тело) Тогда
УстановитьТелоЗапроса(Запрос, Тело);
КонецЕсли;
@ -607,7 +607,7 @@
Функция УправлениеБакетом(Знач Имя, Знач ОсновныеДанные, Знач Каталог, Знач Метод, Знач Заголовки)
URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Имя, Каталог);
URL = СформироватьURLБакета(URL, Имя, Каталог);
ОсновныеДанные.Вставить("URL", URL);
@ -622,7 +622,7 @@
Статус = Ответ.КодСостояния;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие;
@ -704,18 +704,18 @@
КонецПроцедуры
Процедура УстановитьТелоЗапроса(Запрос, Тело)
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Тело);
Запрос.УстановитьТелоИзДвоичныхДанных(Тело);
КонецПроцедуры
Функция СформироватьURLБакета(Знач URL, Знач Имя, Знач Каталог)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог);
Если Каталог Тогда
Если Каталог Тогда
URL = URL + Имя;
Иначе
@ -725,14 +725,14 @@
URL = Имя + "." + URL;
КонецЕсли;
КонецЕсли;
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/";
КонецЕсли;
Возврат URL;
КонецЕсли;
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/";
КонецЕсли;
Возврат URL;
КонецФункции
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
// MIT License

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// MIT License
@ -1996,11 +1996,11 @@
КонецПроцедуры
Процедура Проверка_S3НеПоддерживается(Знач Результат) Экспорт
Успех = Результат["status"] = 501;
ОжидаетЧто(Успех).Равно(Истина);
КонецПроцедуры
КонецПроцедуры
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// MIT License
@ -52,18 +52,18 @@
Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение);
Иначе
Значение = Base64Значение(Значение);
КонецЕсли;
КонецЕсли;
@ -252,7 +252,7 @@
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение);
ПолучитьСтроку(Значение);
@ -269,11 +269,11 @@
ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение);
ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда
Значение = Значение.Закрыть();
Иначе
Возврат;
КонецЕсли;

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@ -14734,7 +14734,7 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3");
КонецПроцедуры
@ -14749,7 +14749,7 @@
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2";
XMLКонфигурация = "<ServerSideEncryptionConfiguration xmlns=""http://s3.amazonaws.com/doc/2006-03-01/"">
| <Rule>
| <ApplyServerSideEncryptionByDefault>

View File

@ -92,6 +92,47 @@
НоваяСтрока.Область = "Общие методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ОтправитьЗапросСТелом";
НоваяСтрока.МетодПоиска = "ОТПРАВИТЬЗАПРОССТЕЛОМ";
НоваяСтрока.Параметр = "--method";
НоваяСтрока.Описание = "HTTP метод";
НоваяСтрока.Область = "Общие методы";
НоваяСтрока.ОписаниеМетода = "Отправляет http запрос с телом";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ОтправитьЗапросСТелом";
НоваяСтрока.МетодПоиска = "ОТПРАВИТЬЗАПРОССТЕЛОМ";
НоваяСтрока.Параметр = "--data";
НоваяСтрока.Описание = "Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных";
НоваяСтрока.Область = "Общие методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ОтправитьЗапросСТелом";
НоваяСтрока.МетодПоиска = "ОТПРАВИТЬЗАПРОССТЕЛОМ";
НоваяСтрока.Параметр = "--body";
НоваяСтрока.Описание = "Двоичное тело запроса или путь к файлу";
НоваяСтрока.Область = "Общие методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ОтправитьЗапросСТелом";
НоваяСтрока.МетодПоиска = "ОТПРАВИТЬЗАПРОССТЕЛОМ";
НоваяСтрока.Параметр = "--headers";
НоваяСтрока.Описание = "Дополнительные заголовки запроса, если необходимо (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Общие методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
@ -225,6 +266,98 @@
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "УстановитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "УСТАНОВИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--name";
НоваяСтрока.Описание = "Наименование бакета";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока.ОписаниеМетода = "Устанавлиает шифрование бакета по XML конфигурации";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "УстановитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "УСТАНОВИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--data";
НоваяСтрока.Описание = "Основные данные запроса. См. ПолучитьСтруктуруДанных";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "УстановитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "УСТАНОВИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--conf";
НоваяСтрока.Описание = "XML строка или файл конфигурации шифрования";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "УстановитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "УСТАНОВИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--dir";
НоваяСтрока.Описание = "Истина > Directory Bucket, Ложь > General Purpose Bucket (необяз. по ум. - Да)";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "УстановитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "УСТАНОВИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--headers";
НоваяСтрока.Описание = "Дополнительные заголовки запроса, если необходимо (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ПолучитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--name";
НоваяСтрока.Описание = "Наименование бакета";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока.ОписаниеМетода = "Получает установленную ранее конфигурацию шифрования бакета";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ПолучитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--data";
НоваяСтрока.Описание = "Основные данные запроса. См. ПолучитьСтруктуруДанных";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ПолучитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--dir";
НоваяСтрока.Описание = "Истина > Directory Bucket, Ложь > General Purpose Bucket (необяз. по ум. - Да)";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";
НоваяСтрока.Метод = "ПолучитьШифрованиеБакета";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬШИФРОВАНИЕБАКЕТА";
НоваяСтрока.Параметр = "--headers";
НоваяСтрока.Описание = "Дополнительные заголовки запроса, если необходимо (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Работа с бакетами";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3";