mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-03-25 21:39:21 +02:00
Fastfix
This commit is contained in:
parent
d28ef45a9b
commit
7cd56951be
13227
service/dictionaries/en.json
vendored
13227
service/dictionaries/en.json
vendored
File diff suppressed because it is too large
Load Diff
@ -60,12 +60,24 @@
|
||||
Результат = ОбработатьЗапрос(Контекст);
|
||||
Исключение
|
||||
|
||||
Ошибка = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
Информация = ИнформацияОбОшибке();
|
||||
Результат = Новый Структура("result,error", Ложь, Информация.Описание);
|
||||
|
||||
Если СтрНайти(Информация.ИсходнаяСтрока, "ВызватьИсключение") = 0 Тогда
|
||||
|
||||
ФайлМодуля = Новый Файл(Информация.ИмяМодуля);
|
||||
|
||||
СтруктураИсключения = Новый Структура;
|
||||
СтруктураИсключения.Вставить("module", ФайлМодуля.Имя);
|
||||
СтруктураИсключения.Вставить("row" , Информация.НомерСтроки);
|
||||
СтруктураИсключения.Вставить("code" , СокрЛП(Информация.ИсходнаяСтрока));
|
||||
|
||||
Результат.Вставить("exception", СтруктураИсключения);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Контекст.Ответ.КодСостояния = 500;
|
||||
|
||||
Результат = Новый Структура("result,error", Ложь, "Исключение OneScript: " + Ошибка);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
JSON = OPI_Инструменты.JSONСтрокой(Результат);
|
||||
@ -74,6 +86,7 @@
|
||||
Контекст.Ответ.Записать(JSON);
|
||||
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОбработатьЗапрос(Контекст)
|
||||
@ -168,10 +181,11 @@
|
||||
|
||||
Запрос = Контекст.Запрос;
|
||||
|
||||
Тело = Запрос.Тело;
|
||||
Заголовки = Запрос.Заголовки;
|
||||
Если Не ЗначениеЗаполнено(Запрос.Форма) Тогда
|
||||
ВызватьИсключение "Не найдены данные в формате multipart/form-data!";
|
||||
КонецЕсли;
|
||||
|
||||
Параметры = OPI_Инструменты.РазобратьMultipart(Тело, Заголовки);
|
||||
Параметры = OPI_Инструменты.РазобратьMultipart(Запрос.Форма);
|
||||
|
||||
Возврат ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры);
|
||||
|
||||
@ -207,9 +221,25 @@
|
||||
|
||||
КотелПараметров.Вставить(ТекущийКлюч, ИВФ);
|
||||
|
||||
ИначеЕсли ТипЗнч(ТекущееЗначение) = Тип("ФайлФормы") Тогда
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
|
||||
ПотокФайла = ТекущееЗначение.ОткрытьПотокЧтения();
|
||||
ПотокЗаписи = Новый ФайловыйПоток(ИВФ, РежимОткрытияФайла.ОткрытьИлиСоздать);
|
||||
|
||||
ПотокФайла.КопироватьВ(ПотокЗаписи);
|
||||
|
||||
ПотокФайла.Закрыть();
|
||||
ПотокЗаписи.Закрыть();
|
||||
|
||||
МассивВФ.Добавить(ИВФ);
|
||||
|
||||
КотелПараметров.Вставить(ТекущийКлюч, ИВФ);
|
||||
|
||||
Иначе
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущееЗначение);
|
||||
КотелПараметров.Вставить(ТекущееЗначение, ИВФ);
|
||||
КотелПараметров.Вставить(ТекущийКлюч, ТекущееЗначение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
@ -223,9 +253,9 @@
|
||||
Иначе
|
||||
|
||||
ТекстВыполнения = СтруктураВыполнения["Результат"];
|
||||
|
||||
|
||||
Выполнить(ТекстВыполнения);
|
||||
|
||||
|
||||
|
||||
Ответ = Новый Структура("result,data", Истина, Ответ);
|
||||
|
||||
|
@ -2169,9 +2169,9 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
|
@ -1166,52 +1166,20 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Multipart
|
||||
|
||||
// by Виталий Черкасов (cherkasovvitalik)
|
||||
// https://infostart.ru/1c/articles/1522786/
|
||||
|
||||
Функция РазобратьMultipart(Знач Заголовки, Знач Тело) Экспорт
|
||||
Функция РазобратьMultipart(Знач Форма) Экспорт
|
||||
|
||||
СоответствиеДанных = Новый Соответствие;
|
||||
Разделитель = ПолучитьРазделительСоставногоСообщения(Заголовки);
|
||||
Файлы = Форма.Файлы;
|
||||
|
||||
Для Каждого Поле Из Форма Цикл
|
||||
|
||||
Маркеры = Новый Массив();
|
||||
Маркеры.Добавить(ПолучитьБуферДвоичныхДанныхИзСтроки("==" + Разделитель));
|
||||
Маркеры.Добавить(ПолучитьБуферДвоичныхДанныхИзСтроки("==" + Разделитель + Символы.ПС));
|
||||
Маркеры.Добавить(ПолучитьБуферДвоичныхДанныхИзСтроки("==" + Разделитель + Символы.ВК));
|
||||
Маркеры.Добавить(ПолучитьБуферДвоичныхДанныхИзСтроки("==" + Разделитель + Символы.ВК + Символы.ПС));
|
||||
Маркеры.Добавить(ПолучитьБуферДвоичныхДанныхИзСтроки("==" + Разделитель + "=="));
|
||||
СоответствиеДанных.Вставить(Поле.Ключ, Поле.Значение);
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(Тело);
|
||||
ЧтениеДанных.ПропуститьДо(Маркеры);
|
||||
КонецЦикла;
|
||||
|
||||
ОбщийБуферДвоичныхДанных = ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных();
|
||||
БуферыДвоичныхДанных = ОбщийБуферДвоичныхДанных.Разделить(Маркеры);
|
||||
Для Каждого Файл Из Файлы Цикл
|
||||
|
||||
Для Каждого Буфер Из БуферыДвоичныхДанных Цикл
|
||||
|
||||
Поток = Новый ПотокВПамяти(Буфер);
|
||||
ЧтениеЧасти = Новый ЧтениеДанных(Поток);
|
||||
|
||||
ЗаголовкиЧасти = ПрочитатьЗаголовки(ЧтениеЧасти);
|
||||
ДанныеЧасти = ПолучитьИмяСообщения(ЗаголовкиЧасти);
|
||||
|
||||
ИмяЧасти = ДанныеЧасти["name"];
|
||||
ИмяФайла = ДанныеЧасти["filename"];
|
||||
|
||||
ТекущиеДанные = ЧтениеЧасти.Прочитать().ПолучитьДвоичныеДанные();
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
|
||||
ТекущиеДанные = ПолучитьСтрокуИзДвоичныхДанных(ТекущиеДанные);
|
||||
КонецЕсли;
|
||||
|
||||
СоответствиеДанных.Вставить(ИмяЧасти, ТекущиеДанные);
|
||||
|
||||
ЧтениеЧасти.Закрыть();
|
||||
Поток.Закрыть();
|
||||
СоответствиеДанных.Вставить(Файл.Имя, Файл);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
@ -1219,106 +1187,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПрочитатьЗаголовки(Чтение)
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
|
||||
Пока Истина Цикл
|
||||
|
||||
ТекущаяСтрока = Чтение.ПрочитатьСтроку();
|
||||
|
||||
Если ТекущаяСтрока = "" Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
Части = СтрРазделить(ТекущаяСтрока, ":");
|
||||
|
||||
ИмяЗаголовка = СокрЛП(Части[0]);
|
||||
Значение = СокрЛП(Части[1]);
|
||||
|
||||
Заголовки.Вставить(ИмяЗаголовка, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Заголовки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьРазделительСоставногоСообщения(Заголовки)
|
||||
|
||||
ТекстИсключения = "Для Multipart-запросов обязательно указание корректного Content-Type с boundary!";
|
||||
ТипСодержимого = Заголовки.Получить("Content-Type");
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТипСодержимого) Тогда
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
КонецЕсли;
|
||||
|
||||
Свойства = СтрРазделить(ТипСодержимого, ";", Ложь);
|
||||
Граница = Неопределено;
|
||||
|
||||
Для Каждого Свойство Из Свойства Цикл
|
||||
|
||||
Части = СтрРазделить(Свойство, "=", Ложь);
|
||||
ИмяСвойства = СокрЛП(Части[0]);
|
||||
|
||||
Если ИмяСвойства <> "boundary" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Граница = СокрЛП(Части[1]);
|
||||
Прервать;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Граница) Тогда
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
Иначе
|
||||
Возврат Граница;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьИмяСообщения(Заголовки)
|
||||
|
||||
ТекстИсключения = "Content-Disposition одной из частей не найден или имеет неверный формат!";
|
||||
Описание = Заголовки.Получить("Content-Disposition");
|
||||
СтруктураВозврата = Новый Структура("name,filename");
|
||||
|
||||
Если Не ЗначениеЗаполнено(Описание) Тогда
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
КонецЕсли;
|
||||
|
||||
Свойства = СтрРазделить(Описание, ";", Ложь);
|
||||
Имя = Неопределено;
|
||||
|
||||
Для Каждого Свойство Из Свойства Цикл
|
||||
|
||||
Части = СтрРазделить(Свойство, "=", Ложь);
|
||||
ИмяСвойства = СокрЛП(Части[0]);
|
||||
ИмяСвойства = нРег(ИмяСвойства);
|
||||
|
||||
Если ИмяСвойства = "name" Тогда
|
||||
|
||||
СтруктураВозврата["name"] = СокрЛП(Части[1]);
|
||||
|
||||
ИначеЕсли ИмяСвойства = "filename"Тогда
|
||||
|
||||
СтруктураВозврата["filename"] = СокрЛП(Части[1]);
|
||||
|
||||
Иначе
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если Не ЗначениеЗаполнено(СтруктураВозврата["name"]) Тогда
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
Иначе
|
||||
Возврат СтруктураВозврата;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1166,7 +1166,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РазобратьMultipart(Знач Форма) Экспорт
|
||||
Функция РазобратьFormData(Знач Форма) Экспорт
|
||||
|
||||
СоответствиеДанных = Новый Соответствие;
|
||||
Файлы = Форма.Файлы;
|
||||
|
@ -113,10 +113,10 @@
|
||||
// Добавляет новый обработчик в проект
|
||||
//
|
||||
// Параметры:
|
||||
// Проект - Строка - Путь к файлу проекта - proj
|
||||
// БиблиотекаОПИ - Строка - Имя библиотеки в CLI формате - lib
|
||||
// ФункцияОПИ - Строка - Имя функции Открытого пакета интеграций - func
|
||||
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик: GET, POST, MULTIPART - method
|
||||
// Проект - Строка - Путь к файлу проекта - proj
|
||||
// БиблиотекаОПИ - Строка - Имя библиотеки в CLI формате - lib
|
||||
// ФункцияОПИ - Строка - Имя функции Открытого пакета интеграций - func
|
||||
// Метод - Строка - HTTP метод, который будет обрабатывать обработчик: GET, POST, FORM - method
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура Из КлючИЗначение - Результат добавления обработчика
|
||||
@ -126,6 +126,7 @@
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ФункцияОПИ);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Метод);
|
||||
|
||||
Метод = вРег(Метод);
|
||||
Результат = ПроверитьСуществованиеПроекта(Проект);
|
||||
|
||||
Если Не Результат["result"] Тогда
|
||||
@ -133,11 +134,15 @@
|
||||
Иначе
|
||||
Проект = Результат["path"];
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Метод = "GET" И Не Метод = "POST" И Не Метод = "FORM" Тогда
|
||||
Возврат СформироватьОтвет(Ложь, СтрШаблон("Неподдерживаемый метод %1!", Метод));
|
||||
КонецЕсли;
|
||||
|
||||
СекретныйКлюч = ПолучитьУникальныйКлючОбработчика(Проект);
|
||||
|
||||
Если ТипЗнч(СекретныйКлюч) = Тип("Соответствие") Тогда
|
||||
СекретныйКлюч.Вставить("message", "Failed to generate a handler UID. Try again");
|
||||
СекретныйКлюч.Вставить("message", "Не удалось сформировать UID обработчика. Попробуйте еще раз!");
|
||||
Возврат СекретныйКлюч;
|
||||
КонецЕсли;
|
||||
|
||||
@ -241,7 +246,7 @@
|
||||
Иначе
|
||||
|
||||
Если КоличествоЗаписей = 0 Тогда
|
||||
Результат = СформироватьОтвет(Ложь, "Handler not found");
|
||||
Результат = СформироватьОтвет(Ложь, "Обработчик не найден!");
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
@ -509,16 +514,16 @@
|
||||
OPI_Инструменты.ВернутьУправляющиеПоследовательности(Путь);
|
||||
|
||||
ФайлПроекта = Новый Файл(Путь);
|
||||
Текст = "The project file exists";
|
||||
Текст = "Файл проекта существует!";
|
||||
Результат = Истина;
|
||||
|
||||
Если Не ФайлПроекта.Существует() Тогда
|
||||
Текст = "Project file not found at the specified path";
|
||||
Текст = "Файл проекта по указанному пути не найден!";
|
||||
Результат = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если ФайлПроекта.ЭтоКаталог() Тогда
|
||||
Текст = "A directory path was passed, not a project file";
|
||||
Текст = "Передан путь к каталогу, а не к файлу проекта!";
|
||||
Результат = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
@ -557,7 +562,7 @@
|
||||
Результат = СоздатьНовыйПроект(ПолныйПуть);
|
||||
|
||||
Если Результат["result"] Тогда
|
||||
Текст = "The project file was created successfully";
|
||||
Текст = "Файл проекта успешно создан!";
|
||||
Ответ = СформироватьОтвет(Истина, Текст, ПолныйПуть);
|
||||
Иначе
|
||||
Ответ = Результат;
|
||||
@ -565,7 +570,7 @@
|
||||
|
||||
Иначе
|
||||
|
||||
Текст = "The project file at the specified path already exists";
|
||||
Текст = "Файл проекта по указанному пути уже существует!";
|
||||
Ответ = СформироватьОтвет(Ложь, Текст, ПолныйПуть);
|
||||
|
||||
КонецЕсли;
|
||||
@ -717,7 +722,7 @@
|
||||
, Проект);
|
||||
|
||||
Иначе
|
||||
Результат = СформироватьОтвет(Ложь, "Nothing to change");
|
||||
Результат = СформироватьОтвет(Ложь, "Ничего не изменилось!");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
@ -121,7 +121,7 @@
|
||||
|
||||
Метод = вРег(Контекст.Запрос.Метод);
|
||||
МетодОбработчика = вРег(Обработчик["method"]);
|
||||
МетодПроверки = ?(МетодОбработчика = "MULTIPART", "POST", МетодОбработчика);
|
||||
МетодПроверки = ?(МетодОбработчика = "FORM", "POST", МетодОбработчика);
|
||||
|
||||
Если Не Метод = МетодПроверки Тогда
|
||||
Возврат ОшибкаОбработки(Контекст, 405, "Метод " + Метод + " недоступен для этого обработчика!");
|
||||
@ -135,9 +135,9 @@
|
||||
|
||||
Результат = ВыполнитьОбработкуPost(Контекст, Обработчик);
|
||||
|
||||
ИначеЕсли МетодОбработчика = "MULTIPART" Тогда
|
||||
ИначеЕсли МетодОбработчика = "FORM" Тогда
|
||||
|
||||
Результат = ВыполнитьОбработкуMultipart(Контекст, Обработчик);
|
||||
Результат = ВыполнитьОбработкуFormData(Контекст, Обработчик);
|
||||
|
||||
Иначе
|
||||
|
||||
@ -173,7 +173,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьОбработкуMultipart(Контекст, Обработчик)
|
||||
Функция ВыполнитьОбработкуFormData(Контекст, Обработчик)
|
||||
|
||||
#Если Клиент Тогда
|
||||
ВызватьИсключение "Метод недоступен на клиенте!";
|
||||
@ -182,10 +182,10 @@
|
||||
Запрос = Контекст.Запрос;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Запрос.Форма) Тогда
|
||||
ВызватьИсключение "Не найдены данные в формате multipart/form-data!";
|
||||
ВызватьИсключение "Не найдены данные формы в запросе!";
|
||||
КонецЕсли;
|
||||
|
||||
Параметры = OPI_Инструменты.РазобратьMultipart(Запрос.Форма);
|
||||
Параметры = OPI_Инструменты.РазобратьFormData(Запрос.Форма);
|
||||
|
||||
Возврат ВыполнитьУниверсальнуюОбработку(Контекст, Обработчик, Параметры);
|
||||
|
||||
@ -223,6 +223,7 @@
|
||||
|
||||
ИначеЕсли ТипЗнч(ТекущееЗначение) = Тип("ФайлФормы") Тогда
|
||||
|
||||
//@skip-check missing-temporary-file-deletion
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
|
||||
ПотокФайла = ТекущееЗначение.ОткрытьПотокЧтения();
|
||||
|
Loading…
x
Reference in New Issue
Block a user