1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-11-29 22:27:42 +02:00

S3: Правка авторизации

This commit is contained in:
Anton Titovets
2024-11-12 12:04:24 +03:00
parent 9eea1690c3
commit fa3aa5521c
9 changed files with 5373 additions and 5196 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -45,9 +45,10 @@
#Область ОбщиеМетоды
Функция ПолучитьСтруктуруАвторизации(Знач AccessKey, Знач SecretKey, Знач Region, Знач Service = "s3") Экспорт
Функция ПолучитьСтруктуруАвторизации(Знач URL, Знач AccessKey, Знач SecretKey, Знач Region, Знач Service = "s3") Экспорт
СтруктураАвторизации = Новый Структура;
СтруктураАвторизации = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , "Строка", СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("AccessKey", AccessKey, "Строка", СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("SecretKey", SecretKey, "Строка", СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("Region" , Region , "Строка", СтруктураАвторизации);
@@ -57,12 +58,39 @@
КонецФункции
Функция ОтправитьЗапросБезТела(Знач URL, Знач Авторизация, Знач Метод) Экспорт
СтруктураURL = OPI_Инструменты.РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер);
ЗаголовокАвторизации = СоздатьЗаголовокАвторизации(Авторизация, Запрос, Соединение, Метод);
Запрос.Заголовки.Вставить("Authorization", ЗаголовокАвторизации);
Ответ = OPI_Инструменты.ВыполнитьЗапрос(Запрос, Соединение, Метод);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСБакетами
Функция СоздатьБакет(Знач Имя, Знач Авторизация) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
URL = ПолучитьURLСервиса(Авторизация);
URL = URL + Имя;
Ответ = ОтправитьЗапросБезТела(URL, Авторизация, "PUT");
Возврат Ответ;
КонецФункции
#КонецОбласти
@@ -116,7 +144,10 @@
Функция ПолучитьКлючПодписи(Знач СекретныйКлюч, Знач Регион, Знач Сервис, Знач ТекущаяДата)
КлючДанных = OPI_Криптография.HMACSHA256("AWS4" + СекретныйКлюч, Формат(ТекущаяДата, "ДФ=yyyyMMdd;"));
СекретныйКлюч = ПолучитьДвоичныеДанныеИзСтроки("AWS4" + СекретныйКлюч);
ДанныеДата = ПолучитьДвоичныеДанныеИзСтроки(Формат(ТекущаяДата, "ДФ=yyyyMMdd;"));
КлючДанных = OPI_Криптография.HMACSHA256(СекретныйКлюч, ДанныеДата);
КлючРегиона = OPI_Криптография.HMACSHA256(КлючДанных, Регион);
КлючСервиса = OPI_Криптография.HMACSHA256(КлючРегиона, Сервис);
@@ -264,6 +295,18 @@
КонецФункции
Функция ПолучитьURLСервиса(Знач Авторизация)
URL = Авторизация["URL"];
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/";
КонецЕсли;
Возврат URL;
КонецФункции
Функция СформироватьЗаголовокАвторизации(Знач AccessKey, Знач Скоуп, Знач Сигнатура, Знач КлючиЗаголовков)
ШаблонЗаголовка = "Authorization: AWS4-HMAC-SHA256 "

View File

@@ -2101,6 +2101,21 @@
#КонецОбласти
#Область S3
Процедура AWS_РаботаСБакетами() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_AccessKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_SecretKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_URL" , ПараметрыТеста);
S3_СоздатьБакет(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -14590,6 +14605,30 @@
#КонецОбласти
#Область S3
Процедура S3_СоздатьБакет(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "ru-central1";
Авторизация = OPI_S3.ПолучитьСтруктуруАвторизации(URL, AccessKey, SecretKey, Region);
Имя = "NewBacket1";
Результат = OPI_S3.СоздатьБакет(Имя, Авторизация);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБакет", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти

View File

@@ -67,6 +67,7 @@
Разделы.Вставить("Neocities" , 5);
Разделы.Вставить("CDEK" , 5);
Разделы.Вставить("YandexMetrika" , 5);
Разделы.Вставить("S3" , 5);
Возврат Разделы;
@@ -97,6 +98,7 @@
Разделы.Вставить("Neocities" , СтандартныеЗависимости);
Разделы.Вставить("CDEK" , СтандартныеЗависимости);
Разделы.Вставить("YandexMetrika" , СтандартныеЗависимости);
Разделы.Вставить("S3" , СтандартныеЗависимости);
Возврат Разделы;
@@ -123,6 +125,7 @@
Неоситиз = "Neocities";
Сдэк = "CDEK";
Метрика = "YandexMetrika";
S3_ = "S3";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -251,6 +254,7 @@
НовыйТест(ТаблицаТестов, "СдэкАПИ_РаботаСЗаявкамиНаВызовКурьера", "Работа с заявками курьера" , Сдэк);
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеМетками" , "Управление метками" , Метрика);
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеСчетчиками" , "Управление счетчиками" , Метрика);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
Возврат ТаблицаТестов;

View File

@@ -571,7 +571,7 @@
Для Каждого ЭлементКоллекции Из Коллекция Цикл
ТекущийКлюч = ЭлементКоллекции.Ключ;
Существует = ПолеКоллекцииСуществет(ТекущийКлюч, Коллекция);
Существует = ПолеКоллекцииСуществет(Коллекция, ТекущийКлюч);
Если Не Существует Тогда
МассивОтсутствующихПолей.Добавить(ТекущийКлюч);

View File

@@ -45,9 +45,10 @@
#Область ОбщиеМетоды
Функция ПолучитьСтруктуруАвторизации(Знач AccessKey, Знач SecretKey, Знач Region, Знач Service = "s3") Экспорт
Функция ПолучитьСтруктуруАвторизации(Знач URL, Знач AccessKey, Знач SecretKey, Знач Region, Знач Service = "s3") Экспорт
СтруктураАвторизации = Новый Структура;
СтруктураАвторизации = Новый Структура;
OPI_Инструменты.ДобавитьПоле("URL" , URL , "Строка", СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("AccessKey", AccessKey, "Строка", СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("SecretKey", SecretKey, "Строка", СтруктураАвторизации);
OPI_Инструменты.ДобавитьПоле("Region" , Region , "Строка", СтруктураАвторизации);
@@ -57,12 +58,39 @@
КонецФункции
Функция ОтправитьЗапросБезТела(Знач URL, Знач Авторизация, Знач Метод) Экспорт
СтруктураURL = OPI_Инструменты.РазбитьURL(URL);
Сервер = СтруктураURL["Сервер"];
Адрес = СтруктураURL["Адрес"];
Запрос = OPI_Инструменты.СоздатьЗапрос(Адрес);
Соединение = OPI_Инструменты.СоздатьСоединение(Сервер);
ЗаголовокАвторизации = СоздатьЗаголовокАвторизации(Авторизация, Запрос, Соединение, Метод);
Запрос.Заголовки.Вставить("Authorization", ЗаголовокАвторизации);
Ответ = OPI_Инструменты.ВыполнитьЗапрос(Запрос, Соединение, Метод);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСБакетами
Функция СоздатьБакет(Знач Имя, Знач Авторизация) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
URL = ПолучитьURLСервиса(Авторизация);
URL = URL + Имя;
Ответ = ОтправитьЗапросБезТела(URL, Авторизация, "PUT");
Возврат Ответ;
КонецФункции
#КонецОбласти
@@ -116,7 +144,10 @@
Функция ПолучитьКлючПодписи(Знач СекретныйКлюч, Знач Регион, Знач Сервис, Знач ТекущаяДата)
КлючДанных = OPI_Криптография.HMACSHA256("AWS4" + СекретныйКлюч, Формат(ТекущаяДата, "ДФ=yyyyMMdd;"));
СекретныйКлюч = ПолучитьДвоичныеДанныеИзСтроки("AWS4" + СекретныйКлюч);
ДанныеДата = ПолучитьДвоичныеДанныеИзСтроки(Формат(ТекущаяДата, "ДФ=yyyyMMdd;"));
КлючДанных = OPI_Криптография.HMACSHA256(СекретныйКлюч, ДанныеДата);
КлючРегиона = OPI_Криптография.HMACSHA256(КлючДанных, Регион);
КлючСервиса = OPI_Криптография.HMACSHA256(КлючРегиона, Сервис);
@@ -264,6 +295,18 @@
КонецФункции
Функция ПолучитьURLСервиса(Знач Авторизация)
URL = Авторизация["URL"];
Если Не СтрЗаканчиваетсяНа(URL, "/") Тогда
URL = URL + "/";
КонецЕсли;
Возврат URL;
КонецФункции
Функция СформироватьЗаголовокАвторизации(Знач AccessKey, Знач Скоуп, Знач Сигнатура, Знач КлючиЗаголовков)
ШаблонЗаголовка = "Authorization: AWS4-HMAC-SHA256 "

View File

@@ -571,7 +571,7 @@
Для Каждого ЭлементКоллекции Из Коллекция Цикл
ТекущийКлюч = ЭлементКоллекции.Ключ;
Существует = ПолеКоллекцииСуществет(ТекущийКлюч, Коллекция);
Существует = ПолеКоллекцииСуществет(Коллекция, ТекущийКлюч);
Если Не Существует Тогда
МассивОтсутствующихПолей.Добавить(ТекущийКлюч);

View File

@@ -67,6 +67,7 @@
Разделы.Вставить("Neocities" , 5);
Разделы.Вставить("CDEK" , 5);
Разделы.Вставить("YandexMetrika" , 5);
Разделы.Вставить("S3" , 5);
Возврат Разделы;
@@ -97,6 +98,7 @@
Разделы.Вставить("Neocities" , СтандартныеЗависимости);
Разделы.Вставить("CDEK" , СтандартныеЗависимости);
Разделы.Вставить("YandexMetrika" , СтандартныеЗависимости);
Разделы.Вставить("S3" , СтандартныеЗависимости);
Возврат Разделы;
@@ -123,6 +125,7 @@
Неоситиз = "Neocities";
Сдэк = "CDEK";
Метрика = "YandexMetrika";
S3_ = "S3";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -251,6 +254,7 @@
НовыйТест(ТаблицаТестов, "СдэкАПИ_РаботаСЗаявкамиНаВызовКурьера", "Работа с заявками курьера" , Сдэк);
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеМетками" , "Управление метками" , Метрика);
НовыйТест(ТаблицаТестов, "ЯМетрика_УправлениеСчетчиками" , "Управление счетчиками" , Метрика);
НовыйТест(ТаблицаТестов, "AWS_РаботаСБакетами" , "Работа с бакетами" , S3_);
Возврат ТаблицаТестов;

View File

@@ -2101,6 +2101,21 @@
#КонецОбласти
#Область S3
Процедура AWS_РаботаСБакетами() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_AccessKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_SecretKey", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("S3_URL" , ПараметрыТеста);
S3_СоздатьБакет(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -14590,6 +14605,30 @@
#КонецОбласти
#Область S3
Процедура S3_СоздатьБакет(ПараметрыФункции)
URL = ПараметрыФункции["S3_URL"];
AccessKey = ПараметрыФункции["S3_AccessKey"];
SecretKey = ПараметрыФункции["S3_SecretKey"];
Region = "ru-central1";
Авторизация = OPI_S3.ПолучитьСтруктуруАвторизации(URL, AccessKey, SecretKey, Region);
Имя = "NewBacket1";
Результат = OPI_S3.СоздатьБакет(Имя, Авторизация);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБакет", "S3");
OPI_ПолучениеДанныхТестов.Проверка_Соответствие(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти