mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-04-04 22:14:37 +02:00
S3: Подписание URL для прямого скачивания
This commit is contained in:
parent
c74dd55a72
commit
79f3584b0d
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Airtable.os
|
// OneScript: ./OInt/core/Modules/OPI_Airtable.os
|
||||||
// Lib: Airtable
|
// Lib: Airtable
|
||||||
// CLI: airtable
|
// CLI: airtable
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Bitrix24.os
|
// OneScript: ./OInt/core/Modules/OPI_Bitrix24.os
|
||||||
// Lib: Bitrix24
|
// Lib: Bitrix24
|
||||||
// CLI: bitrix24
|
// CLI: bitrix24
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_CDEK.os
|
// OneScript: ./OInt/core/Modules/OPI_CDEK.os
|
||||||
// Lib: CDEK
|
// Lib: CDEK
|
||||||
// CLI: cdek
|
// CLI: cdek
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Dropbox.os
|
// OneScript: ./OInt/core/Modules/OPI_Dropbox.os
|
||||||
// Lib: Dropbox
|
// Lib: Dropbox
|
||||||
// CLI: dropbox
|
// CLI: dropbox
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_GoogleCalendar.os
|
// OneScript: ./OInt/core/Modules/OPI_GoogleCalendar.os
|
||||||
// Lib: Google Calendar
|
// Lib: Google Calendar
|
||||||
// CLI: gcalendar
|
// CLI: gcalendar
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_GoogleDrive.os
|
// OneScript: ./OInt/core/Modules/OPI_GoogleDrive.os
|
||||||
// Lib: Google Drive
|
// Lib: Google Drive
|
||||||
// CLI: gdrive
|
// CLI: gdrive
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_GoogleSheets.os
|
// OneScript: ./OInt/core/Modules/OPI_GoogleSheets.os
|
||||||
// Lib: Google Sheets
|
// Lib: Google Sheets
|
||||||
// CLI: gsheets
|
// CLI: gsheets
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_GoogleWorkspace.os
|
// OneScript: ./OInt/core/Modules/OPI_GoogleWorkspace.os
|
||||||
// Lib: Google Workspace
|
// Lib: Google Workspace
|
||||||
// CLI: google
|
// CLI: google
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Neocities.os
|
// OneScript: ./OInt/core/Modules/OPI_Neocities.os
|
||||||
// Lib: Neocities
|
// Lib: Neocities
|
||||||
// CLI: neocities
|
// CLI: neocities
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Notion.os
|
// OneScript: ./OInt/core/Modules/OPI_Notion.os
|
||||||
// Lib: Notion
|
// Lib: Notion
|
||||||
// CLI: notion
|
// CLI: notion
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Ozon.os
|
// OneScript: ./OInt/core/Modules/OPI_Ozon.os
|
||||||
// Lib: Ozon
|
// Lib: Ozon
|
||||||
// CLI: ozon
|
// CLI: ozon
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
@ -1182,15 +1182,22 @@
|
|||||||
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
|
// Заголовки - Соответствие Из КлючИЗначение - Дополнительные заголовки запроса, если необходимо - headers
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Структура Из КлючИЗначение - сериализованный JSON ответа от хранилища
|
// Строка - URL для получения объекта
|
||||||
Функция ПолучитьСсылкуСкачиванияОбъекта(Знач Наименование
|
Функция ПолучитьСсылкуСкачиванияОбъекта(Знач Наименование
|
||||||
, Знач Бакет
|
, Знач Бакет
|
||||||
, Знач ОсновныеДанные
|
, Знач ОсновныеДанные
|
||||||
, Знач ВремяЖизни = 3600
|
, Знач ВремяЖизни = 3600
|
||||||
, Знач Заголовки = Неопределено)
|
, Знач Заголовки = Неопределено) Экспорт
|
||||||
|
|
||||||
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
|
ОсновныеДанные_ = OPI_Инструменты.КопироватьКоллекцию(ОсновныеДанные);
|
||||||
ЗаполнитьURLОбъекта(ОсновныеДанные_, Наименование, Бакет, Версия);
|
|
||||||
|
ПроверитьОсновныеДанные(ОсновныеДанные_);
|
||||||
|
ЗаполнитьURLОбъекта(ОсновныеДанные_, Наименование, Бакет);
|
||||||
|
|
||||||
|
Подпись = СоздатьПодписьURL(ОсновныеДанные_, Наименование, "GET", ВремяЖизни, Заголовки);
|
||||||
|
URL = ОсновныеДанные_["URL"] + Подпись;
|
||||||
|
|
||||||
|
Возврат URL;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
@ -1205,15 +1212,98 @@
|
|||||||
Функция СоздатьЗаголовокАвторизации(Знач СтруктураДанных, Знач Запрос, Знач Соединение, Знач Метод)
|
Функция СоздатьЗаголовокАвторизации(Знач СтруктураДанных, Знач Запрос, Знач Соединение, Знач Метод)
|
||||||
|
|
||||||
AccessKey = СтруктураДанных["AccessKey"];
|
AccessKey = СтруктураДанных["AccessKey"];
|
||||||
SecretKey = СтруктураДанных["SecretKey"];
|
|
||||||
Region = СтруктураДанных["Region"];
|
|
||||||
Service = СтруктураДанных["Service"];
|
|
||||||
|
|
||||||
ТекущаяДата = ТекущаяУниверсальнаяДата();
|
ТекущаяДата = ТекущаяУниверсальнаяДата();
|
||||||
|
|
||||||
Запрос.Заголовки.Вставить("x-amz-date", OPI_Инструменты.ВременнаяМеткаISO(ТекущаяДата));
|
Запрос.Заголовки.Вставить("x-amz-date", OPI_Инструменты.ВременнаяМеткаISO(ТекущаяДата));
|
||||||
Запрос.Заголовки.Вставить("Host" , Соединение.Сервер);
|
Запрос.Заголовки.Вставить("Host" , Соединение.Сервер);
|
||||||
|
|
||||||
|
ОсновныеЧасти = ПолучитьОсновныеСоставляющиеПодписи(СтруктураДанных, Запрос, Соединение, Метод, ТекущаяДата);
|
||||||
|
|
||||||
|
Скоуп = ОсновныеЧасти["Скоуп"];
|
||||||
|
Сигнатура = ОсновныеЧасти["Сигнатура"];
|
||||||
|
КлючиЗаголовков = ОсновныеЧасти["КлючиЗаголовков"];
|
||||||
|
|
||||||
|
ЗаголовокАвторизации = СформироватьЗаголовокАвторизации(AccessKey, Скоуп, Сигнатура, КлючиЗаголовков);
|
||||||
|
|
||||||
|
Возврат ЗаголовокАвторизации;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция СоздатьПодписьURL(Знач СтруктураДанных, Знач Наименование, Знач Метод, Знач ВремяЖизни, Знач Заголовки)
|
||||||
|
|
||||||
|
AccessKey = СтруктураДанных["AccessKey"];
|
||||||
|
SecretKey = СтруктураДанных["SecretKey"];
|
||||||
|
Region = СтруктураДанных["Region"];
|
||||||
|
Service = СтруктураДанных["Service"];
|
||||||
|
URL = СтруктураДанных["URL"];
|
||||||
|
|
||||||
|
РазбитыйURL = OPI_Инструменты.РазбитьURL(URL);
|
||||||
|
|
||||||
|
Сервер = РазбитыйURL["Сервер"];
|
||||||
|
Адрес = РазбитыйURL["Адрес"];
|
||||||
|
|
||||||
|
ДопЗаголовки = Новый Структура("Host", Сервер);
|
||||||
|
ДобавитьДополнительныеЗаголовки(Заголовки, ДопЗаголовки);
|
||||||
|
|
||||||
|
ТекущаяДата = ТекущаяУниверсальнаяДата();
|
||||||
|
КлючПодписи = ПолучитьКлючПодписи(SecretKey, Region, Service, ТекущаяДата);
|
||||||
|
Скоуп = СоздатьСкоуп(Region, Service, ТекущаяДата);
|
||||||
|
ВременнаяМетка = OPI_Инструменты.ВременнаяМеткаISO(ТекущаяДата);
|
||||||
|
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков(Заголовки);
|
||||||
|
Основа = КодироватьСтроку(AccessKey + "/" + Скоуп, СпособКодированияСтроки.КодировкаURL);
|
||||||
|
|
||||||
|
СтрокаЗаголовков = ПолучитьСтрокуЗаголовков(Заголовки);
|
||||||
|
СтрокаХеша = "UNSIGNED-PAYLOAD";
|
||||||
|
|
||||||
|
ПараметрыURL = Новый ТаблицаЗначений;
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Algorithm" , "AWS4-HMAC-SHA256");
|
||||||
|
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Credential" , Основа);
|
||||||
|
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Date" , ВременнаяМетка);
|
||||||
|
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Expires" , ВремяЖизни);
|
||||||
|
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-SignedHeaders", КлючиЗаголовков);
|
||||||
|
|
||||||
|
ПараметрыСтрокой = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||||
|
ПараметрыСтрокой = Прав(ПараметрыСтрокой, СтрДлина(ПараметрыСтрокой) - 1);
|
||||||
|
ШаблонЗапроса = "";
|
||||||
|
|
||||||
|
Для Н = 1 По 6 Цикл
|
||||||
|
|
||||||
|
ШаблонЗапроса = ШаблонЗапроса + "%" + Строка(Н) + ?(Н = 6, "", Символы.ПС);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КаноническийЗапрос = СтрШаблон(ШаблонЗапроса
|
||||||
|
, Метод
|
||||||
|
, Адрес
|
||||||
|
, ПараметрыСтрокой
|
||||||
|
, СтрокаЗаголовков
|
||||||
|
, КлючиЗаголовков
|
||||||
|
, СтрокаХеша);
|
||||||
|
|
||||||
|
СтрокаДляПодписи = СоздатьСтрокуПодписи(КаноническийЗапрос, Скоуп, ТекущаяДата);
|
||||||
|
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
|
||||||
|
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
|
||||||
|
|
||||||
|
|
||||||
|
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Signature", Сигнатура);
|
||||||
|
|
||||||
|
ПодписьURL = OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||||
|
|
||||||
|
Возврат ПодписьURL;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПолучитьОсновныеСоставляющиеПодписи(Знач СтруктураДанных
|
||||||
|
, Знач Запрос
|
||||||
|
, Знач Соединение
|
||||||
|
, Знач Метод
|
||||||
|
, Знач ТекущаяДата)
|
||||||
|
|
||||||
|
SecretKey = СтруктураДанных["SecretKey"];
|
||||||
|
Region = СтруктураДанных["Region"];
|
||||||
|
Service = СтруктураДанных["Service"];
|
||||||
|
|
||||||
КлючПодписи = ПолучитьКлючПодписи(SecretKey, Region, Service, ТекущаяДата);
|
КлючПодписи = ПолучитьКлючПодписи(SecretKey, Region, Service, ТекущаяДата);
|
||||||
КаноническийЗапрос = СоздатьКаноническийЗапрос(Запрос, Соединение, Метод);
|
КаноническийЗапрос = СоздатьКаноническийЗапрос(Запрос, Соединение, Метод);
|
||||||
Скоуп = СоздатьСкоуп(Region, Service, ТекущаяДата);
|
Скоуп = СоздатьСкоуп(Region, Service, ТекущаяДата);
|
||||||
@ -1222,10 +1312,15 @@
|
|||||||
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
|
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
|
||||||
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
|
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
|
||||||
|
|
||||||
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков(Запрос);
|
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков(Запрос.Заголовки);
|
||||||
ЗаголовокАвторизации = СформироватьЗаголовокАвторизации(AccessKey, Скоуп, Сигнатура, КлючиЗаголовков);
|
|
||||||
|
|
||||||
Возврат ЗаголовокАвторизации;
|
СтруктураЧастей = Новый Структура;
|
||||||
|
|
||||||
|
СтруктураЧастей.Вставить("Скоуп" , Скоуп);
|
||||||
|
СтруктураЧастей.Вставить("Сигнатура" , Сигнатура);
|
||||||
|
СтруктураЧастей.Вставить("КлючиЗаголовков", КлючиЗаголовков);
|
||||||
|
|
||||||
|
Возврат СтруктураЧастей;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
@ -1249,11 +1344,11 @@
|
|||||||
|
|
||||||
Функция СоздатьКаноническийЗапрос(Знач Запрос, Знач Соединение, Знач Метод)
|
Функция СоздатьКаноническийЗапрос(Знач Запрос, Знач Соединение, Знач Метод)
|
||||||
|
|
||||||
|
ШаблонЗапроса = "";
|
||||||
ТелоЗапроса = OPI_Инструменты.ПолучитьТелоЗапроса(Запрос);
|
ТелоЗапроса = OPI_Инструменты.ПолучитьТелоЗапроса(Запрос);
|
||||||
ХешСумма = OPI_Криптография.Хеш(ТелоЗапроса, ХешФункция.SHA256);
|
ХешСумма = OPI_Криптография.Хеш(ТелоЗапроса, ХешФункция.SHA256);
|
||||||
Запрос.Заголовки.Вставить("x-amz-content-sha256", нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма)));
|
|
||||||
|
|
||||||
ШаблонЗапроса = "";
|
Запрос.Заголовки.Вставить("x-amz-content-sha256", нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма)));
|
||||||
|
|
||||||
Для Н = 1 По 6 Цикл
|
Для Н = 1 По 6 Цикл
|
||||||
|
|
||||||
@ -1264,8 +1359,8 @@
|
|||||||
Метод = вРег(Метод);
|
Метод = вРег(Метод);
|
||||||
СтрокаURI = ПолучитьСтрокуURI(Запрос);
|
СтрокаURI = ПолучитьСтрокуURI(Запрос);
|
||||||
СтрокаПараметров = ПолучитьСтрокуПараметров(Запрос);
|
СтрокаПараметров = ПолучитьСтрокуПараметров(Запрос);
|
||||||
СтрокаЗаголовков = ПолучитьСтрокуЗаголовков(Запрос);
|
СтрокаЗаголовков = ПолучитьСтрокуЗаголовков(Запрос.Заголовки);
|
||||||
СтрокаКлючей = ПолучитьСтрокуКлючейЗаголовков(Запрос);
|
СтрокаКлючей = ПолучитьСтрокуКлючейЗаголовков(Запрос.Заголовки);
|
||||||
|
|
||||||
СтрокаХэша = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма));
|
СтрокаХэша = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(ХешСумма));
|
||||||
|
|
||||||
@ -1356,10 +1451,9 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция ПолучитьСтрокуЗаголовков(Знач Запрос)
|
Функция ПолучитьСтрокуЗаголовков(Знач Заголовки)
|
||||||
|
|
||||||
СписокЗаголовков = Новый СписокЗначений;
|
СписокЗаголовков = Новый СписокЗначений;
|
||||||
Заголовки = Запрос.Заголовки;
|
|
||||||
|
|
||||||
Для Каждого Заголовок Из Заголовки Цикл
|
Для Каждого Заголовок Из Заголовки Цикл
|
||||||
|
|
||||||
@ -1384,10 +1478,9 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция ПолучитьСтрокуКлючейЗаголовков(Знач Запрос)
|
Функция ПолучитьСтрокуКлючейЗаголовков(Знач Заголовки)
|
||||||
|
|
||||||
СписокЗаголовков = Новый СписокЗначений;
|
СписокЗаголовков = Новый СписокЗначений;
|
||||||
Заголовки = Запрос.Заголовки;
|
|
||||||
|
|
||||||
Для Каждого Заголовок Из Заголовки Цикл
|
Для Каждого Заголовок Из Заголовки Цикл
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Slack.os
|
// OneScript: ./OInt/core/Modules/OPI_Slack.os
|
||||||
// Lib: Slack
|
// Lib: Slack
|
||||||
// CLI: slack
|
// CLI: slack
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Telegram.os
|
// OneScript: ./OInt/core/Modules/OPI_Telegram.os
|
||||||
// Lib: Telegram
|
// Lib: Telegram
|
||||||
// CLI: telegram
|
// CLI: telegram
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Twitter.os
|
// OneScript: ./OInt/core/Modules/OPI_Twitter.os
|
||||||
// Lib: Twitter
|
// Lib: Twitter
|
||||||
// CLI: twitter
|
// CLI: twitter
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_VK.os
|
// OneScript: ./OInt/core/Modules/OPI_VK.os
|
||||||
// Lib: VK
|
// Lib: VK
|
||||||
// CLI: vk
|
// CLI: vk
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_VKTeams.os
|
// OneScript: ./OInt/core/Modules/OPI_VKTeams.os
|
||||||
// Lib: VKTeams
|
// Lib: VKTeams
|
||||||
// CLI: vkteams
|
// CLI: vkteams
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_Viber.os
|
// OneScript: ./OInt/core/Modules/OPI_Viber.os
|
||||||
// Lib: Viber
|
// Lib: Viber
|
||||||
// CLI: viber
|
// CLI: viber
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_YandexDisk.os
|
// OneScript: ./OInt/core/Modules/OPI_YandexDisk.os
|
||||||
// Lib: Yandex Disk
|
// Lib: Yandex Disk
|
||||||
// CLI: yadisk
|
// CLI: yadisk
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_YandexID.os
|
// OneScript: ./OInt/core/Modules/OPI_YandexID.os
|
||||||
// Lib: Yandex ID
|
// Lib: Yandex ID
|
||||||
// CLI: yandex
|
// CLI: yandex
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_YandexMarket.os
|
// OneScript: ./OInt/core/Modules/OPI_YandexMarket.os
|
||||||
// Lib: Yandex Market
|
// Lib: Yandex Market
|
||||||
// CLI: yamarket
|
// CLI: yamarket
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/core/Modules/OPI_YandexMetrika.os
|
// OneScript: ./OInt/core/Modules/OPI_YandexMetrika.os
|
||||||
// Lib: Yandex Metrika
|
// Lib: Yandex Metrika
|
||||||
// CLI: metrika
|
// CLI: metrika
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
|
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
|
||||||
|
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
@ -36,6 +36,7 @@
|
|||||||
//@skip-check module-structure-top-region
|
//@skip-check module-structure-top-region
|
||||||
//@skip-check module-structure-method-in-regions
|
//@skip-check module-structure-method-in-regions
|
||||||
//@skip-check wrong-string-literal-content
|
//@skip-check wrong-string-literal-content
|
||||||
|
|
||||||
#Область СлужебныйПрограммныйИнтерфейс
|
#Область СлужебныйПрограммныйИнтерфейс
|
||||||
|
|
||||||
#Область HTTPМетоды
|
#Область HTTPМетоды
|
||||||
@ -190,20 +191,24 @@
|
|||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
Функция СоздатьСоединение(Знач Сервер, Знач Защищенное = Истина, Знач Пользователь = "", Знач Пароль = "") Экспорт
|
Функция СоздатьСоединение(Знач Сервер, Знач Защищенное = Истина, Знач Пользователь = "", Знач Пароль = "", Знач Порт = "") Экспорт
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(Порт) Тогда
|
||||||
|
Порт = ?(Защищенное, 443, 80);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Если Защищенное Тогда
|
Если Защищенное Тогда
|
||||||
|
|
||||||
Если ЭтоOneScript() Тогда
|
Если ЭтоOneScript() Тогда
|
||||||
Соединение = Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000);
|
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 3000);
|
||||||
Иначе
|
Иначе
|
||||||
SSL = Новый ЗащищенноеСоединениеOpenSSL;
|
SSL = Новый ЗащищенноеСоединениеOpenSSL;
|
||||||
Соединение = Новый HTTPСоединение(Сервер, 443, Пользователь, Пароль, , 3000, SSL);
|
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 3000, SSL);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
Иначе
|
Иначе
|
||||||
|
|
||||||
Соединение = Новый HTTPСоединение(Сервер, 80, Пользователь, Пароль, , 3000, SSL);
|
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 3000);
|
||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
@ -227,8 +232,9 @@
|
|||||||
Сервер = СтруктураURL["Сервер"];
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Адрес = СтруктураURL["Адрес"];
|
Адрес = СтруктураURL["Адрес"];
|
||||||
Защищенное = СтруктураURL["Защищенное"];
|
Защищенное = СтруктураURL["Защищенное"];
|
||||||
|
Порт = СтруктураURL["Порт"];
|
||||||
|
|
||||||
Соединение = СоздатьСоединение(Сервер, Защищенное);
|
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
|
||||||
Запрос.АдресРесурса = Адрес;
|
Запрос.АдресРесурса = Адрес;
|
||||||
|
|
||||||
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета, ПолныйОтвет);
|
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета, ПолныйОтвет);
|
||||||
@ -344,7 +350,6 @@
|
|||||||
|
|
||||||
URL = СтрЗаменить(URL, "https://", "");
|
URL = СтрЗаменить(URL, "https://", "");
|
||||||
URL = СтрЗаменить(URL, "http://" , "");
|
URL = СтрЗаменить(URL, "http://" , "");
|
||||||
URL = СтрЗаменить(URL, ":443" , "");
|
|
||||||
|
|
||||||
Если СтрНайти(URL, "/") = 0 Тогда
|
Если СтрНайти(URL, "/") = 0 Тогда
|
||||||
Адрес = "";
|
Адрес = "";
|
||||||
@ -354,6 +359,20 @@
|
|||||||
Сервер = Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1);
|
Сервер = Лев(URL, СтрНайти(URL, "/", НаправлениеПоиска.СНачала) - 1);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если СтрНайти(Сервер, ":") <> 0 Тогда
|
||||||
|
|
||||||
|
СерверПорт = СтрРазделить(Сервер, ":");
|
||||||
|
Сервер = СерверПорт[0];
|
||||||
|
Порт = СерверПорт[1];
|
||||||
|
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьЧисло(Порт);
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Порт = ?(ЗащищенноеСоединение, 443, 80);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Если ЭтоOneScript() И ЗащищенноеСоединение Тогда
|
Если ЭтоOneScript() И ЗащищенноеСоединение Тогда
|
||||||
Сервер = "https://" + Сервер;
|
Сервер = "https://" + Сервер;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
@ -362,6 +381,7 @@
|
|||||||
СтруктураВозврата.Вставить("Сервер" , Сервер);
|
СтруктураВозврата.Вставить("Сервер" , Сервер);
|
||||||
СтруктураВозврата.Вставить("Адрес" , Адрес);
|
СтруктураВозврата.Вставить("Адрес" , Адрес);
|
||||||
СтруктураВозврата.Вставить("Защищенное", ЗащищенноеСоединение);
|
СтруктураВозврата.Вставить("Защищенное", ЗащищенноеСоединение);
|
||||||
|
СтруктураВозврата.Вставить("Порт" , Порт);
|
||||||
|
|
||||||
Возврат СтруктураВозврата;
|
Возврат СтруктураВозврата;
|
||||||
|
|
||||||
@ -935,6 +955,41 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ДобавитьКлючЗначение(Таблица, Знач Ключ, Знач Значение) Экспорт
|
||||||
|
|
||||||
|
ЕстьКлюч = Ложь;
|
||||||
|
ЕстьЗначение = Ложь;
|
||||||
|
|
||||||
|
Для Каждого Колонка Из Таблица.Колонки Цикл
|
||||||
|
|
||||||
|
Если Колонка.Имя = "Ключ" Тогда
|
||||||
|
|
||||||
|
ЕстьКлюч = Истина;
|
||||||
|
|
||||||
|
ИначеЕсли Колонка.Имя = "Значение" Тогда
|
||||||
|
|
||||||
|
ЕстьЗначение = Истина;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если Не ЕстьКлюч Тогда
|
||||||
|
Таблица.Колонки.Добавить("Ключ");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Если Не ЕстьЗначение Тогда
|
||||||
|
Таблица.Колонки.Добавить("Значение");
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НовоеЗначение = Таблица.Добавить();
|
||||||
|
НовоеЗначение.Ключ = Ключ;
|
||||||
|
НовоеЗначение.Значение = Значение;
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
@ -952,9 +1007,10 @@
|
|||||||
Сервер = СтруктураURL["Сервер"];
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Адрес = СтруктураURL["Адрес"];
|
Адрес = СтруктураURL["Адрес"];
|
||||||
Защищенное = СтруктураURL["Защищенное"];
|
Защищенное = СтруктураURL["Защищенное"];
|
||||||
|
Порт = СтруктураURL["Порт"];
|
||||||
|
|
||||||
Запрос = СоздатьЗапросСТелом(Адрес, Параметры, ДопЗаголовки, JSON);
|
Запрос = СоздатьЗапросСТелом(Адрес, Параметры, ДопЗаголовки, JSON);
|
||||||
Соединение = СоздатьСоединение(Сервер, Защищенное);
|
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
|
||||||
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета, ПолныйОтвет);
|
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета, ПолныйОтвет);
|
||||||
|
|
||||||
Возврат Ответ;
|
Возврат Ответ;
|
||||||
@ -968,9 +1024,10 @@
|
|||||||
Сервер = СтруктураURL["Сервер"];
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Адрес = СтруктураURL["Адрес"];
|
Адрес = СтруктураURL["Адрес"];
|
||||||
Защищенное = СтруктураURL["Защищенное"];
|
Защищенное = СтруктураURL["Защищенное"];
|
||||||
|
Порт = СтруктураURL["Порт"];
|
||||||
|
|
||||||
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
|
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки, ТипДанных);
|
||||||
Соединение = СоздатьСоединение(Сервер, Защищенное);
|
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
|
||||||
|
|
||||||
Если Не Данные.Размер() = 0 Тогда
|
Если Не Данные.Размер() = 0 Тогда
|
||||||
Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
|
Запрос.УстановитьТелоИзДвоичныхДанных(Данные);
|
||||||
@ -993,9 +1050,10 @@
|
|||||||
Сервер = СтруктураURL["Сервер"];
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
|
Адрес = СтруктураURL["Адрес"] + ПараметрыЗапросаВСтроку(Параметры);
|
||||||
Защищенное = СтруктураURL["Защищенное"];
|
Защищенное = СтруктураURL["Защищенное"];
|
||||||
|
Порт = СтруктураURL["Порт"];
|
||||||
|
|
||||||
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
|
Запрос = СоздатьЗапрос(Адрес, ДопЗаголовки);
|
||||||
Соединение = СоздатьСоединение(Сервер, Защищенное);
|
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
|
||||||
|
|
||||||
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
|
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
|
||||||
|
|
||||||
@ -1018,11 +1076,12 @@
|
|||||||
Сервер = СтруктураURL["Сервер"];
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Адрес = СтруктураURL["Адрес"];
|
Адрес = СтруктураURL["Адрес"];
|
||||||
Защищенное = СтруктураURL["Защищенное"];
|
Защищенное = СтруктураURL["Защищенное"];
|
||||||
|
Порт = СтруктураURL["Порт"];
|
||||||
|
|
||||||
ТелоЗапроса = ПолучитьИмяВременногоФайла();
|
ТелоЗапроса = ПолучитьИмяВременногоФайла();
|
||||||
|
|
||||||
Запрос = СоздатьЗапросМультипарт(Адрес, Параметры, Файлы, ДопЗаголовки, ТелоЗапроса, ТипКонтента);
|
Запрос = СоздатьЗапросМультипарт(Адрес, Параметры, Файлы, ДопЗаголовки, ТелоЗапроса, ТипКонтента);
|
||||||
Соединение = СоздатьСоединение(Сервер, Защищенное);
|
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
|
||||||
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
|
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
|
||||||
|
|
||||||
Запрос = Неопределено;
|
Запрос = Неопределено;
|
||||||
@ -1040,11 +1099,12 @@
|
|||||||
Сервер = СтруктураURL["Сервер"];
|
Сервер = СтруктураURL["Сервер"];
|
||||||
Адрес = СтруктураURL["Адрес"];
|
Адрес = СтруктураURL["Адрес"];
|
||||||
Защищенное = СтруктураURL["Защищенное"];
|
Защищенное = СтруктураURL["Защищенное"];
|
||||||
|
Порт = СтруктураURL["Порт"];
|
||||||
|
|
||||||
ТелоЗапроса = ПолучитьИмяВременногоФайла();
|
ТелоЗапроса = ПолучитьИмяВременногоФайла();
|
||||||
|
|
||||||
Запрос = СоздатьЗапросМультипартРелэйтед(Адрес, Файлы, JSON, ДопЗаголовки, ТелоЗапроса);
|
Запрос = СоздатьЗапросМультипартРелэйтед(Адрес, Файлы, JSON, ДопЗаголовки, ТелоЗапроса);
|
||||||
Соединение = СоздатьСоединение(Сервер, Защищенное);
|
Соединение = СоздатьСоединение(Сервер, Защищенное, , , Порт);
|
||||||
|
|
||||||
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
|
Ответ = ВыполнитьЗапрос(Запрос, Соединение, Вид, ФайлОтвета);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
|
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
|
||||||
|
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
|
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
|
||||||
|
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
@ -2162,6 +2162,7 @@
|
|||||||
S3_ПолучитьСписокОбъектов(ПараметрыТеста);
|
S3_ПолучитьСписокОбъектов(ПараметрыТеста);
|
||||||
S3_ПолучитьСписокВерсийОбъектов(ПараметрыТеста);
|
S3_ПолучитьСписокВерсийОбъектов(ПараметрыТеста);
|
||||||
S3_ПолучитьОбъект(ПараметрыТеста);
|
S3_ПолучитьОбъект(ПараметрыТеста);
|
||||||
|
S3_ПолучитьСсылкуСкачиванияОбъекта(ПараметрыТеста);
|
||||||
S3_УдалитьОбъект(ПараметрыТеста);
|
S3_УдалитьОбъект(ПараметрыТеста);
|
||||||
S3_УдалитьБакет(ПараметрыТеста);
|
S3_УдалитьБакет(ПараметрыТеста);
|
||||||
|
|
||||||
@ -15567,6 +15568,35 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура S3_ПолучитьСсылкуСкачиванияОбъекта(ПараметрыФункции)
|
||||||
|
|
||||||
|
Картинка = ПараметрыФункции["Picture"]; // SKIP
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // SKIP
|
||||||
|
НеобходимыйРазмер = Картинка.Размер(); // SKIP
|
||||||
|
|
||||||
|
URL = ПараметрыФункции["S3_URL"];
|
||||||
|
AccessKey = ПараметрыФункции["S3_AccessKey"];
|
||||||
|
SecretKey = ПараметрыФункции["S3_SecretKey"];
|
||||||
|
Region = "BTC";
|
||||||
|
|
||||||
|
ОсновныеДанные = OPI_S3.ПолучитьСтруктуруДанных(URL, AccessKey, SecretKey, Region);
|
||||||
|
|
||||||
|
Наименование = "picture.jpg";
|
||||||
|
Бакет = "opi-gpbucket3";
|
||||||
|
|
||||||
|
Результат = OPI_S3.ПолучитьСсылкуСкачиванияОбъекта(Наименование, Бакет, ОсновныеДанные, 7200);
|
||||||
|
|
||||||
|
// END
|
||||||
|
|
||||||
|
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСсылкуСкачиванияОбъекта", "S3");
|
||||||
|
OPI_ПолучениеДанныхТестов.Проверка_Строка(Результат);
|
||||||
|
|
||||||
|
Результат = OPI_Инструменты.Get(Результат);
|
||||||
|
|
||||||
|
OPI_ПолучениеДанныхТестов.Проверка_ДвоичныеДанные(Результат, НеобходимыйРазмер);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/tests/Modules/internal/OPI_ТестыCLI.os
|
// OneScript: ./OInt/tests/Modules/internal/OPI_ТестыCLI.os
|
||||||
|
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user