mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-01-12 04:34:10 +02:00
Преобразование OPI -> OInt (workflow)
This commit is contained in:
parent
786299e609
commit
c0320f8d7c
@ -672,7 +672,7 @@
|
|||||||
// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly
|
// ТолькоПросмотр - Булево - Запрещает редактирование файла для стороннего пользователя - readonly
|
||||||
//
|
//
|
||||||
// Возвращаемое значение:
|
// Возвращаемое значение:
|
||||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Dropbox
|
// Неопределено - пустой ответ
|
||||||
Функция ДобавитьПользователейКПапке(Знач Токен, Знач IDПапки, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
|
Функция ДобавитьПользователейКПапке(Знач Токен, Знач IDПапки, Знач АдресаПочты, Знач ТолькоПросмотр = Истина) Экспорт
|
||||||
|
|
||||||
OPI_ПреобразованиеТипов.ПолучитьМассив(АдресаПочты);
|
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, Параметры, Заголовки);
|
||||||
|
|
||||||
|
Возврат Ответ;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#Область ПрограммныйИнтерфейс
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
#Область ДанныеИНастройка
|
#Область ПолучениеДанныхИНастройка
|
||||||
|
|
||||||
// Получить информацию о боте
|
// Получить информацию о боте
|
||||||
// Выполняет запрос /getMe, возвращающий базовую информацию о боте: имя, id, возможность добавлять бота в группы и т.д.
|
// Выполняет запрос /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 для установки в качестве иконок тем форума
|
// Получает соответствие 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, Параметры);
|
|
||||||
|
|
||||||
Возврат Ответ;
|
|
||||||
|
|
||||||
КонецФункции
|
|
||||||
|
|
||||||
#КонецОбласти
|
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|
||||||
#Область СлужебныеПроцедурыИФункции
|
#Область СлужебныеПроцедурыИФункции
|
||||||
|
@ -5210,12 +5210,20 @@
|
|||||||
Токен = ПараметрыФункции["Dropbox_Token"];
|
Токен = ПараметрыФункции["Dropbox_Token"];
|
||||||
Папка = ПараметрыФункции["Dropbox_SharedFolder"];
|
Папка = ПараметрыФункции["Dropbox_SharedFolder"];
|
||||||
|
|
||||||
Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
|
Результат = OPI_Dropbox.ОтменитьПубликациюПапки(Токен, Папка);
|
||||||
|
ТекущийСтатус = "in_progress";
|
||||||
|
IDРаботы = Результат["async_job_id"];
|
||||||
|
|
||||||
|
Пока ТекущийСтатус = "in_progress" Цикл
|
||||||
|
Результат = OPI_Dropbox.ПолучитьСтатусАсинхронногоИзменения(Токен, IDРаботы);
|
||||||
|
ТекущийСтатус = Результат[".tag"];
|
||||||
|
OPI_Инструменты.Пауза(3);
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
// END
|
// END
|
||||||
|
|
||||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтменитьПубликациюПапки", "Dropbox");
|
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтменитьПубликациюПапки", "Dropbox");
|
||||||
|
|
||||||
Проверка_ДропБоксСтатус(Результат);
|
Проверка_ДропБоксСтатус(Результат);
|
||||||
|
|
||||||
OPI_Инструменты.Пауза(5);
|
OPI_Инструменты.Пауза(5);
|
||||||
|
Loading…
Reference in New Issue
Block a user