1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-25 02:42:28 +02:00

Преобразование OPI -> OInt (workflow)

This commit is contained in:
Vitaly the Alpaca 2024-05-29 06:01:57 +00:00 committed by Vitaly the Alpaca (bot)
parent 786299e609
commit c0320f8d7c
3 changed files with 173 additions and 149 deletions

View File

@ -672,7 +672,7 @@
// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
// Неопределено - пустой ответ
Функция ДобавитьПользователейКПапке(Знач Токен, Знач IDПапки, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты);
@ -707,6 +707,29 @@
КонецФункции
// Получить статус асинхронного изменения
// Получает статус асинхронной работы по изменению доступов
//
// Параметры:
// Токен - Строка - Токен - token
// IDРаботы - Строка - ID асинхронной работы - job
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
Функция ПолучитьСтатусАсинхронногоИзменения(Знач Токен, Знач IDРаботы) Экспорт
URL = "https://api.dropboxapi.com/2/sharing/check_job_status";
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("async_job_id", IDРаботы, "Строка", Параметры);
Заголовки = ПолучитьЗаголовкиЗапроса(Токен);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти

View File

@ -37,7 +37,7 @@
#Область ПрограммныйИнтерфейс
#Область ДанныеИНастройка
#Область ПолучениеДанныхИНастройка
// Получить информацию о боте
// Выполняет запрос /getMe, возвращающий базовую информацию о боте: имя, id, возможность добавлять бота в группы и т.д.
@ -125,6 +125,107 @@
КонецФункции
// Скачать файл
// Скачивает файл с серверов Telegram
//
// Параметры:
// Токен - Строка - Токен - token
// IDФайла - Строка - ID файла для скачивания - fileid
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
Функция СкачатьФайл(Знач Токен, Знач IDФайла) Экспорт
Result = "result";
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
Параметры = Новый Структура("file_id", IDФайла);
URL = "api.telegram.org/bot" + Токен + "/getFile";
Ответ = OPI_Инструменты.Get(URL, Параметры);
Путь = Ответ[Result]["file_path"];
Если Не ЗначениеЗаполнено(Путь) Тогда
Возврат Ответ;
КонецЕсли;
URL = "api.telegram.org/file/bot" + Токен + "/" + Путь;
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
// ОбработатьДанные Telegram Mini App
// Обрабатывает данные TMA и опредеяет их достоверность
//
// Параметры:
// СтрокаДанных - Строка - querry из Telegram.WebApp.initData
// Токен - Строка - Токен бота
//
// Возвращаемое значение:
// Соответствие из Строка - Соответствие данных с результатом проверки в поле passed
Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СтрокаДанных);
СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL);
СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
Ключ = "WebAppData";
Хэш = "";
КлючДвоичные = ПолучитьДвоичныеДанныеИзСтроки(Ключ);
Результат = OPI_Криптография.HMACSHA256(КлючДвоичные, ПолучитьДвоичныеДанныеИзСтроки(Токен));
ТЗнач = Новый ТаблицаЗначений;
ТЗнач.Колонки.Добавить("Ключ");
ТЗнач.Колонки.Добавить("Значение");
Для Каждого Данные Из СтруктураДанных Цикл
НоваяСтрока = ТЗнач.Добавить();
НоваяСтрока.Ключ = Данные.Ключ;
НоваяСтрока.Значение = Данные.Значение;
КонецЦикла;
ТЗнач.Сортировать("Ключ");
СоответствиеВозврата = Новый Соответствие;
DCS = "";
Для Каждого СтрокаТЗ Из ТЗнач Цикл
Если СтрокаТЗ.Ключ <> "hash" Тогда
DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
Иначе
Хэш = СтрокаТЗ.Значение;
КонецЕсли;
КонецЦикла;
DCS = Лев(DCS, СтрДлина(DCS) - 1);
Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
Если Финал = вРег(Хэш) Тогда
Ответ = Истина;
Иначе
Ответ = Ложь;
КонецЕсли;
СоответствиеВозврата.Вставить("passed", Ответ);
Возврат СоответствиеВозврата;
КонецФункции
#КонецОбласти
#Область ОтправкаДанных
@ -474,6 +575,42 @@
КонецФункции
// Сформировать клавиатуру по массиву кнопок
// Формирует простую JSON клавиатуру из массив кнопок для сообщения или нижней панели
//
// Параметры:
// МассивКнопок - Массив из Строка - Массив кнопок - buttons
// ПодСообщением - Булево - Клавиатура под сообщением или на нижней панели - under
// ОднаПодОдной - Булево - Истина > кнопки выводятся в столбик, Ложь > в строку - column
//
// Возвращаемое значение:
// Строка - JSON клавиатуры
Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок
, Знач ПодСообщением = Ложь
, Знач ОднаПодОдной = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(ПодСообщением);
OPI_ПреобразованиеТипов.ПолучитьБулево(ОднаПодОдной);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
Если ОднаПодОдной Тогда
Строки = СоздатьВысокуюКлавиатуру(МассивКнопок);
Иначе
Строки = СоздатьДлиннуюКлавиатуру(МассивКнопок);
КонецЕсли;
Если ПодСообщением Тогда
СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1);
Иначе
СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина);
КонецЕсли;
Клавиатура = OPI_Инструменты.JSONСтрокой(СтруктураПараметра);
Возврат Клавиатура;
КонецФункции
#КонецОбласти
#Область Администрирование
@ -655,77 +792,7 @@
#КонецОбласти
#Область TelegramMiniApp
// Обработать данные TMA и определить их достоверность !NOCLI
//
// Параметры:
// СтрокаДанных - Строка - querry из Telegram.WebApp.initData
// Токен - Строка - Токен бота
//
// Возвращаемое значение:
// Соответствие из Строка - Обработанные данные с признаком достоверности
Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(СтрокаДанных);
СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL);
СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
Ключ = "WebAppData";
Хэш = "";
КлючДвоичные = ПолучитьДвоичныеДанныеИзСтроки(Ключ);
Результат = OPI_Криптография.HMACSHA256(КлючДвоичные, ПолучитьДвоичныеДанныеИзСтроки(Токен));
ТЗнач = Новый ТаблицаЗначений;
ТЗнач.Колонки.Добавить("Ключ");
ТЗнач.Колонки.Добавить("Значение");
Для Каждого Данные Из СтруктураДанных Цикл
НоваяСтрока = ТЗнач.Добавить();
НоваяСтрока.Ключ = Данные.Ключ;
НоваяСтрока.Значение = Данные.Значение;
КонецЦикла;
ТЗнач.Сортировать("Ключ");
СоответствиеВозврата = Новый Соответствие;
DCS = "";
Для Каждого СтрокаТЗ Из ТЗнач Цикл
Если СтрокаТЗ.Ключ <> "hash" Тогда
DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
Иначе
Хэш = СтрокаТЗ.Значение;
КонецЕсли;
КонецЦикла;
DCS = Лев(DCS, СтрДлина(DCS) - 1);
Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
Если Финал = вРег(Хэш) Тогда
Ответ = Истина;
Иначе
Ответ = Ложь;
КонецЕсли;
СоответствиеВозврата.Вставить("passed", Ответ);
Возврат СоответствиеВозврата;
КонецФункции
#КонецОбласти
#Область РежимФорума
#Область РаботаСТемамиФорума
// Получить список иконок-аватаров
// Получает соответствие ID Emoji для установки в качестве иконок тем форума
@ -923,80 +990,6 @@
#КонецОбласти
#Область Прочее
// Сформировать клавиатуру по массиву кнопок
// Формирует простую JSON клавиатуру из массив кнопок для сообщения или нижней панели
//
// Параметры:
// МассивКнопок - Массив из Строка - Массив кнопок - buttons
// ПодСообщением - Булево - Клавиатура под сообщением или на нижней панели - under
// ОднаПодОдной - Булево - Истина > кнопки выводятся в столбик, Ложь > в строку - column
//
// Возвращаемое значение:
// Строка - JSON клавиатуры
Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок
, Знач ПодСообщением = Ложь
, Знач ОднаПодОдной = Истина) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(ПодСообщением);
OPI_ПреобразованиеТипов.ПолучитьБулево(ОднаПодОдной);
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
Если ОднаПодОдной Тогда
Строки = СоздатьВысокуюКлавиатуру(МассивКнопок);
Иначе
Строки = СоздатьДлиннуюКлавиатуру(МассивКнопок);
КонецЕсли;
Если ПодСообщением Тогда
СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1);
Иначе
СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина);
КонецЕсли;
Клавиатура = OPI_Инструменты.JSONСтрокой(СтруктураПараметра);
Возврат Клавиатура;
КонецФункции
// Скачать файл
// Скачивает файл с серверов Telegram
//
// Параметры:
// Токен - Строка - Токен - token
// IDФайла - Строка - ID файла для скачивания - fileid
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Telegram
Функция СкачатьФайл(Знач Токен, Знач IDФайла) Экспорт
Result = "result";
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDФайла);
Параметры = Новый Структура("file_id", IDФайла);
URL = "api.telegram.org/bot" + Токен + "/getFile";
Ответ = OPI_Инструменты.Get(URL, Параметры);
Путь = Ответ[Result]["file_path"];
Если Не ЗначениеЗаполнено(Путь) Тогда
Возврат Ответ;
КонецЕсли;
URL = "api.telegram.org/file/bot" + Токен + "/" + Путь;
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -5210,12 +5210,20 @@
Токен = ПараметрыФункции["Dropbox_Token"];
Папка = ПараметрыФункции["Dropbox_SharedFolder"];
Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
ТекущийСтатус = "in_progress";
IDРаботы = Результат["async_job_id"];
Пока ТекущийСтатус = "in_progress" Цикл
Результат = OPI_Dropbox.ПолучитьСтатусАсинхронногоИзменения(Токен, IDРаботы);
ТекущийСтатус = Результат[".tag"];
OPI_Инструменты.Пауза(3);
КонецЦикла;
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтменитьПубликациюПапки", "Dropbox");
Проверка_ДропБоксСтатус(Результат);
OPI_Инструменты.Пауза(5);