1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-05-22 10:05:29 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot)
2024-11-14 17:27:44 +03:00
parent 18cd437f97
commit d43c81d3bb
52 changed files with 6675 additions and 5601 deletions
+12
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 ' 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') { catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 CreateBucket --name "test" --data "test" --dir "test" --headers "test" --debug --test ' 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 ' 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') { 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 ' powershell encoding: 'UTF-8', script:'./oint.exe s3 GetBucketsList --data "test" --prefix "test" --region "test" --ctoken "test" --headers "test" --debug --test '
} }
+12
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 ' 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') { catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe s3 СоздатьБакет --name "test" --data "test" --dir "test" --headers "test" --debug --test ' 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 ' 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') { 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 ' powershell encoding: 'UTF-8', script:'./oint.exe s3 ПолучитьСписокБакетов --data "test" --prefix "test" --region "test" --ctoken "test" --headers "test" --debug --test '
} }
+5
View File
@@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}
+5
View File
@@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}
@@ -1,10 +1,10 @@
URL = "storage-155.s3hoster.by"; URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67..."; AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N..."; SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC"; Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region); BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True); Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);
+2 -2
View File
@@ -7,12 +7,12 @@
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData); Result = OPI_S3.CreateBucket(Name, BasicData);
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False); Result = OPI_S3.CreateBucket(Name, BasicData, False);
+2 -2
View File
@@ -7,12 +7,12 @@
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData); Result = OPI_S3.DeleteBucket(Name, BasicData);
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False); Result = OPI_S3.DeleteBucket(Name, BasicData, False);
@@ -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);
@@ -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);
@@ -32,13 +32,13 @@ Method at AWS documentation: [HeadBucket](https://docs.aws.amazon.com/AmazonS3/l
```bsl title="1C:Enterprise/OneScript code example" ```bsl title="1C:Enterprise/OneScript code example"
URL = "storage-155.s3hoster.by"; URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67..."; AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N..."; SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC"; Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region); BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True); Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);
@@ -40,13 +40,13 @@ Method at AWS documentation: [CreateBucket](https://docs.aws.amazon.com/AmazonS3
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData); Result = OPI_S3.CreateBucket(Name, BasicData);
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False); Result = OPI_S3.CreateBucket(Name, BasicData, False);
``` ```
@@ -40,13 +40,13 @@ Method at AWS documentation: [DeleteBucket](https://docs.aws.amazon.com/AmazonS3
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData); Result = OPI_S3.DeleteBucket(Name, BasicData);
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False); Result = OPI_S3.DeleteBucket(Name, BasicData, False);
``` ```
@@ -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);
```
@@ -1,5 +1,5 @@
--- ---
sidebar_position: 4 sidebar_position: 6
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
@@ -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);
```
@@ -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"
```
@@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}
@@ -0,0 +1,5 @@
{
"URL": "storage-155.s3hoster.by",
"AccessKey": "BRN5RKJE67...",
"SecretKey": "NNhv+i9PrytpT8Tu0C1N..."
}
@@ -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.ПолучитьШифрованиеБакета(Имя, ОсновныеДанные, Ложь);
@@ -1,10 +1,10 @@
 URL = "storage-155.s3hoster.by";  URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67..."; AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N..."; SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC"; Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region); ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "opi-dirbucket1"; Наименование = "opi-dirbucket3";
Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина); Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина);
@@ -7,12 +7,12 @@
// Directory bucket // Directory bucket
Наименование = "opi-dirbucket1"; Наименование = "opi-dirbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные); Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные);
// General purpose bucket // General purpose bucket
Наименование = "opi-gpbucket1"; Наименование = "opi-gpbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные, Ложь); Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные, Ложь);
@@ -7,12 +7,12 @@
// Directory bucket // Directory bucket
Имя = "opi-dirbucket1"; Имя = "opi-dirbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные); Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные);
// General purpose bucket // General purpose bucket
Имя = "opi-gpbucket1"; Имя = "opi-gpbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные, Ложь); Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные, Ложь);
@@ -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Конфигурация, Ложь);
@@ -32,13 +32,13 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript" ```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "storage-155.s3hoster.by"; URL = "storage-155.s3hoster.by";
AccessKey = "BRN5RKJE67..."; AccessKey = "BRN5RKJE67...";
SecretKey = "NNhv+i9PrytpT8Tu0C1N..."; SecretKey = "NNhv+i9PrytpT8Tu0C1N...";
Region = "BTC"; Region = "BTC";
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region); ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Наименование = "opi-dirbucket1"; Наименование = "opi-dirbucket3";
Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина); Результат = OPI_S3.ПроверитьДоступностьБакета(Наименование, ОсновныеДанные, Истина);
@@ -40,13 +40,13 @@ import TabItem from '@theme/TabItem';
// Directory bucket // Directory bucket
Наименование = "opi-dirbucket1"; Наименование = "opi-dirbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные); Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные);
// General purpose bucket // General purpose bucket
Наименование = "opi-gpbucket1"; Наименование = "opi-gpbucket3";
Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные, Ложь); Результат = OPI_S3.СоздатьБакет(Наименование, ОсновныеДанные, Ложь);
``` ```
@@ -40,13 +40,13 @@ import TabItem from '@theme/TabItem';
// Directory bucket // Directory bucket
Имя = "opi-dirbucket1"; Имя = "opi-dirbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные); Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные);
// General purpose bucket // General purpose bucket
Имя = "opi-gpbucket1"; Имя = "opi-gpbucket3";
Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные, Ложь); Результат = OPI_S3.УдалитьБакет(Имя, ОсновныеДанные, Ложь);
``` ```
@@ -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.ПолучитьШифрованиеБакета(Имя, ОсновныеДанные, Ложь);
```
@@ -1,5 +1,5 @@
--- ---
sidebar_position: 4 sidebar_position: 6
--- ---
import Tabs from '@theme/Tabs'; import Tabs from '@theme/Tabs';
@@ -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Конфигурация, Ложь);
```
@@ -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"
```
+5223 -5223
View File
File diff suppressed because it is too large Load Diff
+186 -47
View File
@@ -82,26 +82,25 @@ EndFunction
// Map Of KeyAndValue - serialized JSON response from storage // Map Of KeyAndValue - serialized JSON response from storage
Function SendRequestWithoutBody(Val Method, Val BasicData, Val Headers = Undefined) Export 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); // Send request with body
Server = URLStructure["Server"]; // Send http request with body
Address = URLStructure["Address"]; //
Safe = URLStructure["Safe"]; // Parameters:
// Method - String - HTTP method - method
Request = OPI_Tools.CreateRequest(Address); // BasicData - Structure of KeyAndValue - Basic request data (with full URL). See GetBasicDataStructure - data
Connection = OPI_Tools.CreateConnection(Server, Safe); // Body - String, BinaryData - Binary data or file of request body data - body
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
AddAdditionalHeaders(Request, Headers); //
// Returns:
AuthorizationHeader = CreateAuthorizationHeader(BasicData, Request, Connection, Method); // Map Of KeyAndValue - serialized JSON response from storage
Request.Headers.Insert("Authorization", AuthorizationHeader); Function SendRequestWithBody(Val Method, Val BasicData, Val Body, Val Headers = Undefined) Export
Response = OPI_Tools.ExecuteRequest(Request, Connection, Method, , True);
Response = FormResponse(Response);
Response = SendRequest(Method, BasicData, Body, Headers);
Return Response; Return Response;
EndFunction EndFunction
@@ -186,6 +185,73 @@ Function CheckBucketAvailability(Val Name
EndFunction 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 // Get buckets list
// Gets a list of buckets. It is possible to use filters if they are provided by your service // 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 EndFunction
Function GetParamsString(Val Request) Function GetParamsString(Request)
URI = Request.ResourceAddress; URI = Request.ResourceAddress;
ParamsStart = StrFind(URI, "?"); ParamsStart = StrFind(URI, "?");
If ParamsStart = 0 Then If ParamsStart = 0 Then
ParameterString = ""; ParameterString = "";
Else Else
URILength = StrLen(URI); URILength = StrLen(URI);
ParameterString = Right(URI, URILength - ParamsStart); ParameterString = Right(URI, URILength - ParamsStart);
ProcessRequestParametersString(ParameterString);
EndIf; EndIf;
ParameterArray = StrSplit(ParameterString, "&");
ParamsList = New ValueList();
ParamsList.LoadValues(ParameterArray);
ParamsList.SortByValue();
ParameterString = StrConcat(ParamsList.UnloadValues(), "&");
Return ParameterString; Return ParameterString;
EndFunction EndFunction
@@ -482,28 +545,69 @@ Function FormAuthorisationHeader(Val AccessKey, Val Scope, Val Signature, Val He
EndFunction 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 #EndRegion
#Region Miscellaneous #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) Function BucketManagment(Val Name, Val BasicData, Val Directory, Val Method, Val Headers)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
URL = GetServiceURL(BasicData); URL = GetServiceURL(BasicData);
URL = FormBucketURL(URL, Name, Directory);
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
EndIf;
BasicData.Insert("URL", URL); BasicData.Insert("URL", URL);
@@ -519,22 +623,25 @@ Function FormResponse(Val Response, Val ExpectedBinary = False)
If Not ExpectedBinary Or Status > 299 Then If Not ExpectedBinary Or Status > 299 Then
ResponseData = New Map;
BodyData = New Map;
ResponseBody = Response.GetBodyAsString(); ResponseBody = Response.GetBodyAsString();
ResponseBody = TrimAll(ResponseBody); ResponseBody = TrimAll(ResponseBody);
If ValueIsFilled(ResponseBody) Then If ValueIsFilled(ResponseBody) Then
Try Try
ResponseData = OPI_Tools.ProcessXML(ResponseBody); BodyData = OPI_Tools.ProcessXML(ResponseBody);
Except Except
ResponseData = New Structure("notXMLMessage", ResponseBody); BodyData.Insert("notValidXMLMessage", ResponseBody);
EndTry; EndTry;
Else
ResponseData = New Structure;
EndIf; EndIf;
ResponseData = New Structure("status,response", Status, ResponseData); ResponseData = New Map;
ResponseData.Insert("status" , Status);
ResponseData.Insert("response", BodyData);
Else Else
ResponseData = Response.ПолучитьТелоКакДвоичныеДанные(); ResponseData = Response.ПолучитьТелоКакДвоичныеДанные();
@@ -596,6 +703,38 @@ Procedure AddAdditionalHeaders(Receiver, Val Headers)
EndProcedure 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
#EndRegion #EndRegion
@@ -2113,6 +2113,8 @@ Procedure AWS_BucketsManagment() Export
S3_CreateBucket(TestParameters); S3_CreateBucket(TestParameters);
S3_GetBucketsList(TestParameters); S3_GetBucketsList(TestParameters);
S3_CheckBucketAvailability(TestParameters); S3_CheckBucketAvailability(TestParameters);
S3_PutBucketEncryption(TestParameters);
S3_GetBucketEncryption(TestParameters);
S3_DeleteBucket(TestParameters); S3_DeleteBucket(TestParameters);
EndProcedure EndProcedure
@@ -14621,7 +14623,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData); Result = OPI_S3.CreateBucket(Name, BasicData);
@@ -14631,7 +14633,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False); Result = OPI_S3.CreateBucket(Name, BasicData, False);
@@ -14653,16 +14655,17 @@ Procedure S3_DeleteBucket(FunctionParameters)
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData); Result = OPI_S3.DeleteBucket(Name, BasicData);
OPI_TestDataRetrieval.WriteLog(Result, "DeleteBucket (DB)", "S3"); // SKIP OPI_TestDataRetrieval.WriteLog(Result, "DeleteBucket (DB)", "S3"); // SKIP
OPI_TestDataRetrieval.Check_S3Success(Result); // SKIP OPI_TestDataRetrieval.Check_S3Success(Result); // SKIP
BasicData.Insert("URL", FunctionParameters["S3_URL"]); // SKIP
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False); Result = OPI_S3.DeleteBucket(Name, BasicData, False);
@@ -14693,13 +14696,13 @@ EndProcedure
Procedure S3_CheckBucketAvailability(FunctionParameters) Procedure S3_CheckBucketAvailability(FunctionParameters)
URL = FunctionParameters["S3_URL"]; URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"]; AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"]; SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC"; Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region); BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True); Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);
@@ -14715,6 +14718,56 @@ Procedure S3_CheckBucketAvailability(FunctionParameters)
EndProcedure 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
#EndRegion #EndRegion
@@ -443,6 +443,40 @@ Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
EndProcedure 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 Procedure WriteLogCLI(Val Result, Val Method, Val Library = "") Export
WriteLog(Result, Method + " (CLI)"); WriteLog(Result, Method + " (CLI)");
@@ -1961,6 +1995,13 @@ Procedure Check_S3NotFound(Val Result) Export
EndProcedure EndProcedure
Procedure Check_S3NotImplemented(Val Result) Export
Success = Result["status"] = 501;
ExpectsThat(Success).Равно(True);
EndProcedure
#EndRegion #EndRegion
#EndRegion #EndRegion
@@ -2147,40 +2188,6 @@ Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
EndProcedure 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) Procedure WriteCLICall(Val Library, Val Method, Val Options)
If Not OPI_Tools.IsOneScript() Then If Not OPI_Tools.IsOneScript() Then
+17 -11
View File
@@ -52,11 +52,18 @@ Procedure GetBinaryData(Value) Export
File = New File(Value); File = New File(Value);
If File.Exist() Then If File.Exist() Then
Value = New BinaryData(Value); Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then
ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
Value = OPI_Tools.Get(Value); Value = OPI_Tools.Get(Value);
Else Else
Value = Base64Value(Value); Value = Base64Value(Value);
EndIf; EndIf;
EndIf; EndIf;
@@ -243,20 +250,15 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = TextReader.Read(); Value = TextReader.Read();
TextReader.Close(); TextReader.Close();
ElsIf StrStartsWith(Lower(Value), "http") Then ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
TFN = GetTempFileName(); Value = OPI_Tools.Get(Value);
CopyFile(Value, TFN); GetLine(Value);
TextReader = New TextReader(TFN);
Value = TextReader.Read();
TextReader.Close();
DeleteFiles(TFN);
Else Else
Return; Value = OPI_Tools.NumberToString(Value);
EndIf; EndIf;
@@ -268,6 +270,10 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = OPI_Tools.JSONString(Value); Value = OPI_Tools.JSONString(Value);
ElsIf TypeOf(Value) = Type("XMLWriter") Then
Value = Value.Close();
Else Else
Return; Return;
EndIf; EndIf;
@@ -483,6 +483,8 @@ Function RequestParametersToMap(Val ParameterString) Export
If KeyValueArray.Count() = NumberOfParts Then If KeyValueArray.Count() = NumberOfParts Then
ReturnMapping.Insert(KeyValueArray[0], KeyValueArray[1]); ReturnMapping.Insert(KeyValueArray[0], KeyValueArray[1]);
Else
ReturnMapping.Insert(KeyValueArray[0], Undefined);
EndIf; EndIf;
EndDo; EndDo;
+186 -47
View File
@@ -82,26 +82,25 @@ EndFunction
// Map Of KeyAndValue - serialized JSON response from storage // Map Of KeyAndValue - serialized JSON response from storage
Function SendRequestWithoutBody(Val Method, Val BasicData, Val Headers = Undefined) Export 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); // Send request with body
Server = URLStructure["Server"]; // Send http request with body
Address = URLStructure["Address"]; //
Safe = URLStructure["Safe"]; // Parameters:
// Method - String - HTTP method - method
Request = OPI_Tools.CreateRequest(Address); // BasicData - Structure of KeyAndValue - Basic request data (with full URL). See GetBasicDataStructure - data
Connection = OPI_Tools.CreateConnection(Server, Safe); // Body - String, BinaryData - Binary data or file of request body data - body
// Headers - Map Of KeyAndValue - Additional request headers, if necessary - headers
AddAdditionalHeaders(Request, Headers); //
// Returns:
AuthorizationHeader = CreateAuthorizationHeader(BasicData, Request, Connection, Method); // Map Of KeyAndValue - serialized JSON response from storage
Request.Headers.Insert("Authorization", AuthorizationHeader); Function SendRequestWithBody(Val Method, Val BasicData, Val Body, Val Headers = Undefined) Export
Response = OPI_Tools.ExecuteRequest(Request, Connection, Method, , True);
Response = FormResponse(Response);
Response = SendRequest(Method, BasicData, Body, Headers);
Return Response; Return Response;
EndFunction EndFunction
@@ -186,6 +185,73 @@ Function CheckBucketAvailability(Val Name
EndFunction 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 // Get buckets list
// Gets a list of buckets. It is possible to use filters if they are provided by your service // 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 EndFunction
Function GetParamsString(Val Request) Function GetParamsString(Request)
URI = Request.ResourceAddress; URI = Request.ResourceAddress;
ParamsStart = StrFind(URI, "?"); ParamsStart = StrFind(URI, "?");
If ParamsStart = 0 Then If ParamsStart = 0 Then
ParameterString = ""; ParameterString = "";
Else Else
URILength = StrLen(URI); URILength = StrLen(URI);
ParameterString = Right(URI, URILength - ParamsStart); ParameterString = Right(URI, URILength - ParamsStart);
ProcessRequestParametersString(ParameterString);
EndIf; EndIf;
ParameterArray = StrSplit(ParameterString, "&");
ParamsList = New ValueList();
ParamsList.LoadValues(ParameterArray);
ParamsList.SortByValue();
ParameterString = StrConcat(ParamsList.UnloadValues(), "&");
Return ParameterString; Return ParameterString;
EndFunction EndFunction
@@ -482,28 +545,69 @@ Function FormAuthorisationHeader(Val AccessKey, Val Scope, Val Signature, Val He
EndFunction 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 #EndRegion
#Region Miscellaneous #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) Function BucketManagment(Val Name, Val BasicData, Val Directory, Val Method, Val Headers)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetBoolean(Directory);
URL = GetServiceURL(BasicData); URL = GetServiceURL(BasicData);
URL = FormBucketURL(URL, Name, Directory);
If Directory Then
URL = URL + Name;
Else
If StrFind(URL, "://") Then
URL = StrReplace(URL, "://", "://" + Name + ".");
Else
URL = Name + "." + URL;
EndIf;
EndIf;
BasicData.Insert("URL", URL); BasicData.Insert("URL", URL);
@@ -519,22 +623,25 @@ Function FormResponse(Val Response, Val ExpectedBinary = False)
If Not ExpectedBinary Or Status > 299 Then If Not ExpectedBinary Or Status > 299 Then
ResponseData = New Map;
BodyData = New Map;
ResponseBody = Response.GetBodyAsString(); ResponseBody = Response.GetBodyAsString();
ResponseBody = TrimAll(ResponseBody); ResponseBody = TrimAll(ResponseBody);
If ValueIsFilled(ResponseBody) Then If ValueIsFilled(ResponseBody) Then
Try Try
ResponseData = OPI_Tools.ProcessXML(ResponseBody); BodyData = OPI_Tools.ProcessXML(ResponseBody);
Except Except
ResponseData = New Structure("notXMLMessage", ResponseBody); BodyData.Insert("notValidXMLMessage", ResponseBody);
EndTry; EndTry;
Else
ResponseData = New Structure;
EndIf; EndIf;
ResponseData = New Structure("status,response", Status, ResponseData); ResponseData = New Map;
ResponseData.Insert("status" , Status);
ResponseData.Insert("response", BodyData);
Else Else
ResponseData = Response.GetBodyAsBinaryData(); ResponseData = Response.GetBodyAsBinaryData();
@@ -596,6 +703,38 @@ Procedure AddAdditionalHeaders(Receiver, Val Headers)
EndProcedure 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
#EndRegion #EndRegion
@@ -443,6 +443,40 @@ Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
EndProcedure 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 Procedure WriteLogCLI(Val Result, Val Method, Val Library = "") Export
WriteLog(Result, Method + " (CLI)"); WriteLog(Result, Method + " (CLI)");
@@ -1961,6 +1995,13 @@ Procedure Check_S3NotFound(Val Result) Export
EndProcedure EndProcedure
Procedure Check_S3NotImplemented(Val Result) Export
Success = Result["status"] = 501;
ExpectsThat(Success).Равно(True);
EndProcedure
#EndRegion #EndRegion
#EndRegion #EndRegion
@@ -2147,40 +2188,6 @@ Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
EndProcedure 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) Procedure WriteCLICall(Val Library, Val Method, Val Options)
If Not OPI_Tools.IsOneScript() Then If Not OPI_Tools.IsOneScript() Then
@@ -2113,6 +2113,8 @@ Procedure AWS_BucketsManagment() Export
S3_CreateBucket(TestParameters); S3_CreateBucket(TestParameters);
S3_GetBucketsList(TestParameters); S3_GetBucketsList(TestParameters);
S3_CheckBucketAvailability(TestParameters); S3_CheckBucketAvailability(TestParameters);
S3_PutBucketEncryption(TestParameters);
S3_GetBucketEncryption(TestParameters);
S3_DeleteBucket(TestParameters); S3_DeleteBucket(TestParameters);
EndProcedure EndProcedure
@@ -14621,7 +14623,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData); Result = OPI_S3.CreateBucket(Name, BasicData);
@@ -14631,7 +14633,7 @@ Procedure S3_CreateBucket(FunctionParameters)
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.CreateBucket(Name, BasicData, False); Result = OPI_S3.CreateBucket(Name, BasicData, False);
@@ -14653,16 +14655,17 @@ Procedure S3_DeleteBucket(FunctionParameters)
// Directory bucket // Directory bucket
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData); Result = OPI_S3.DeleteBucket(Name, BasicData);
OPI_TestDataRetrieval.WriteLog(Result, "DeleteBucket (DB)", "S3"); // SKIP OPI_TestDataRetrieval.WriteLog(Result, "DeleteBucket (DB)", "S3"); // SKIP
OPI_TestDataRetrieval.Check_S3Success(Result); // SKIP OPI_TestDataRetrieval.Check_S3Success(Result); // SKIP
BasicData.Insert("URL", FunctionParameters["S3_URL"]); // SKIP
// General purpose bucket // General purpose bucket
Name = "opi-gpbucket1"; Name = "opi-gpbucket3";
Result = OPI_S3.DeleteBucket(Name, BasicData, False); Result = OPI_S3.DeleteBucket(Name, BasicData, False);
@@ -14693,13 +14696,13 @@ EndProcedure
Procedure S3_CheckBucketAvailability(FunctionParameters) Procedure S3_CheckBucketAvailability(FunctionParameters)
URL = FunctionParameters["S3_URL"]; URL = FunctionParameters["S3_URL"];
AccessKey = FunctionParameters["S3_AccessKey"]; AccessKey = FunctionParameters["S3_AccessKey"];
SecretKey = FunctionParameters["S3_SecretKey"]; SecretKey = FunctionParameters["S3_SecretKey"];
Region = "BTC"; Region = "BTC";
BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region); BasicData = OPI_S3.GetBasicDataStructure(URL, AccessKey, SecretKey, Region);
Name = "opi-dirbucket1"; Name = "opi-dirbucket3";
Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True); Result = OPI_S3.CheckBucketAvailability(Name, BasicData, True);
@@ -14715,6 +14718,56 @@ Procedure S3_CheckBucketAvailability(FunctionParameters)
EndProcedure 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
#EndRegion #EndRegion
@@ -483,6 +483,8 @@ Function RequestParametersToMap(Val ParameterString) Export
If KeyValueArray.Count() = NumberOfParts Then If KeyValueArray.Count() = NumberOfParts Then
ReturnMapping.Insert(KeyValueArray[0], KeyValueArray[1]); ReturnMapping.Insert(KeyValueArray[0], KeyValueArray[1]);
Else
ReturnMapping.Insert(KeyValueArray[0], Undefined);
EndIf; EndIf;
EndDo; EndDo;
@@ -52,11 +52,18 @@ Procedure GetBinaryData(Value) Export
File = New File(Value); File = New File(Value);
If File.Exists() Then If File.Exists() Then
Value = New BinaryData(Value); Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then
ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
Value = OPI_Tools.Get(Value); Value = OPI_Tools.Get(Value);
Else Else
Value = Base64Value(Value); Value = Base64Value(Value);
EndIf; EndIf;
EndIf; EndIf;
@@ -243,20 +250,15 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = TextReader.Read(); Value = TextReader.Read();
TextReader.Close(); TextReader.Close();
ElsIf StrStartsWith(Lower(Value), "http") Then ElsIf StrStartsWith(TrimL(Value), "http://")
Or StrStartsWith(TrimL(Value), "https://") Then
TFN = GetTempFileName(); Value = OPI_Tools.Get(Value);
FileCopy(Value, TFN); GetLine(Value);
TextReader = New TextReader(TFN);
Value = TextReader.Read();
TextReader.Close();
DeleteFiles(TFN);
Else Else
Return; Value = OPI_Tools.NumberToString(Value);
EndIf; EndIf;
@@ -268,6 +270,10 @@ Procedure GetLine(Value, Val FromSource = False) Export
Value = OPI_Tools.JSONString(Value); Value = OPI_Tools.JSONString(Value);
ElsIf TypeOf(Value) = Type("XMLWriter") Then
Value = Value.Close();
Else Else
Return; Return;
EndIf; EndIf;
@@ -92,6 +92,47 @@
NewLine.Область = "Common methods"; 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 = CompositionTable.Add();
NewLine.Библиотека = "s3"; NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3"; NewLine.Модуль = "OPI_S3";
@@ -225,6 +266,98 @@
NewLine.Область = "Buckets managment"; 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 = CompositionTable.Add();
NewLine.Библиотека = "s3"; NewLine.Библиотека = "s3";
NewLine.Модуль = "OPI_S3"; NewLine.Модуль = "OPI_S3";
+60 -60
View File
@@ -81,15 +81,15 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки); Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Отправить запрос с телом // Отправить запрос с телом
// Отправляет http запрос с телом // Отправляет http запрос с телом
// //
// Параметры: // Параметры:
// Метод - Строка - HTTP метод - method // Метод - Строка - HTTP метод - method
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных - data // ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных - data
@@ -99,10 +99,10 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки); Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@@ -186,8 +186,8 @@
КонецФункции КонецФункции
// Установить шифрование бакета // Установить шифрование бакета
// Устанавлиает шифрование бакета по дайджесту // Устанавлиает шифрование бакета по XML конфигурации
// //
// Примечание: // Примечание:
// Метод в документации AWS: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) // Метод в документации AWS: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
// //
@@ -195,35 +195,35 @@
// Наименование - Строка - Наименование бакета - name // Наименование - Строка - Наименование бакета - name
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - data // ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - data
// XMLКонфигурация - Строка - XML строка или файл конфигурации шифрования - conf // XMLКонфигурация - Строка - XML строка или файл конфигурации шифрования - conf
// Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir // Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers // Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьШифрованиеБакета(Знач Наименование Функция УстановитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные , Знач ОсновныеДанные
, Знач XMLКонфигурация , Знач XMLКонфигурация
, Знач Каталог = Истина , Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт , Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(XMLКонфигурация, Истина); OPI_ПреобразованиеТипов.ПолучитьСтроку(XMLКонфигурация, Истина);
XMLКонфигурация = ПолучитьДвоичныеДанныеИзСтроки(XMLКонфигурация); XMLКонфигурация = ПолучитьДвоичныеДанныеИзСтроки(XMLКонфигурация);
URL = ПолучитьURLСервиса(ОсновныеДанные); URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог); URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption"; URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL); ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, XMLКонфигурация, Заголовки); Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, XMLКонфигурация, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить шифрование бакета // Получить шифрование бакета
// Получает установленную ранее конфигурацию шифрования бакета // Получает установленную ранее конфигурацию шифрования бакета
// //
// Примечание: // Примечание:
// Метод в документации AWS: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) // Метод в документации AWS: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
// //
@@ -236,20 +236,20 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьШифрованиеБакета(Знач Наименование Функция ПолучитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные , Знач ОсновныеДанные
, Знач Каталог = Истина , Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт , Знач Заголовки = Неопределено) Экспорт
URL = ПолучитьURLСервиса(ОсновныеДанные); URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог); URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption"; URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL); ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросБезТела("GET", ОсновныеДанные, Заголовки); Ответ = ОтправитьЗапросБезТела("GET", ОсновныеДанные, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список бакетов // Получить список бакетов
@@ -437,22 +437,22 @@
КонецФункции КонецФункции
Функция ПолучитьСтрокуПараметров(Запрос) Функция ПолучитьСтрокуПараметров(Запрос)
URI = Запрос.АдресРесурса; URI = Запрос.АдресРесурса;
НачалоПараметров = СтрНайти(URI, "?"); НачалоПараметров = СтрНайти(URI, "?");
Если НачалоПараметров = 0 Тогда Если НачалоПараметров = 0 Тогда
СтрокаПараметров = ""; СтрокаПараметров = "";
Иначе Иначе
ДлинаURI = СтрДлина(URI); ДлинаURI = СтрДлина(URI);
СтрокаПараметров = Прав(URI, ДлинаURI - НачалоПараметров); СтрокаПараметров = Прав(URI, ДлинаURI - НачалоПараметров);
ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров); ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров);
КонецЕсли; КонецЕсли;
Возврат СтрокаПараметров; Возврат СтрокаПараметров;
КонецФункции КонецФункции
@@ -546,26 +546,26 @@
КонецФункции КонецФункции
Процедура ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров) Процедура ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров)
МассивПараметров = СтрРазделить(СтрокаПараметров, "&"); МассивПараметров = СтрРазделить(СтрокаПараметров, "&");
СписокПараметров = Новый СписокЗначений(); СписокПараметров = Новый СписокЗначений();
СписокПараметров.ЗагрузитьЗначения(МассивПараметров); СписокПараметров.ЗагрузитьЗначения(МассивПараметров);
СписокПараметров.СортироватьПоЗначению(); СписокПараметров.СортироватьПоЗначению();
МассивПараметров = СписокПараметров.ВыгрузитьЗначения(); МассивПараметров = СписокПараметров.ВыгрузитьЗначения();
КонечныйМассивПараметров = Новый Массив; КонечныйМассивПараметров = Новый Массив;
Для Н = 0 По МассивПараметров.ВГраница() Цикл Для Н = 0 По МассивПараметров.ВГраница() Цикл
ПараметрЗапроса = МассивПараметров[Н]; ПараметрЗапроса = МассивПараметров[Н];
Если СтрНайти(ПараметрЗапроса, "=") = 0 Тогда Если СтрНайти(ПараметрЗапроса, "=") = 0 Тогда
МассивПараметров[Н] = ПараметрЗапроса + "="; МассивПараметров[Н] = ПараметрЗапроса + "=";
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
СтрокаПараметров = СтрСоединить(МассивПараметров, "&"); СтрокаПараметров = СтрСоединить(МассивПараметров, "&");
КонецПроцедуры КонецПроцедуры
@@ -574,8 +574,8 @@
#Область Прочее #Область Прочее
Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено) Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено)
ПроверитьОсновныеДанные(ОсновныеДанные); ПроверитьОсновныеДанные(ОсновныеДанные);
URL = ОсновныеДанные["URL"]; URL = ОсновныеДанные["URL"];
@@ -587,7 +587,7 @@
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес); Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, Защищенное); Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, Защищенное);
Если ЗначениеЗаполнено(Тело) Тогда Если ЗначениеЗаполнено(Тело) Тогда
УстановитьТелоЗапроса(Запрос, Тело); УстановитьТелоЗапроса(Запрос, Тело);
КонецЕсли; КонецЕсли;
@@ -607,7 +607,7 @@
Функция УправлениеБакетом(Знач Имя, Знач ОсновныеДанные, Знач Каталог, Знач Метод, Знач Заголовки) Функция УправлениеБакетом(Знач Имя, Знач ОсновныеДанные, Знач Каталог, Знач Метод, Знач Заголовки)
URL = ПолучитьURLСервиса(ОсновныеДанные); URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Имя, Каталог); URL = СформироватьURLБакета(URL, Имя, Каталог);
ОсновныеДанные.Вставить("URL", URL); ОсновныеДанные.Вставить("URL", URL);
@@ -622,7 +622,7 @@
Статус = Ответ.КодСостояния; Статус = Ответ.КодСостояния;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие; ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие; ДанныеТела = Новый Соответствие;
@@ -704,18 +704,18 @@
КонецПроцедуры КонецПроцедуры
Процедура УстановитьТелоЗапроса(Запрос, Тело) Процедура УстановитьТелоЗапроса(Запрос, Тело)
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Тело); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Тело);
Запрос.УстановитьТелоИзДвоичныхДанных(Тело); Запрос.УстановитьТелоИзДвоичныхДанных(Тело);
КонецПроцедуры КонецПроцедуры
Функция СформироватьURLБакета(Знач URL, Знач Имя, Знач Каталог) Функция СформироватьURLБакета(Знач URL, Знач Имя, Знач Каталог)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог); OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог);
Если Каталог Тогда Если Каталог Тогда
URL = URL + Имя; URL = URL + Имя;
Иначе Иначе
@@ -725,14 +725,14 @@
URL = Имя + "." + URL; URL = Имя + "." + URL;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/"; URL = URL + "/";
КонецЕсли; КонецЕсли;
Возврат URL; Возврат URL;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@@ -14734,7 +14734,7 @@
// END // END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3"); OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат); OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3"); OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3");
КонецПроцедуры КонецПроцедуры
@@ -14749,8 +14749,8 @@
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region); ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2"; Имя = "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> | <Rule>
| <ApplyServerSideEncryptionByDefault> | <ApplyServerSideEncryptionByDefault>
| <SSEAlgorithm>AES256</SSEAlgorithm> | <SSEAlgorithm>AES256</SSEAlgorithm>
@@ -14758,7 +14758,7 @@
| </Rule> | </Rule>
|</ServerSideEncryptionConfiguration>"; |</ServerSideEncryptionConfiguration>";
Результат = OPI_S3.УстановитьШифрованиеБакета(Имя, ОсновныеДанные, КонфигурацияXML, Ложь); Результат = OPI_S3.УстановитьШифрованиеБакета(Имя, ОсновныеДанные, XMLКонфигурация, Ложь);
// END // END
@@ -1996,11 +1996,11 @@
КонецПроцедуры КонецПроцедуры
Процедура Проверка_S3НеПоддерживается(Знач Результат) Экспорт Процедура Проверка_S3НеПоддерживается(Знач Результат) Экспорт
Успех = Результат["status"] = 501; Успех = Результат["status"] = 501;
ОжидаетЧто(Успех).Равно(Истина); ОжидаетЧто(Успех).Равно(Истина);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -2038,9 +2038,9 @@
КонецФункции КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя) Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя); Модуль = Вычислить(Имя);
Возврат Модуль; Возврат Модуль;
КонецФункции КонецФункции
@@ -52,18 +52,18 @@
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение); Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://") ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
Иначе Иначе
Значение = Base64Значение(Значение); Значение = Base64Значение(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -252,7 +252,7 @@
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://") ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
ПолучитьСтроку(Значение); ПолучитьСтроку(Значение);
@@ -269,11 +269,11 @@
ИначеЕсли ЭтоКоллекция(Значение) Тогда ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение); Значение = OPI_Инструменты.JSONСтрокой(Значение);
ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда
Значение = Значение.Закрыть(); Значение = Значение.Закрыть();
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
+60 -60
View File
@@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_S3.os // OneScript: ./OInt/core/Modules/OPI_S3.os
// Lib: S3 // Lib: S3
// CLI: s3 // CLI: s3
@@ -81,15 +81,15 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт Функция ОтправитьЗапросБезТела(Знач Метод, Знач ОсновныеДанные, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки); Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, , Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Отправить запрос с телом // Отправить запрос с телом
// Отправляет http запрос с телом // Отправляет http запрос с телом
// //
// Параметры: // Параметры:
// Метод - Строка - HTTP метод - method // Метод - Строка - HTTP метод - method
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных - data // ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса (c полным URL). См. ПолучитьСтруктуруДанных - data
@@ -99,10 +99,10 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт Функция ОтправитьЗапросСТелом(Знач Метод, Знач ОсновныеДанные, Знач Тело, Знач Заголовки = Неопределено) Экспорт
Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки); Ответ = ОтправитьЗапрос(Метод, ОсновныеДанные, Тело, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@@ -187,7 +187,7 @@
// Установить шифрование бакета // Установить шифрование бакета
// Устанавлиает шифрование бакета по XML конфигурации // Устанавлиает шифрование бакета по XML конфигурации
// //
// Примечание: // Примечание:
// Метод в документации AWS: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html) // Метод в документации AWS: [PutBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)
// //
@@ -195,35 +195,35 @@
// Наименование - Строка - Наименование бакета - name // Наименование - Строка - Наименование бакета - name
// ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - data // ОсновныеДанные - Структура Из КлючИЗначение - Основные данные запроса. См. ПолучитьСтруктуруДанных - data
// XMLКонфигурация - Строка - XML строка или файл конфигурации шифрования - conf // XMLКонфигурация - Строка - XML строка или файл конфигурации шифрования - conf
// Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir // Каталог - Булево - Истина > Directory Bucket, Ложь > General Purpose Bucket - dir
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers // Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция УстановитьШифрованиеБакета(Знач Наименование Функция УстановитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные , Знач ОсновныеДанные
, Знач XMLКонфигурация , Знач XMLКонфигурация
, Знач Каталог = Истина , Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт , Знач Заголовки = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(XMLКонфигурация, Истина); OPI_ПреобразованиеТипов.ПолучитьСтроку(XMLКонфигурация, Истина);
XMLКонфигурация = ПолучитьДвоичныеДанныеИзСтроки(XMLКонфигурация); XMLКонфигурация = ПолучитьДвоичныеДанныеИзСтроки(XMLКонфигурация);
URL = ПолучитьURLСервиса(ОсновныеДанные); URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог); URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption"; URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL); ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, XMLКонфигурация, Заголовки); Ответ = ОтправитьЗапросСТелом("PUT", ОсновныеДанные, XMLКонфигурация, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить шифрование бакета // Получить шифрование бакета
// Получает установленную ранее конфигурацию шифрования бакета // Получает установленную ранее конфигурацию шифрования бакета
// //
// Примечание: // Примечание:
// Метод в документации AWS: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html) // Метод в документации AWS: [GetBucketEncryption](@docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketEncryption.html)
// //
@@ -236,20 +236,20 @@
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища // Соответствие Из КлючИЗначение - сериализованный JSON ответа от хранилища
Функция ПолучитьШифрованиеБакета(Знач Наименование Функция ПолучитьШифрованиеБакета(Знач Наименование
, Знач ОсновныеДанные , Знач ОсновныеДанные
, Знач Каталог = Истина , Знач Каталог = Истина
, Знач Заголовки = Неопределено) Экспорт , Знач Заголовки = Неопределено) Экспорт
URL = ПолучитьURLСервиса(ОсновныеДанные); URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Наименование, Каталог); URL = СформироватьURLБакета(URL, Наименование, Каталог);
URL = URL + "?encryption"; URL = URL + "?encryption";
ОсновныеДанные.Вставить("URL", URL); ОсновныеДанные.Вставить("URL", URL);
Ответ = ОтправитьЗапросБезТела("GET", ОсновныеДанные, Заголовки); Ответ = ОтправитьЗапросБезТела("GET", ОсновныеДанные, Заголовки);
Возврат Ответ; Возврат Ответ;
КонецФункции КонецФункции
// Получить список бакетов // Получить список бакетов
@@ -437,22 +437,22 @@
КонецФункции КонецФункции
Функция ПолучитьСтрокуПараметров(Запрос) Функция ПолучитьСтрокуПараметров(Запрос)
URI = Запрос.АдресРесурса; URI = Запрос.АдресРесурса;
НачалоПараметров = СтрНайти(URI, "?"); НачалоПараметров = СтрНайти(URI, "?");
Если НачалоПараметров = 0 Тогда Если НачалоПараметров = 0 Тогда
СтрокаПараметров = ""; СтрокаПараметров = "";
Иначе Иначе
ДлинаURI = СтрДлина(URI); ДлинаURI = СтрДлина(URI);
СтрокаПараметров = Прав(URI, ДлинаURI - НачалоПараметров); СтрокаПараметров = Прав(URI, ДлинаURI - НачалоПараметров);
ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров); ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров);
КонецЕсли; КонецЕсли;
Возврат СтрокаПараметров; Возврат СтрокаПараметров;
КонецФункции КонецФункции
@@ -546,26 +546,26 @@
КонецФункции КонецФункции
Процедура ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров) Процедура ОбработатьСтрокуПараметровЗапроса(СтрокаПараметров)
МассивПараметров = СтрРазделить(СтрокаПараметров, "&"); МассивПараметров = СтрРазделить(СтрокаПараметров, "&");
СписокПараметров = Новый СписокЗначений(); СписокПараметров = Новый СписокЗначений();
СписокПараметров.ЗагрузитьЗначения(МассивПараметров); СписокПараметров.ЗагрузитьЗначения(МассивПараметров);
СписокПараметров.СортироватьПоЗначению(); СписокПараметров.СортироватьПоЗначению();
МассивПараметров = СписокПараметров.ВыгрузитьЗначения(); МассивПараметров = СписокПараметров.ВыгрузитьЗначения();
КонечныйМассивПараметров = Новый Массив; КонечныйМассивПараметров = Новый Массив;
Для Н = 0 По МассивПараметров.ВГраница() Цикл Для Н = 0 По МассивПараметров.ВГраница() Цикл
ПараметрЗапроса = МассивПараметров[Н]; ПараметрЗапроса = МассивПараметров[Н];
Если СтрНайти(ПараметрЗапроса, "=") = 0 Тогда Если СтрНайти(ПараметрЗапроса, "=") = 0 Тогда
МассивПараметров[Н] = ПараметрЗапроса + "="; МассивПараметров[Н] = ПараметрЗапроса + "=";
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
СтрокаПараметров = СтрСоединить(МассивПараметров, "&"); СтрокаПараметров = СтрСоединить(МассивПараметров, "&");
КонецПроцедуры КонецПроцедуры
@@ -574,8 +574,8 @@
#Область Прочее #Область Прочее
Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено) Функция ОтправитьЗапрос(Знач Метод, Знач ОсновныеДанные, Знач Тело = Неопределено, Знач Заголовки = Неопределено)
ПроверитьОсновныеДанные(ОсновныеДанные); ПроверитьОсновныеДанные(ОсновныеДанные);
URL = ОсновныеДанные["URL"]; URL = ОсновныеДанные["URL"];
@@ -587,7 +587,7 @@
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес); Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, Защищенное); Соединение = OPI_Инструменты.СоздатьСоединение(Сервер, Защищенное);
Если ЗначениеЗаполнено(Тело) Тогда Если ЗначениеЗаполнено(Тело) Тогда
УстановитьТелоЗапроса(Запрос, Тело); УстановитьТелоЗапроса(Запрос, Тело);
КонецЕсли; КонецЕсли;
@@ -607,7 +607,7 @@
Функция УправлениеБакетом(Знач Имя, Знач ОсновныеДанные, Знач Каталог, Знач Метод, Знач Заголовки) Функция УправлениеБакетом(Знач Имя, Знач ОсновныеДанные, Знач Каталог, Знач Метод, Знач Заголовки)
URL = ПолучитьURLСервиса(ОсновныеДанные); URL = ПолучитьURLСервиса(ОсновныеДанные);
URL = СформироватьURLБакета(URL, Имя, Каталог); URL = СформироватьURLБакета(URL, Имя, Каталог);
ОсновныеДанные.Вставить("URL", URL); ОсновныеДанные.Вставить("URL", URL);
@@ -622,7 +622,7 @@
Статус = Ответ.КодСостояния; Статус = Ответ.КодСостояния;
Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда Если Не ОжидаютсяДвоичные Или Статус > 299 Тогда
ДанныеОтвета = Новый Соответствие; ДанныеОтвета = Новый Соответствие;
ДанныеТела = Новый Соответствие; ДанныеТела = Новый Соответствие;
@@ -704,18 +704,18 @@
КонецПроцедуры КонецПроцедуры
Процедура УстановитьТелоЗапроса(Запрос, Тело) Процедура УстановитьТелоЗапроса(Запрос, Тело)
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Тело); OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Тело);
Запрос.УстановитьТелоИзДвоичныхДанных(Тело); Запрос.УстановитьТелоИзДвоичныхДанных(Тело);
КонецПроцедуры КонецПроцедуры
Функция СформироватьURLБакета(Знач URL, Знач Имя, Знач Каталог) Функция СформироватьURLБакета(Знач URL, Знач Имя, Знач Каталог)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя); OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог); OPI_ПреобразованиеТипов.ПолучитьБулево(Каталог);
Если Каталог Тогда Если Каталог Тогда
URL = URL + Имя; URL = URL + Имя;
Иначе Иначе
@@ -725,14 +725,14 @@
URL = Имя + "." + URL; URL = Имя + "." + URL;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/"; URL = URL + "/";
КонецЕсли; КонецЕсли;
Возврат URL; Возврат URL;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os // OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
// MIT License // MIT License
@@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os // OneScript: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
// MIT License // MIT License
@@ -1996,11 +1996,11 @@
КонецПроцедуры КонецПроцедуры
Процедура Проверка_S3НеПоддерживается(Знач Результат) Экспорт Процедура Проверка_S3НеПоддерживается(Знач Результат) Экспорт
Успех = Результат["status"] = 501; Успех = Результат["status"] = 501;
ОжидаетЧто(Успех).Равно(Истина); ОжидаетЧто(Успех).Равно(Истина);
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os // OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// MIT License // MIT License
@@ -52,18 +52,18 @@
Файл = Новый Файл(Значение); Файл = Новый Файл(Значение);
Если Файл.Существует() Тогда Если Файл.Существует() Тогда
Значение = Новый ДвоичныеДанные(Значение); Значение = Новый ДвоичныеДанные(Значение);
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://") ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
Иначе Иначе
Значение = Base64Значение(Значение); Значение = Base64Значение(Значение);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -252,7 +252,7 @@
ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://") ИначеЕсли СтрНачинаетсяС(СокрЛ(Значение), "http://")
Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда Или СтрНачинаетсяС(СокрЛ(Значение), "https://") Тогда
Значение = OPI_Инструменты.Get(Значение); Значение = OPI_Инструменты.Get(Значение);
ПолучитьСтроку(Значение); ПолучитьСтроку(Значение);
@@ -269,11 +269,11 @@
ИначеЕсли ЭтоКоллекция(Значение) Тогда ИначеЕсли ЭтоКоллекция(Значение) Тогда
Значение = OPI_Инструменты.JSONСтрокой(Значение); Значение = OPI_Инструменты.JSONСтрокой(Значение);
ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда
Значение = Значение.Закрыть(); Значение = Значение.Закрыть();
Иначе Иначе
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os // OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License // MIT License
@@ -14734,7 +14734,7 @@
// END // END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3"); OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьШифрованиеБакета", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат); OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3"); OPI_ПолучениеДанныхТестов.ЗаписатьФайлЛога("", "ПолучитьШифрованиеБакета", "S3");
КонецПроцедуры КонецПроцедуры
@@ -14749,7 +14749,7 @@
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region); ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
Имя = "opi-newbucket2"; Имя = "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> | <Rule>
| <ApplyServerSideEncryptionByDefault> | <ApplyServerSideEncryptionByDefault>
@@ -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"; НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_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"; НоваяСтрока.Библиотека = "s3";
НоваяСтрока.Модуль = "OPI_S3"; НоваяСтрока.Модуль = "OPI_S3";