You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2026-06-20 09:19:27 +02:00
Дополнение словарей
This commit is contained in:
Vendored
+7840
-7788
File diff suppressed because it is too large
Load Diff
Vendored
+6
-5
@@ -1309,7 +1309,7 @@
|
||||
, СтрокаХеша);
|
||||
|
||||
СтрокаДляПодписи = СоздатьСтрокуПодписи(КаноническийЗапрос, Скоуп, ТекущаяДата);
|
||||
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
|
||||
Сигнатура = OPI_Криптография.HMAC(КлючПодписи, СтрокаДляПодписи, "SHA256");
|
||||
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
|
||||
|
||||
OPI_Инструменты.ДобавитьКлючЗначение(ПараметрыURL, "X-Amz-Signature", Сигнатура);
|
||||
@@ -1327,12 +1327,13 @@
|
||||
Регион = ПолучитьДвоичныеДанныеИзСтроки(Регион);
|
||||
Сервис = ПолучитьДвоичныеДанныеИзСтроки(Сервис);
|
||||
AWSЗапрос = ПолучитьДвоичныеДанныеИзСтроки("aws4_request");
|
||||
Sha256_ = "SHA256";
|
||||
|
||||
КлючДанных = OPI_Криптография.HMACSHA256(СекретныйКлюч, ДанныеДата);
|
||||
КлючРегиона = OPI_Криптография.HMACSHA256(КлючДанных, Регион);
|
||||
КлючСервиса = OPI_Криптография.HMACSHA256(КлючРегиона, Сервис);
|
||||
КлючДанных = OPI_Криптография.HMAC(СекретныйКлюч, ДанныеДата, Sha256_);
|
||||
КлючРегиона = OPI_Криптография.HMAC(КлючДанных, Регион, Sha256_);
|
||||
КлючСервиса = OPI_Криптография.HMAC(КлючРегиона, Сервис, Sha256_);
|
||||
|
||||
ФинальныйКлюч = OPI_Криптография.HMACSHA256(КлючСервиса, AWSЗапрос);
|
||||
ФинальныйКлюч = OPI_Криптография.HMAC(КлючСервиса, AWSЗапрос, Sha256_);
|
||||
|
||||
Возврат ФинальныйКлюч;
|
||||
|
||||
|
||||
+2
-2
@@ -237,7 +237,7 @@
|
||||
Хэш = "";
|
||||
КлючДвоичные = ПолучитьДвоичныеДанныеИзСтроки(КлючСтрокой);
|
||||
|
||||
Результат = OPI_Криптография.HMACSHA256(КлючДвоичные, ПолучитьДвоичныеДанныеИзСтроки(Токен));
|
||||
Результат = OPI_Криптография.HMACSHA(КлючДвоичные, ПолучитьДвоичныеДанныеИзСтроки(Токен), "SHA256");
|
||||
|
||||
ТЗнач = Новый ТаблицаЗначений;
|
||||
ТЗнач.Колонки.Добавить("Ключ");
|
||||
@@ -268,7 +268,7 @@
|
||||
КонецЦикла;
|
||||
|
||||
DCS = Лев(DCS, СтрДлина(DCS) - 1);
|
||||
Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
|
||||
Подпись = OPI_Криптография.HMAC(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS), "SHA256");
|
||||
|
||||
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
|
||||
|
||||
|
||||
+87
-135
@@ -100,7 +100,9 @@
|
||||
ПараметрыЗапроса.Вставить("code_verifier", "challenge");
|
||||
|
||||
Ответ = OPI_ЗапросыHTTP.PostСТелом("https://api.twitter.com/2/oauth2/token"
|
||||
, ПараметрыЗапроса, , Ложь);
|
||||
, ПараметрыЗапроса
|
||||
,
|
||||
, Ложь);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
@@ -125,7 +127,9 @@
|
||||
ПараметрыЗапроса.Вставить("client_id" , Параметры_["client_id"]);
|
||||
|
||||
Ответ = OPI_ЗапросыHTTP.PostСТелом("https://api.twitter.com/2/oauth2/token"
|
||||
, ПараметрыЗапроса, , Ложь);
|
||||
, ПараметрыЗапроса
|
||||
,
|
||||
, Ложь);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
@@ -218,12 +222,12 @@
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Поля["media"]) Тогда
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры_, Новый Структура, "POST", URL);
|
||||
ЭтоV2 = Ложь;
|
||||
Иначе
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV2(Параметры_);
|
||||
ЭтоV2 = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Поля, Авторизация);
|
||||
|
||||
Ответ = Post(URL, Поля, Параметры_, Истина, ЭтоV2);
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
@@ -389,9 +393,7 @@
|
||||
Поля.Вставить("total_bytes" , OPI_Инструменты.ЧислоВСтроку(Размер));
|
||||
Поля.Вставить("media_category", Тип);
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, ВидЗапроса, URL);
|
||||
|
||||
ОтветИнициализации = OPI_ЗапросыHTTP.PostСТелом(URL, Поля, Авторизация, Ложь);
|
||||
ОтветИнициализации = Post(URL, Поля, Параметры);
|
||||
IDИнициализации = ОтветИнициализации[MID];
|
||||
IDSИнициализации = ОтветИнициализации[MIS];
|
||||
|
||||
@@ -409,8 +411,7 @@
|
||||
Поля.Вставить("segment_index", OPI_Инструменты.ЧислоВСтроку(Счетчик));
|
||||
Поля.Вставить("media" , Часть);
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Новый Структура, ВидЗапроса, URL);
|
||||
Ответ = OPI_ЗапросыHTTP.PostMultipart(URL, Поля, , , Авторизация);
|
||||
Ответ = PostMultipart(URL, Поля, Параметры);
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
@@ -443,8 +444,7 @@
|
||||
|
||||
Пока Строка(СтатусОбработки) = "pending" Или Строка(СтатусОбработки) = "in_progress" Цикл
|
||||
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "GET", URL);
|
||||
Ответ = OPI_ЗапросыHTTP.Get(URL, Поля, Авторизация);
|
||||
Ответ = Get(URL, Поля, Параметры);
|
||||
Информация = Ответ[ProcessingInfo];
|
||||
|
||||
Если Не ЗначениеЗаполнено(Информация) Тогда
|
||||
@@ -537,132 +537,11 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗаголовокАвторизацииV1(Знач Параметры, Знач Поля, Знач ВидЗапроса, Знач URL)
|
||||
|
||||
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
|
||||
ЗаголовокАвторизации = "";
|
||||
МетодХэширования = "HMAC-SHA1";
|
||||
ВерсияАпи = "1.0";
|
||||
СтрокаСигнатуры = "";
|
||||
Подпись = "";
|
||||
OCK = "oauth_consumer_key";
|
||||
OTK = "oauth_token";
|
||||
ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДата);
|
||||
ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX);
|
||||
ТаблицаПараметров = Новый ТаблицаЗначений;
|
||||
ТаблицаПараметров.Колонки.Добавить("Ключ");
|
||||
ТаблицаПараметров.Колонки.Добавить("Значение");
|
||||
|
||||
Для Каждого Поле Из Поля Цикл
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = Поле.Ключ;
|
||||
НоваяСтрока.Значение = Поле.Значение;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = OCK;
|
||||
НоваяСтрока.Значение = Параметры[OCK];
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = OTK;
|
||||
НоваяСтрока.Значение = Параметры[OTK];
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_version";
|
||||
НоваяСтрока.Значение = ВерсияАпи;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_signature_method";
|
||||
НоваяСтрока.Значение = МетодХэширования;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_timestamp";
|
||||
НоваяСтрока.Значение = ТекущаяДатаUNIX;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_nonce";
|
||||
НоваяСтрока.Значение = ТекущаяДатаUNIX;
|
||||
|
||||
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
|
||||
|
||||
СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL);
|
||||
СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ТаблицаПараметров.Сортировать("Ключ");
|
||||
|
||||
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
|
||||
|
||||
СтрокаСигнатуры = СтрокаСигнатуры
|
||||
+ СтрокаТаблицы.Ключ
|
||||
|
||||
+ "="
|
||||
+ СтрокаТаблицы.Значение
|
||||
+ "&";
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1);
|
||||
СтрокаСигнатуры = вРег(ВидЗапроса)
|
||||
+ "&"
|
||||
+ КодироватьСтроку(URL , СпособКодированияСтроки.КодировкаURL)
|
||||
+ "&"
|
||||
+ КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
Подпись = КодироватьСтроку(Параметры["oauth_consumer_secret"], СпособКодированияСтроки.КодировкаURL)
|
||||
+ "&"
|
||||
+ КодироватьСтроку(Параметры["oauth_token_secret"], СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
Сигнатура = OPI_Криптография.HMAC(ПолучитьДвоичныеДанныеИзСтроки(Подпись)
|
||||
, ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры)
|
||||
, ХешФункция.SHA1
|
||||
, 64);
|
||||
|
||||
Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
Разделитель = """,";
|
||||
|
||||
ЗаголовокАвторизации = ЗаголовокАвторизации
|
||||
+ "OAuth "
|
||||
+ "oauth_consumer_key=""" + Параметры[OCK] + Разделитель
|
||||
|
||||
+ "oauth_token=""" + Параметры[OTK] + Разделитель
|
||||
|
||||
+ "oauth_signature_method=""" + МетодХэширования + Разделитель
|
||||
|
||||
+ "oauth_timestamp=""" + ТекущаяДатаUNIX + Разделитель
|
||||
|
||||
+ "oauth_nonce=""" + ТекущаяДатаUNIX + Разделитель
|
||||
|
||||
+ "oauth_version=""" + ВерсияАпи + Разделитель
|
||||
|
||||
+ "oauth_signature=" + Сигнатура;
|
||||
|
||||
СоответствиеЗаголовка = Новый Соответствие;
|
||||
СоответствиеЗаголовка.Вставить("Authorization", ЗаголовокАвторизации);
|
||||
|
||||
Возврат СоответствиеЗаголовка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗаголовокАвторизацииV2(Знач Параметры)
|
||||
|
||||
СоответствиеВозврата = Новый Соответствие;
|
||||
СоответствиеВозврата.Вставить("Authorization", "Bearer " + Параметры["access_token"]);
|
||||
|
||||
Возврат СоответствиеВозврата;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьСтатусОбработки(Знач Параметры, Знач Поля, Знач URL)
|
||||
|
||||
ProcessingInfo = "processing_info";
|
||||
Авторизация = СоздатьЗаголовокАвторизацииV1(Параметры, Поля, "POST", URL);
|
||||
|
||||
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Поля, Авторизация, Ложь);
|
||||
Ответ = Post(URL, Поля, Параметры);
|
||||
Информация = Ответ[ProcessingInfo];
|
||||
|
||||
Если Не ЗначениеЗаполнено(Информация) Тогда
|
||||
@@ -679,4 +558,77 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Get(Знач URL, Знач Поля, Знач УчетныеДанные)
|
||||
|
||||
Токен = УчетныеДанные["oauth_token"];
|
||||
Секрет = УчетныеДанные["oauth_token_secret"];
|
||||
КлючПользователя = УчетныеДанные["oauth_consumer_key"];
|
||||
СекретПользователя = УчетныеДанные["oauth_consumer_secret"];
|
||||
Версия = "1.0";
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьПараметрыURL(Поля)
|
||||
.ДобавитьOauthV1Авторизацию(Токен, Секрет, КлючПользователя, СекретПользователя, Версия)
|
||||
.УстановитьАлгоритмOAuthV1("HMAC", "SHA1")
|
||||
.ОбработатьЗапрос("GET")
|
||||
.ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Post(Знач URL, Знач Поля, Знач УчетныеДанные, Знач JSON = Ложь, Знач ЭтоV2 = Ложь)
|
||||
|
||||
Токен = УчетныеДанные["oauth_token"];
|
||||
Секрет = УчетныеДанные["oauth_token_secret"];
|
||||
КлючПользователя = УчетныеДанные["oauth_consumer_key"];
|
||||
СекретПользователя = УчетныеДанные["oauth_consumer_secret"];
|
||||
Версия = "1.0";
|
||||
|
||||
HttpКлиент = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL);
|
||||
|
||||
Если ЭтоV2 Тогда
|
||||
HttpКлиент.ДобавитьЗаголовок("Authorization", "Bearer " + УчетныеДанные["access_token"]);
|
||||
Иначе
|
||||
HttpКлиент.ДобавитьOauthV1Авторизацию(Токен, Секрет, КлючПользователя, СекретПользователя, Версия)
|
||||
.УстановитьАлгоритмOAuthV1("HMAC", "SHA1");
|
||||
КонецЕсли;
|
||||
|
||||
Если JSON Тогда
|
||||
HttpКлиент.УстановитьJsonТело(Поля);
|
||||
Иначе
|
||||
HttpКлиент.УстановитьFormТело(Поля);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат HttpКлиент.ОбработатьЗапрос("POST").ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция PostMultipart(Знач URL, Знач Поля, Знач УчетныеДанные)
|
||||
|
||||
Токен = УчетныеДанные["oauth_token"];
|
||||
Секрет = УчетныеДанные["oauth_token_secret"];
|
||||
КлючПользователя = УчетныеДанные["oauth_consumer_key"];
|
||||
СекретПользователя = УчетныеДанные["oauth_consumer_secret"];
|
||||
Версия = "1.0";
|
||||
|
||||
HttpКлиент = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.НачатьЗаписьТелаMultipart()
|
||||
.ДобавитьOauthV1Авторизацию(Токен, Секрет, КлючПользователя, СекретПользователя, Версия)
|
||||
.УстановитьАлгоритмOAuthV1("HMAC", "SHA1")
|
||||
.ИспользоватьMultipartПоляВOAuth(Ложь);
|
||||
|
||||
Для Каждого Параметр Из Поля Цикл
|
||||
HttpКлиент.ДобавитьПолеMultipartFormData(Параметр.Ключ, Параметр.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Результат = HttpКлиент.ОбработатьЗапрос("POST").ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
+1
-1
@@ -1029,7 +1029,7 @@
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("GIF" , ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Video" , ПараметрыТеста);
|
||||
|
||||
Twitter_СоздатьТекстовыйТвит(ПараметрыТеста);
|
||||
//Twitter_СоздатьТекстовыйТвит(ПараметрыТеста);
|
||||
Twitter_ЗагрузитьМассивВложений(ПараметрыТеста);
|
||||
Twitter_СоздатьТвитВидео(ПараметрыТеста);
|
||||
Twitter_СоздатьТвитКартинки(ПараметрыТеста);
|
||||
|
||||
+2
-2
@@ -2464,9 +2464,9 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
|
||||
+312
-41
@@ -71,6 +71,7 @@
|
||||
Перем ЗапросМетод; // Используемый метод HTTP
|
||||
Перем ЗапросПараметрыURL; // Структура параметров URL
|
||||
Перем ЗапросТело; // Данные тела запроса
|
||||
Перем ЗапросТелоКоллекция; // Данные тела в виде коллекции, если возможно
|
||||
Перем ЗапросЗаголовки; // Соответствие заголовков запроса
|
||||
Перем ЗапросПользователь; // Пользователь для базовой авторизации
|
||||
Перем ЗапросПароль; // Пароль для базовой авторизации
|
||||
@@ -84,14 +85,10 @@
|
||||
Перем ЗапросТипУстановленВручную; // Признак отключения автоматического определения Content-Type
|
||||
Перем ФайлТелаВременный; // Признак удаления файла тела, если он был создан автоматически
|
||||
|
||||
// AWS
|
||||
// Авторизация
|
||||
|
||||
Перем AWS4Использовать; // Признак использования AWS4 авторизации
|
||||
Перем AWS4Данные; // Структура учетных данных
|
||||
|
||||
// Bearer
|
||||
|
||||
Перем Bearer; // Bearer токен
|
||||
Перем AuthВид; // Вид авторизации
|
||||
Перем AuthДанные; // Структура учетных данных
|
||||
|
||||
// Ответ
|
||||
|
||||
@@ -132,15 +129,15 @@
|
||||
Инициализирован = Истина;
|
||||
Ошибка = Ложь;
|
||||
|
||||
ЗапросПараметрыURL = Новый Массив;
|
||||
ЗапросТело = Неопределено;
|
||||
ЗапросЗаголовки = Новый Соответствие;
|
||||
ЗапросТаймаут = 3600;
|
||||
ЗапросПараметрыURL = Новый Массив;
|
||||
ЗапросТело = Неопределено;
|
||||
ЗапросТелоКоллекция = Новый Структура;
|
||||
ЗапросЗаголовки = Новый Соответствие;
|
||||
ЗапросТаймаут = 3600;
|
||||
|
||||
ЗапросТипУстановленВручную = Ложь;
|
||||
|
||||
ФайлТелаВременный = Ложь;
|
||||
AWS4Использовать = Ложь;
|
||||
|
||||
ОтветКодСостояния = 0;
|
||||
ОтветТело = Неопределено;
|
||||
@@ -374,6 +371,36 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Использовать multipart поля в OAuth
|
||||
// Включает или исключает поля multipart тела при расчете подписи OAuth в зависимости от требований сервера
|
||||
//
|
||||
// Примечание:
|
||||
// По умлчанию multipart поля используются при расчете подписи
|
||||
//
|
||||
// Параметры:
|
||||
// Флаг - Булево - Признак использования multipart поле в OAuth - use
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.OPI_HTTPКлиент - Этот же объект обработки
|
||||
Функция ИспользоватьMultipartПоляВOAuth(Знач Флаг) Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Если ОстановитьРаботу() Тогда Возврат ЭтотОбъект; КонецЕсли;
|
||||
|
||||
ДобавитьЛог("ИспользоватьMultipartПоляВOAuth: установка значения");
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Флаг);
|
||||
|
||||
УстановитьНастройку("MultipartВOAuth", Флаг);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
Исключение
|
||||
Возврат Ошибка(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область УстановкаТела
|
||||
@@ -497,7 +524,13 @@
|
||||
ДобавитьЛог("УстановитьJsonТело: начало установки тела");
|
||||
|
||||
Если Не ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Данные);
|
||||
|
||||
Если Не ТипЗнч(Данные) = Тип("Массив") Тогда
|
||||
ЗапросТелоКоллекция = Данные;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьТелоИзСтроки(Данные);
|
||||
@@ -550,7 +583,8 @@
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
|
||||
ЗапросТелоКоллекция = Данные;
|
||||
Данные = ПараметрыЗапросаВСтроку(Данные);
|
||||
|
||||
КонецЕсли;
|
||||
@@ -593,6 +627,8 @@
|
||||
РазделительСтрок = Символы.ВК + Символы.ПС;
|
||||
Кодировка = ПолучитьНастройку("КодировкаТелаЗапроса");
|
||||
ЗапросТипДанных = СтрШаблон("multipart/%1; boundary=%2", Вид, Boundary);
|
||||
|
||||
ЗапросТелоКоллекция = Новый Структура;
|
||||
|
||||
Если ИспользоватьФайл Тогда
|
||||
|
||||
@@ -722,6 +758,7 @@
|
||||
|
||||
Значение = ?(Значение, "true", "false");
|
||||
ЗапросЗаписьДанных.ЗаписатьСтроку(Значение);
|
||||
ЗапросТелоКоллекция.Вставить(ИмяПоля, Значение);
|
||||
|
||||
ИначеЕсли ТипЗначения = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
@@ -731,7 +768,8 @@
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Значение);
|
||||
ЗапросЗаписьДанных.ЗаписатьСтроку(Значение);
|
||||
|
||||
ЗапросТелоКоллекция.Вставить(ИмяПоля, Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗапросЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);
|
||||
@@ -915,7 +953,9 @@
|
||||
Если ОстановитьРаботу() Тогда Возврат ЭтотОбъект; КонецЕсли;
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||
Bearer = Токен;
|
||||
|
||||
AuthВид = "bearer";
|
||||
AuthДанные = Токен;
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
@@ -942,14 +982,14 @@
|
||||
|
||||
Если ОстановитьРаботу() Тогда Возврат ЭтотОбъект; КонецЕсли;
|
||||
|
||||
Строка_ = "Строка";
|
||||
AWS4Использовать = Истина;
|
||||
Строка_ = "Строка";
|
||||
AuthВид = "aws4";
|
||||
|
||||
AWS4Данные = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("AccessKey", AccessKey, Строка_, AWS4Данные);
|
||||
OPI_Инструменты.ДобавитьПоле("SecretKey", SecretKey, Строка_, AWS4Данные);
|
||||
OPI_Инструменты.ДобавитьПоле("Region" , Region , Строка_, AWS4Данные);
|
||||
OPI_Инструменты.ДобавитьПоле("Service" , Service , Строка_, AWS4Данные);
|
||||
AuthДанные = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("AccessKey", AccessKey, Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("SecretKey", SecretKey, Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("Region" , Region , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("Service" , Service , Строка_, AuthДанные);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
@@ -959,6 +999,78 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Добавить OAuth v1 авторизацию !NOCLI
|
||||
// Добавляет данные для OAuth v1 авторизации
|
||||
//
|
||||
// Примечание:
|
||||
// По умолчанию, для создания подписи используется HMAC-SHA256. Для изменения алгоритма можно восопользоваться функцией^^
|
||||
// `УстановитьАлгоритмOAuthV1`
|
||||
//
|
||||
// Параметры:
|
||||
// Token - Строка - Token для авторизации - token
|
||||
// Secret - Строка - Secret для авторизации - secret
|
||||
// ConsumerKey - Строка - Consumer key для авторизации - ck
|
||||
// ConsumerSecret - Строка - Consumer secret для авторизации - cs
|
||||
// Версия - Строка - Версия API - ver
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.OPI_HTTPКлиент - Этот же объект обработки
|
||||
Функция ДобавитьOauthV1Авторизацию(Знач Token, Знач Secret, Знач ConsumerKey, Знач ConsumerSecret, Знач Версия) Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Если ОстановитьРаботу() Тогда Возврат ЭтотОбъект; КонецЕсли;
|
||||
|
||||
Строка_ = "Строка";
|
||||
AuthВид = "oauth1";
|
||||
|
||||
AuthДанные = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthToken" , Token , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthSecret" , Secret , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthConsumerKey" , ConsumerKey , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthConsumerSecret", ConsumerSecret , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthАлгоритм" , "HMAC" , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthХешФункция" , "SHA256" , Строка_, AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthВерсияAPI" , Версия , Строка_, AuthДанные);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
Исключение
|
||||
Возврат Ошибка(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Установить алгоритм OAuth V1
|
||||
// Изменяет алгоритм для подписи OAuth
|
||||
//
|
||||
// Параметры:
|
||||
// Алгоритм - Строка - Алгоритм шифрования: HMAC, RSA - alg
|
||||
// ХешФункция - Строка - Хеш функция для сигнатуры: SHA1, SHA256 - hash
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.OPI_HTTPКлиент - Этот же объект обработки
|
||||
Функция УстановитьАлгоритмOAuthV1(Знач Алгоритм, Знач ХешФункция) Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Если ОстановитьРаботу() Тогда Возврат ЭтотОбъект; КонецЕсли;
|
||||
|
||||
Если AuthВид <> "oauth1" Тогда
|
||||
Возврат Ошибка("УстановитьАлгоритмOAuthV1: перед установкой алгоритма авторизация OAuth v1 должна быть инициализирована");
|
||||
КонецЕсли;
|
||||
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthАлгоритм" , Алгоритм , "Строка", AuthДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("OAuthХешФункция", ХешФункция, "Строка", AuthДанные);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
Исключение
|
||||
Возврат Ошибка(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ОбработкаЗапроса
|
||||
@@ -1529,16 +1641,8 @@
|
||||
Запрос.Заголовки.Вставить("Content-Length" , РазмерТела);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если AWS4Использовать Тогда
|
||||
ДобавитьЛог("ДополнитьЗаголовки: формирование заголовка AWS4 авторизации");
|
||||
ДобавитьAWS4();
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Bearer) Тогда
|
||||
ДобавитьЛог("ДополнитьЗаголовки: формирование заголовка Bearer авторизации");
|
||||
Запрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", Bearer));
|
||||
КонецЕсли;
|
||||
|
||||
ДополнитьЗаголовкиАвторизации();
|
||||
|
||||
Если ПолучитьНастройку("gzip") Тогда
|
||||
ДобавитьЛог("ДополнитьЗаголовки: установка заголовка ожидания gzip");
|
||||
@@ -1561,6 +1665,33 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДополнитьЗаголовкиАвторизации()
|
||||
|
||||
Если Не ЗначениеЗаполнено(AuthВид) Тогда
|
||||
Возврат ЭтотОбъект;
|
||||
КонецЕсли;
|
||||
|
||||
Если AuthВид = "aws4" Тогда
|
||||
|
||||
ДобавитьЛог("ДополнитьЗаголовкиАвторизации: формирование заголовка AWS4 авторизации");
|
||||
ДобавитьAWS4();
|
||||
|
||||
ИначеЕсли AuthВид = "oauth1" Тогда
|
||||
|
||||
ДобавитьЛог("ДополнитьЗаголовкиАвторизации: формирование заголовка OAuth V1 авторизации");
|
||||
ДобавитьЗаголовокOAuthV1();
|
||||
|
||||
Иначе
|
||||
|
||||
ДобавитьЛог("ДополнитьЗаголовкиАвторизации: формирование заголовка Bearer авторизации");
|
||||
Запрос.Заголовки.Вставить("Authorization", СтрШаблон("Bearer %1", AuthДанные));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УстановитьТелоЗапроса()
|
||||
|
||||
Если Multipart Тогда
|
||||
@@ -2009,7 +2140,7 @@
|
||||
|
||||
Функция СоздатьЗаголовокАвторизации()
|
||||
|
||||
AccessKey = AWS4Данные["AccessKey"];
|
||||
AccessKey = AuthДанные["AccessKey"];
|
||||
ТекущаяДата = ТекущаяУниверсальнаяДата();
|
||||
|
||||
Запрос.Заголовки.Вставить("x-amz-date", OPI_Инструменты.ВременнаяМеткаISO(ТекущаяДата));
|
||||
@@ -2029,16 +2160,16 @@
|
||||
|
||||
Функция ПолучитьОсновныеСоставляющиеПодписи(Знач ТекущаяДата)
|
||||
|
||||
SecretKey = AWS4Данные["SecretKey"];
|
||||
Region = AWS4Данные["Region"];
|
||||
Service = AWS4Данные["Service"];
|
||||
SecretKey = AuthДанные["SecretKey"];
|
||||
Region = AuthДанные["Region"];
|
||||
Service = AuthДанные["Service"];
|
||||
|
||||
КлючПодписи = ПолучитьКлючПодписи(SecretKey, Region, Service, ТекущаяДата);
|
||||
КаноническийЗапрос = СоздатьКаноническийЗапрос();
|
||||
Скоуп = СоздатьСкоуп(Region, Service, ТекущаяДата);
|
||||
СтрокаДляПодписи = СоздатьСтрокуПодписи(КаноническийЗапрос, Скоуп, ТекущаяДата);
|
||||
|
||||
Сигнатура = OPI_Криптография.HMACSHA256(КлючПодписи, СтрокаДляПодписи);
|
||||
Сигнатура = OPI_Криптография.HMAC(КлючПодписи, СтрокаДляПодписи, "SHA256");
|
||||
Сигнатура = нРег(ПолучитьHexСтрокуИзДвоичныхДанных(Сигнатура));
|
||||
|
||||
КлючиЗаголовков = ПолучитьСтрокуКлючейЗаголовков();
|
||||
@@ -2073,12 +2204,13 @@
|
||||
Регион = ПолучитьДвоичныеДанныеИзСтроки(Регион);
|
||||
Сервис = ПолучитьДвоичныеДанныеИзСтроки(Сервис);
|
||||
AWSЗапрос = ПолучитьДвоичныеДанныеИзСтроки("aws4_request");
|
||||
SHA256_ = "SHA256";
|
||||
|
||||
КлючДанных = OPI_Криптография.HMACSHA256(СекретныйКлюч, ДанныеДата);
|
||||
КлючРегиона = OPI_Криптография.HMACSHA256(КлючДанных, Регион);
|
||||
КлючСервиса = OPI_Криптография.HMACSHA256(КлючРегиона, Сервис);
|
||||
КлючДанных = OPI_Криптография.HMAC(СекретныйКлюч, ДанныеДата, SHA256_);
|
||||
КлючРегиона = OPI_Криптография.HMAC(КлючДанных, Регион, SHA256_);
|
||||
КлючСервиса = OPI_Криптография.HMAC(КлючРегиона, Сервис, SHA256_);
|
||||
|
||||
ФинальныйКлюч = OPI_Криптография.HMACSHA256(КлючСервиса, AWSЗапрос);
|
||||
ФинальныйКлюч = OPI_Криптография.HMAC(КлючСервиса, AWSЗапрос, SHA256_);
|
||||
|
||||
Возврат ФинальныйКлюч;
|
||||
|
||||
@@ -2273,6 +2405,144 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область OAuth
|
||||
|
||||
Функция ДобавитьЗаголовокOAuthV1()
|
||||
|
||||
OAuthАлгоритм = AuthДанные["OAuthАлгоритм"];
|
||||
OAuthХешФункция = AuthДанные["OAuthХешФункция"];
|
||||
OAuthToken = AuthДанные["OAuthToken"];
|
||||
OAuthSecret = AuthДанные["OAuthSecret"];
|
||||
OAuthConsumerKey = AuthДанные["OAuthConsumerKey"];
|
||||
OAuthConsumerSecret = AuthДанные["OAuthConsumerSecret"];
|
||||
OAuthВерсияAPI = AuthДанные["OAuthВерсияAPI"];
|
||||
|
||||
МетодХэширования = OAuthАлгоритм + "-" + OAuthХешФункция;
|
||||
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
|
||||
ЗаголовокАвторизации = "";
|
||||
СтрокаСигнатуры = "";
|
||||
Подпись = "";
|
||||
|
||||
ТекущаяДатаUNIX = OPI_Инструменты.UNIXTime(ТекущаяДата);
|
||||
ТекущаяДатаUNIX = OPI_Инструменты.ЧислоВСтроку(ТекущаяДатаUNIX);
|
||||
|
||||
ТаблицаПараметров = Новый ТаблицаЗначений;
|
||||
ТаблицаПараметров.Колонки.Добавить("Ключ");
|
||||
ТаблицаПараметров.Колонки.Добавить("Значение");
|
||||
|
||||
Если Не ЗначениеЗаполнено(ЗапросТелоКоллекция)
|
||||
Или Не OPI_Инструменты.ЭтоКоллекция(ЗапросТелоКоллекция, Истина) Тогда
|
||||
|
||||
Попытка
|
||||
ЗапросТелоКоллекция = ЗапросТело;
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ЗапросТелоКоллекция);
|
||||
Исключение
|
||||
ЗапросТелоКоллекция = Новый Структура;
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ПолучитьНастройку("MultipartВOAuth") Или Не Multipart Тогда
|
||||
Для Каждого Поле Из ЗапросТелоКоллекция Цикл
|
||||
|
||||
Если ТипЗнч(Поле.Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = Поле.Ключ;
|
||||
НоваяСтрока.Значение = Поле.Значение;
|
||||
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_consumer_key";
|
||||
НоваяСтрока.Значение = OAuthConsumerKey;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_token";
|
||||
НоваяСтрока.Значение = OAuthToken;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_version";
|
||||
НоваяСтрока.Значение = OAuthВерсияAPI;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_signature_method";
|
||||
НоваяСтрока.Значение = МетодХэширования;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_timestamp";
|
||||
НоваяСтрока.Значение = ТекущаяДатаUNIX;
|
||||
|
||||
НоваяСтрока = ТаблицаПараметров.Добавить();
|
||||
НоваяСтрока.Ключ = "oauth_nonce";
|
||||
НоваяСтрока.Значение = ТекущаяДатаUNIX;
|
||||
|
||||
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
|
||||
|
||||
СтрокаТаблицы.Ключ = КодироватьСтроку(СтрокаТаблицы.Ключ, СпособКодированияСтроки.КодировкаURL);
|
||||
СтрокаТаблицы.Значение = КодироватьСтроку(СтрокаТаблицы.Значение, СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ТаблицаПараметров.Сортировать("Ключ");
|
||||
|
||||
Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл
|
||||
|
||||
СтрокаСигнатуры = СтрокаСигнатуры
|
||||
+ СтрокаТаблицы.Ключ
|
||||
|
||||
+ "="
|
||||
+ СтрокаТаблицы.Значение
|
||||
+ "&";
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
СтрокаСигнатуры = Лев(СтрокаСигнатуры, СтрДлина(СтрокаСигнатуры) - 1);
|
||||
СтрокаСигнатуры = вРег(ЗапросМетод)
|
||||
+ "&"
|
||||
+ КодироватьСтроку(ЗапросURL, СпособКодированияСтроки.КодировкаURL)
|
||||
+ "&"
|
||||
+ КодироватьСтроку(СтрокаСигнатуры, СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
Подпись = КодироватьСтроку(OAuthConsumerSecret, СпособКодированияСтроки.КодировкаURL)
|
||||
+ "&"
|
||||
+ КодироватьСтроку(OAuthSecret, СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
ПодписьДД = ПолучитьДвоичныеДанныеИзСтроки(Подпись);
|
||||
СигнатураДД = ПолучитьДвоичныеДанныеИзСтроки(СтрокаСигнатуры);
|
||||
|
||||
Сигнатура = OPI_Криптография.СоздатьПодпись(ПодписьДД, СигнатураДД, OAuthАлгоритм, OAuthХешФункция);
|
||||
Сигнатура = КодироватьСтроку(Base64Строка(Сигнатура), СпособКодированияСтроки.КодировкаURL);
|
||||
|
||||
Разделитель = """,";
|
||||
|
||||
ЗаголовокАвторизации = ЗаголовокАвторизации
|
||||
+ "OAuth "
|
||||
+ "oauth_consumer_key=""" + OAuthConsumerKey + Разделитель
|
||||
|
||||
+ "oauth_token=""" + OAuthToken + Разделитель
|
||||
|
||||
+ "oauth_signature_method=""" + МетодХэширования + Разделитель
|
||||
|
||||
+ "oauth_timestamp=""" + ТекущаяДатаUNIX + Разделитель
|
||||
|
||||
+ "oauth_nonce=""" + ТекущаяДатаUNIX + Разделитель
|
||||
|
||||
+ "oauth_version=""" + OAuthВерсияAPI + Разделитель
|
||||
|
||||
+ "oauth_signature=" + Сигнатура;
|
||||
|
||||
Запрос.Заголовки.Вставить("Authorization", ЗаголовокАвторизации);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Вспомогательные
|
||||
|
||||
Функция ОстановитьРаботу(Знач ИсключениеПриОшибке = Ложь)
|
||||
@@ -2346,6 +2616,7 @@
|
||||
Настройки.Вставить("ОтдельныеЭлементыМассивов", Ложь);
|
||||
Настройки.Вставить("КодировкаURL" , Истина);
|
||||
Настройки.Вставить("КодировкаТелаЗапроса" , "UTF-8");
|
||||
Настройки.Вставить("MultipartВOAuth" , Истина);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
@@ -727,9 +727,9 @@
|
||||
|
||||
Попытка
|
||||
|
||||
ЭтоОтладка = Неопределено;
|
||||
ЭтоОтладка = Неопределено;
|
||||
ЭтоОтладка = ПолучитьПеременнуюСреды("OINT_DEBUG");
|
||||
ЭтоОтладка = ?(ЗначениеЗаполнено(ЭтоОтладка), ЭтоОтладка, "NO");
|
||||
ЭтоОтладка = ?(ЗначениеЗаполнено(ЭтоОтладка), ЭтоОтладка, "NO");
|
||||
|
||||
Исключение
|
||||
ЭтоОтладка = "NO";
|
||||
|
||||
+57
-19
@@ -35,6 +35,48 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция СоздатьПодпись(Знач КлючПодписи, Знач ДанныеПодписи, Знач Алгоритм, Знач ФункцияХеша) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(КлючПодписи);
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ДанныеПодписи);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Алгоритм);
|
||||
|
||||
Алгоритм = вРег(Алгоритм);
|
||||
ФункцияХеша = вРег(ФункцияХеша);
|
||||
|
||||
Если Алгоритм = "HMAC" Тогда
|
||||
Результат = HMAC(КлючПодписи, ДанныеПодписи, ФункцияХеша);
|
||||
ИначеЕсли Алгоритм = "RSA" Тогда
|
||||
Результат = RSA(КлючПодписи, ДанныеПодписи, ФункцияХеша);
|
||||
Иначе
|
||||
ВызватьИсключение "Ошибка работы с криптографией: неподдерживаемый метод";
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция RSA(Знач Ключ, Знач Данные, Знач ФункцияХеша) Экспорт
|
||||
|
||||
Компонента = OPI_Компоненты.ПолучитьКомпоненту("Cryptography");
|
||||
|
||||
Если ФункцияХеша = "SHA256" Тогда
|
||||
Результат = Компонента.RsaSha256(Ключ, Данные);
|
||||
ИначеЕсли ФункцияХеша = "SHA1" Тогда
|
||||
Результат = Компонента.RsaSha1(Ключ, Данные);
|
||||
Иначе
|
||||
Результат = "неподдержииваемый метод хеширования";
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Результат) = Тип("Строка") Тогда
|
||||
ВызватьИсключение СтрШаблон("Ошибка работы с криптографией: %1", Результат);
|
||||
Иначе
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
#Область БСП
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -45,27 +87,14 @@
|
||||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
|
||||
Функция HMAC(Знач Ключ, Знач Данные, Знач ФункцияХеша) Экспорт
|
||||
|
||||
Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Хеш(ДвоичныеДанные, Тип) Экспорт
|
||||
|
||||
Хеширование = Новый ХешированиеДанных(Тип);
|
||||
Хеширование.Добавить(ДвоичныеДанные);
|
||||
|
||||
Возврат Хеширование.ХешСумма;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
|
||||
|
||||
Дважды = 2;
|
||||
Дважды = 2;
|
||||
РазмерБлока = 64;
|
||||
ТипХеша = ХешФункция[ФункцияХеша];
|
||||
|
||||
Если Ключ.Размер() > РазмерБлока Тогда
|
||||
Ключ = Хеш(Ключ, Тип);
|
||||
Ключ = Хеш(Ключ, ТипХеша);
|
||||
КонецЕсли;
|
||||
|
||||
Если Ключ.Размер() <= РазмерБлока Тогда
|
||||
@@ -84,7 +113,16 @@
|
||||
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
|
||||
|
||||
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
|
||||
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), ТипХеша)), ТипХеша);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Хеш(ДвоичныеДанные, Тип) Экспорт
|
||||
|
||||
Хеширование = Новый ХешированиеДанных(Тип);
|
||||
Хеширование.Добавить(ДвоичныеДанные);
|
||||
|
||||
Возврат Хеширование.ХешСумма;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
@@ -378,7 +378,7 @@
|
||||
// По умлчанию multipart поля используются при расчете подписи
|
||||
//
|
||||
// Параметры:
|
||||
// Флаг - Булево - Признак использования multipart поле в OAuth - use
|
||||
// Флаг - Булево - Признак использования multipart полей в OAuth - use
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.OPI_HTTPКлиент - Этот же объект обработки
|
||||
|
||||
Reference in New Issue
Block a user