mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2026-06-20 09:19:27 +02:00
Fastfix
This commit is contained in:
@@ -1,385 +0,0 @@
|
||||
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыHTTP.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023-2026 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:Typo-off
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:NumberOfOptionalParams-off
|
||||
// BSLLS:UsingSynchronousCalls-off
|
||||
|
||||
//@skip-check module-unused-local-variable
|
||||
//@skip-check method-too-many-params
|
||||
//@skip-check module-structure-top-region
|
||||
//@skip-check module-structure-method-in-regions
|
||||
//@skip-check wrong-string-literal-content
|
||||
//@skip-check use-non-recommended-method
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
#Использовать "./internal"
|
||||
#Использовать "../../main"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
// Новый запрос
|
||||
// Создает новый объект для работы с HTTP
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ОбработкаОбъект.OPI_HTTPКлиент - Объект обработки
|
||||
Функция НовыйЗапрос() Экспорт
|
||||
|
||||
Если OPI_Инструменты.ЭтоOneScript() Тогда
|
||||
|
||||
//@skip-check property-not-writable
|
||||
//@skip-check bsl-legacy-check-static-feature-access
|
||||
Обработки = Неопределено;
|
||||
|
||||
ИмяТипа = "OPI_HTTPКлиент";
|
||||
HTTPКлиент = Новый(ИмяТипа);
|
||||
|
||||
Иначе
|
||||
HTTPКлиент = Обработки.OPI_HTTPКлиент.Создать();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат HTTPКлиент;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область ЗапросыБезТела
|
||||
|
||||
Функция Get(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено
|
||||
, Знач ПолныйОтвет = Ложь) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросБезТела(URL, "GET", Параметры, ДопЗаголовки, ФайлОтвета, ПолныйОтвет);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Head(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено
|
||||
, Знач ПолныйОтвет = Ложь) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросБезТела(URL, "HEAD", Параметры, ДопЗаголовки, ФайлОтвета, ПолныйОтвет);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Delete(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено
|
||||
, Знач ПолныйОтвет = Ложь) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросБезТела(URL, "DELETE", Параметры, ДопЗаголовки, ФайлОтвета, ПолныйОтвет);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЗапросыСТелом
|
||||
|
||||
Функция PostСТелом(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач JSON = Истина
|
||||
, Знач ПолныйОтвет = Ложь
|
||||
, Знач ФайлОтвета = Неопределено) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "POST", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция PatchСТелом(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач JSON = Истина
|
||||
, Знач ПолныйОтвет = Ложь
|
||||
, Знач ФайлОтвета = Неопределено) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "PATCH", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция PutСТелом(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач JSON = Истина
|
||||
, Знач ПолныйОтвет = Ложь
|
||||
, Знач ФайлОтвета = Неопределено) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "PUT", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция DeleteСТелом(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач JSON = Истина
|
||||
, Знач ПолныйОтвет = Ложь
|
||||
, Знач ФайлОтвета = Неопределено) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросСТелом(URL, "DELETE", Параметры, ДопЗаголовки, JSON, ПолныйОтвет, ФайлОтвета);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЗапросыMultipart
|
||||
|
||||
Функция PostMultipart(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач Файлы = ""
|
||||
, Знач ТипКонтента = "image/jpeg"
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено) Экспорт
|
||||
|
||||
HttpКлиент = НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьЗаголовки(ДопЗаголовки)
|
||||
.УстановитьФайлОтвета(ФайлОтвета)
|
||||
.НачатьЗаписьТелаMultipart();
|
||||
|
||||
Если ЗначениеЗаполнено(Файлы) Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Файлы);
|
||||
|
||||
//@skip-check bsl-legacy-check-for-each-statetement-collection
|
||||
Для Каждого Файл Из Файлы Цикл
|
||||
|
||||
СтруктураИнформации = РазобратьКлючФайла(Файл.Ключ, ТипКонтента);
|
||||
|
||||
ИмяПоля = СтруктураИнформации["ИмяПоля"];
|
||||
ИмяФайла = СтруктураИнформации["ИмяФайла"];
|
||||
|
||||
HttpКлиент.ДобавитьФайлMultipartFormData(ИмяПоля, ИмяФайла, Файл.Значение, ТипКонтента);
|
||||
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(Параметры) Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
|
||||
|
||||
//@skip-check bsl-legacy-check-for-each-statetement-collection
|
||||
Для Каждого Параметр Из Параметры Цикл
|
||||
HttpКлиент.ДобавитьПолеMultipartFormData(Параметр.Ключ, Параметр.Значение);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
HttpКлиент.ОбработатьЗапрос("POST");
|
||||
|
||||
Результат = HttpКлиент.ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
|
||||
Если HttpКлиент.Ошибка Тогда
|
||||
ВызватьИсключение HttpКлиент.ПолучитьЛог(Истина);
|
||||
Иначе
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция PutMultipart(Знач URL
|
||||
, Знач Параметры = ""
|
||||
, Знач Файлы = ""
|
||||
, Знач ТипКонтента = "image/jpeg"
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено) Экспорт
|
||||
|
||||
Возврат ВыполнитьЗапросМультипарт(URL, "PUT", Параметры, Файлы, ТипКонтента, ДопЗаголовки, ФайлОтвета);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ВыполнитьЗапросСТелом(Знач URL
|
||||
, Знач Вид
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач JSON = Истина
|
||||
, Знач ПолныйОтвет = Ложь
|
||||
, Знач ФайлОтвета = Неопределено)
|
||||
|
||||
ЧислоПопыток = 5;
|
||||
|
||||
HttpКлиент = НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьЗаголовки(ДопЗаголовки)
|
||||
.УстановитьФайлОтвета(ФайлОтвета)
|
||||
.МаксимумПопыток(ЧислоПопыток);
|
||||
|
||||
Если JSON Тогда
|
||||
HttpКлиент.УстановитьJsonТело(Параметры);
|
||||
Иначе
|
||||
HttpКлиент.УстановитьFormТело(Параметры);
|
||||
КонецЕсли;
|
||||
|
||||
HttpКлиент.ОбработатьЗапрос(Вид);
|
||||
|
||||
Если ПолныйОтвет Тогда
|
||||
Результат = HttpКлиент.ВернутьОтвет(Ложь, Истина);
|
||||
Иначе
|
||||
Результат = HttpКлиент.ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьЗапросБезТела(Знач URL
|
||||
, Знач Вид
|
||||
, Знач Параметры = ""
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено
|
||||
, Знач ПолныйОтвет = Ложь)
|
||||
|
||||
ЧислоПопыток = 5;
|
||||
|
||||
HttpКлиент = НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьПараметрыURL(Параметры)
|
||||
.УстановитьЗаголовки(ДопЗаголовки)
|
||||
.УстановитьФайлОтвета(ФайлОтвета)
|
||||
.МаксимумПопыток(ЧислоПопыток)
|
||||
.ОбработатьЗапрос(Вид);
|
||||
|
||||
Если ПолныйОтвет Тогда
|
||||
Результат = HttpКлиент.ВернутьОтвет(Ложь, Истина);
|
||||
Иначе
|
||||
Результат = HttpКлиент.ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьЗапросМультипарт(Знач URL
|
||||
, Знач Вид
|
||||
, Знач Параметры = ""
|
||||
, Знач Файлы = ""
|
||||
, Знач ТипКонтента = "image/jpeg"
|
||||
, Знач ДопЗаголовки = ""
|
||||
, Знач ФайлОтвета = Неопределено)
|
||||
|
||||
ЧислоПопыток = 5;
|
||||
|
||||
HttpКлиент = НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьЗаголовки(ДопЗаголовки)
|
||||
.УстановитьФайлОтвета(ФайлОтвета)
|
||||
.МаксимумПопыток(ЧислоПопыток)
|
||||
.НачатьЗаписьТелаMultipart();
|
||||
|
||||
//@skip-check bsl-legacy-check-for-each-statetement-collection
|
||||
Для Каждого Файл Из Файлы Цикл
|
||||
|
||||
СтруктураИнформации = РазобратьКлючФайла(Файл.Ключ, ТипКонтента);
|
||||
|
||||
ИмяПоля = СтруктураИнформации["ИмяПоля"];
|
||||
ИмяФайла = СтруктураИнформации["ИмяФайла"];
|
||||
|
||||
HttpКлиент.ДобавитьФайлMultipartFormData(ИмяПоля, ИмяФайла, Файл.Значение, ТипКонтента);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
//@skip-check bsl-legacy-check-for-each-statetement-collection
|
||||
Для Каждого Параметр Из Параметры Цикл
|
||||
HttpКлиент.ДобавитьПолеMultipartFormData(Параметр.Ключ, Параметр.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Результат = HttpКлиент.ОбработатьЗапрос("POST").ВернутьОтветКакJSONКоллекцию(Истина, Истина);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РазобратьКлючФайла(Знач ДанныеФайла, Знач ТипКонтента)
|
||||
|
||||
ЗаменаТочки = "___";
|
||||
ИмяФайла = СтрЗаменить(ДанныеФайла, ЗаменаТочки, ".");
|
||||
МассивИмени = СтрРазделить(ИмяФайла, "|", Ложь);
|
||||
ЧастейИмени = 2;
|
||||
|
||||
Если МассивИмени.Количество() = ЧастейИмени Тогда
|
||||
ИмяПоля = МассивИмени[0];
|
||||
ИмяФайла = МассивИмени[1];
|
||||
Иначе
|
||||
|
||||
Если ТипКонтента = "image/jpeg" Тогда
|
||||
|
||||
ИмяПоля = "photo";
|
||||
|
||||
Иначе
|
||||
|
||||
ИмяПоля = Лев(ИмяФайла, СтрНайти(ИмяФайла, ".") - 1);
|
||||
ИмяПоля = ?(ЗначениеЗаполнено(ИмяПоля), ИмяПоля, СтрЗаменить(ДанныеФайла, ЗаменаТочки, "."));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураВозврата = Новый Структура("ИмяПоля,ИмяФайла", ИмяПоля, ИмяФайла);
|
||||
|
||||
Возврат СтруктураВозврата;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Region Alternate
|
||||
|
||||
Function NewRequest() Export
|
||||
Return НовыйЗапрос();
|
||||
EndFunction
|
||||
|
||||
Function PostWithBody(Val URL, Val Parameters = "", Val AdditionalHeaders = "", Val JSON = True, Val FullResponse = False, Val ResponseFile = Undefined) Export
|
||||
Return PostСТелом(URL, Parameters, AdditionalHeaders, JSON, FullResponse, ResponseFile);
|
||||
EndFunction
|
||||
|
||||
Function PatchWithBody(Val URL, Val Parameters = "", Val AdditionalHeaders = "", Val JSON = True, Val FullResponse = False, Val ResponseFile = Undefined) Export
|
||||
Return PatchСТелом(URL, Parameters, AdditionalHeaders, JSON, FullResponse, ResponseFile);
|
||||
EndFunction
|
||||
|
||||
Function PutWithBody(Val URL, Val Parameters = "", Val AdditionalHeaders = "", Val JSON = True, Val FullResponse = False, Val ResponseFile = Undefined) Export
|
||||
Return PutСТелом(URL, Parameters, AdditionalHeaders, JSON, FullResponse, ResponseFile);
|
||||
EndFunction
|
||||
|
||||
Function DeleteWithBody(Val URL, Val Parameters = "", Val AdditionalHeaders = "", Val JSON = True, Val FullResponse = False, Val ResponseFile = Undefined) Export
|
||||
Return DeleteСТелом(URL, Parameters, AdditionalHeaders, JSON, FullResponse, ResponseFile);
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
File diff suppressed because it is too large
Load Diff
-6
@@ -1,6 +0,0 @@
|
||||
<package-def>
|
||||
<module name="OPI_ЗапросыHTTP" file="Modules/OPI_ЗапросыHTTP.os"/>
|
||||
<module name="OPI_HTTPRequests" file="Modules/OPI_ЗапросыHTTP.os"/>
|
||||
<class name="OPI_HTTPКлиент" file="Modules/internal/Classes/OPI_HTTPКлиент.os"/>
|
||||
<class name="OPI_HTTPClient" file="Modules/internal/Classes/OPI_HTTPКлиент.os"/>
|
||||
</package-def>
|
||||
-2091
File diff suppressed because it is too large
Load Diff
@@ -1,321 +0,0 @@
|
||||
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSSH.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023-2026 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:Typo-off
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:NumberOfOptionalParams-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:LineLength-off
|
||||
// BSLLS:QueryParseError-off
|
||||
// BSLLS:AssignAliasFieldsInQuery-off
|
||||
// BSLLS:NumberOfParams-off
|
||||
// BSLLS:UsingSynchronousCalls-off
|
||||
// BSLLS:MagicNumber-off
|
||||
|
||||
//@skip-check module-structure-top-region
|
||||
//@skip-check module-structure-method-in-regions
|
||||
//@skip-check wrong-string-literal-content
|
||||
//@skip-check method-too-many-params
|
||||
//@skip-check constructor-function-return-section
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
#Использовать "./internal"
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ОткрытьСоединение(Знач НастройкиSSH, Знач Прокси = "") Экспорт
|
||||
|
||||
Result_ = "result";
|
||||
|
||||
Если ЭтоКоннектор(НастройкиSSH) Тогда
|
||||
Возврат НастройкиSSH;
|
||||
КонецЕсли;
|
||||
|
||||
Коннектор = OPI_Компоненты.ПолучитьКомпоненту("SSH");
|
||||
|
||||
УстановкаКонфигурации = УстановитьНастройки(Коннектор, НастройкиSSH);
|
||||
|
||||
Если Не OPI_Инструменты.ПолучитьИли(УстановкаКонфигурации, Result_, Ложь) Тогда
|
||||
Возврат УстановкаКонфигурации;
|
||||
КонецЕсли;
|
||||
|
||||
УстановкаПрокси = УстановитьПрокси(Коннектор, Прокси);
|
||||
|
||||
Если Не OPI_Инструменты.ПолучитьИли(УстановкаПрокси, Result_, Ложь) Тогда
|
||||
Возврат УстановкаПрокси;
|
||||
КонецЕсли;
|
||||
|
||||
Результат = Коннектор.Connect();
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
Возврат ?(Результат[Result_], Коннектор, Результат);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьКонфигурациюСоединения(Знач НастройкиSSH, Знач Прокси = Неопределено) Экспорт
|
||||
|
||||
СтруктураКонфигурации = Новый Структура;
|
||||
|
||||
OPI_Инструменты.ДобавитьПоле("set" , НастройкиSSH, "Коллекция", СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("proxy", Прокси , "Коллекция", СтруктураКонфигурации);
|
||||
|
||||
Возврат СтруктураКонфигурации;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыполнитьКоманду(Знач Соединение, Знач Команда) Экспорт
|
||||
|
||||
ЗакрыватьСоединение = ПроверитьСоздатьСоединение(Соединение);
|
||||
|
||||
Если Не ЭтоКоннектор(Соединение) Тогда
|
||||
Возврат Соединение;
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Команда);
|
||||
|
||||
Результат = Соединение.Execute(Команда);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
Вывод = Результат["stdout"];
|
||||
|
||||
Если Вывод <> Неопределено Тогда
|
||||
Если СтрЗаканчиваетсяНа(Вывод, Символы.ПС) Тогда
|
||||
Результат["stdout"] = Лев(Вывод, СтрДлина(Вывод) - 1);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗакрыватьСоединение Тогда
|
||||
Результат.Вставить("close_connection", ЗакрытьСоединение(Соединение));
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗакрытьСоединение(Знач Соединение) Экспорт
|
||||
|
||||
ПроверитьСоздатьСоединение(Соединение);
|
||||
|
||||
Если Не ЭтоКоннектор(Соединение) Тогда
|
||||
Возврат Соединение;
|
||||
КонецЕсли;
|
||||
|
||||
Результат = Соединение.Disconnect();
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоКоннектор(Знач Значение) Экспорт
|
||||
|
||||
Возврат Строка(ТипЗнч(Значение)) = "AddIn.OPI_SSH.Main";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьНастройкиЛогинПароль(Знач Хост, Знач Порт, Знач Логин, Знач Пароль = "") Экспорт
|
||||
|
||||
Строка_ = "Строка";
|
||||
|
||||
СтруктураКонфигурации = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("auth_type", "password", Строка_ , СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("host" , Хост , Строка_ , СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("port" , Порт , "Число" , СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("username" , Логин , Строка_ , СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("password" , Пароль , Строка_ , СтруктураКонфигурации);
|
||||
|
||||
Возврат СтруктураКонфигурации;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьНастройкиПриватныйКлюч(Знач Хост
|
||||
, Знач Порт
|
||||
, Знач Логин
|
||||
, Знач Приватный
|
||||
, Знач Публичный = ""
|
||||
, Знач Пароль = "") Экспорт
|
||||
|
||||
Строка_ = "Строка";
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьФайлНаДиске(Приватный);
|
||||
Приватный_ = Приватный.Путь;
|
||||
|
||||
Если ЗначениеЗаполнено(Публичный) Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьФайлНаДиске(Публичный);
|
||||
Публичный_ = Публичный.Путь;
|
||||
Иначе
|
||||
Публичный_ = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураКонфигурации = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("auth_type" , "private_key" , Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("host" , Хост , Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("port" , Порт , "Число", СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("username" , Логин , Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("key_path" , Приватный_ , Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("pub_path" , Публичный_ , Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("passphrase", Пароль , Строка_, СтруктураКонфигурации);
|
||||
|
||||
Возврат СтруктураКонфигурации;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьНастройкиЧерезАгента(Знач Хост, Знач Порт, Знач Логин) Экспорт
|
||||
|
||||
Строка_ = "Строка";
|
||||
|
||||
СтруктураКонфигурации = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("auth_type" , "agent", Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("host" , Хост , Строка_, СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("port" , Порт , "Число", СтруктураКонфигурации);
|
||||
OPI_Инструменты.ДобавитьПоле("username" , Логин , Строка_, СтруктураКонфигурации);
|
||||
|
||||
Возврат СтруктураКонфигурации;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьНастройкиПрокси(Знач Адрес
|
||||
, Знач Порт
|
||||
, Знач Вид = "socks5"
|
||||
, Знач Логин = Неопределено
|
||||
, Знач Пароль = Неопределено) Экспорт
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат OPI_Компоненты.ПолучитьНастройкиПрокси(Адрес, Порт, Вид, Логин, Пароль);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ПроверитьСоздатьСоединение(Соединение)
|
||||
|
||||
Если Не ЭтоКоннектор(Соединение) Тогда
|
||||
|
||||
ЗакрыватьСоединение = Истина;
|
||||
Соединение = ОткрытьСоединениеПоКонфигурации(Соединение);
|
||||
|
||||
Иначе
|
||||
ЗакрыватьСоединение = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЗакрыватьСоединение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОткрытьСоединениеПоКонфигурации(Знач СтруктураКонфигурации)
|
||||
|
||||
Если ЭтоКоннектор(СтруктураКонфигурации) Тогда
|
||||
Возврат СтруктураКонфигурации;
|
||||
КонецЕсли;
|
||||
|
||||
ШаблонОшибки = "Передана некорректная конфигурация соединения: %1";
|
||||
|
||||
Попытка
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(СтруктураКонфигурации);
|
||||
Исключение
|
||||
|
||||
Результат = Новый Соответствие;
|
||||
Результат.Вставить("result", Ложь);
|
||||
Результат.Вставить("error" , СтрШаблон(ШаблонОшибки, ОписаниеОшибки()));
|
||||
Возврат Результат;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Если Не OPI_Инструменты.ПолеКоллекцииСуществует(СтруктураКонфигурации, "set") Тогда
|
||||
|
||||
Результат = Новый Соответствие;
|
||||
Результат.Вставить("result", Ложь);
|
||||
Результат.Вставить("error" , СтрШаблон(ШаблонОшибки, "отсутствуют основные параметры соединения"));
|
||||
Возврат Результат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НастройкиSSH = СтруктураКонфигурации["set"];
|
||||
Прокси = OPI_Инструменты.ПолучитьИли(СтруктураКонфигурации, "proxy", Неопределено);
|
||||
|
||||
Возврат ОткрытьСоединение(НастройкиSSH, Прокси);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УстановитьНастройки(Знач Коннектор, Знач НастройкиSSH)
|
||||
|
||||
ШаблонОшибки = "Передана некорректная конфигурация соединения: %1";
|
||||
|
||||
Попытка
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(НастройкиSSH);
|
||||
Исключение
|
||||
|
||||
Результат = Новый Соответствие;
|
||||
Результат.Вставить("result", Ложь);
|
||||
Результат.Вставить("error" , СтрШаблон(ШаблонОшибки, ОписаниеОшибки()));
|
||||
Возврат Результат;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
СтрокаНастроек = OPI_Инструменты.JSONСтрокой(НастройкиSSH);
|
||||
|
||||
Результат = Коннектор.SetSettings(СтрокаНастроек);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УстановитьПрокси(Знач Коннектор, Знач Прокси)
|
||||
|
||||
Если Не ЗначениеЗаполнено(Прокси) Тогда
|
||||
Возврат Новый Структура("result", Истина);
|
||||
КонецЕсли;
|
||||
|
||||
ШаблонОшибки = "Передана некорректная конфигурация прокси: %1";
|
||||
|
||||
Попытка
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Прокси);
|
||||
Исключение
|
||||
|
||||
Результат = Новый Соответствие;
|
||||
Результат.Вставить("result", Ложь);
|
||||
Результат.Вставить("error" , СтрШаблон(ШаблонОшибки, ОписаниеОшибки()));
|
||||
Возврат Результат;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
СтрокаПрокси = OPI_Инструменты.JSONСтрокой(Прокси);
|
||||
|
||||
Результат = Коннектор.SetProxy(СтрокаПрокси);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -1,370 +0,0 @@
|
||||
// OneScript: ./OInt/tools/Modules/OPI_Компоненты.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023-2026 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UsingHardcodePath-off
|
||||
// BSLLS:Typo-off
|
||||
// BSLLS:DeprecatedMessage-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:ExecuteExternalCodeInCommonModule-off
|
||||
// BSLLS:DuplicateStringLiteral-off
|
||||
// BSLLS:MagicNumber-off
|
||||
// BSLLS:UsingHardcodeNetworkAddress-off
|
||||
// BSLLS:UsingSynchronousCalls-off
|
||||
|
||||
//@skip-check use-non-recommended-method
|
||||
//@skip-check module-structure-top-region
|
||||
//@skip-check module-structure-method-in-regions
|
||||
//@skip-check undefined-function-or-procedure
|
||||
//@skip-check wrong-string-literal-content
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
#Использовать "./internal"
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область Основные
|
||||
|
||||
Функция ПолучитьКомпоненту(Знач ИмяКомпоненты, Знач Класс = "Main") Экспорт
|
||||
|
||||
Компонента = Неопределено;
|
||||
Ошибка = "";
|
||||
ИмяКомпоненты = "OPI_" + ИмяКомпоненты;
|
||||
|
||||
Если Не ИнициализироватьВнешнююКомпоненту(ИмяКомпоненты, Класс, Компонента) Тогда
|
||||
|
||||
Ошибка = Неопределено;
|
||||
Компонента = ПодключитьКомпонентуНаСервере(ИмяКомпоненты, Класс, Ошибка);
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибка) Тогда
|
||||
СформироватьИсключениеКомпоненты(Ошибка);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Компонента;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоКомпонента(Знач Значение) Экспорт
|
||||
|
||||
ТипЗначения = Строка(ТипЗнч(Значение));
|
||||
Возврат СтрНачинаетсяС(ТипЗначения, "AddIn.");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТребуетсяПередачаЧерезФайл() Экспорт
|
||||
|
||||
// BSLLS:CommentedCode-off
|
||||
|
||||
// Компоненты в 1С на Linux не могут стабильно отдавать и принимать данные свыше 30 КБ
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations/issues/72
|
||||
|
||||
// UPD: В неизолированном режиме не падает
|
||||
|
||||
// Возврат Не OPI_Инструменты.ЭтоWindows() И Не OPI_Инструменты.ЭтоOneScript();
|
||||
|
||||
// BSLLS:CommentedCode-on
|
||||
|
||||
Возврат Ложь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область TCP
|
||||
|
||||
Функция УстановитьTls(Знач Компонета, Знач Tls) Экспорт
|
||||
|
||||
Результат = Новый Структура("result", Истина);
|
||||
|
||||
Если ЗначениеЗаполнено(Tls) Тогда
|
||||
|
||||
СообщениеОшибки = "Переданы некорректные настройки Tls!";
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Tls, СообщениеОшибки);
|
||||
|
||||
ИспользоватьTls = OPI_Инструменты.ПолучитьИли(Tls, "use_tls" , Ложь);
|
||||
ОтключитьВалидацию = OPI_Инструменты.ПолучитьИли(Tls, "accept_invalid_certs", Ложь);
|
||||
ПутьКСертификату = OPI_Инструменты.ПолучитьИли(Tls, "ca_cert_path" , "");
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(ИспользоватьTls);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(ОтключитьВалидацию);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ПутьКСертификату);
|
||||
|
||||
Результат = Компонета.SetTLS(ИспользоватьTls, ОтключитьВалидацию, ПутьКСертификату);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьНастройкиTls(Знач ОтключитьПроверкуСертификатов, Знач ПутьКСертификату = "") Экспорт
|
||||
|
||||
СтруктураСертификата = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("use_tls" , Истина , "Булево", СтруктураСертификата);
|
||||
OPI_Инструменты.ДобавитьПоле("accept_invalid_certs", ОтключитьПроверкуСертификатов, "Булево", СтруктураСертификата);
|
||||
OPI_Инструменты.ДобавитьПоле("ca_cert_path" , ПутьКСертификату , "Строка", СтруктураСертификата);
|
||||
|
||||
Возврат СтруктураСертификата;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьНастройкиПрокси(Знач Адрес
|
||||
, Знач Порт
|
||||
, Знач Вид = "socks5"
|
||||
, Знач Логин = Неопределено
|
||||
, Знач Пароль = Неопределено) Экспорт
|
||||
|
||||
СтруктураНастроек = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("server" , Адрес, "Строка", СтруктураНастроек);
|
||||
OPI_Инструменты.ДобавитьПоле("port" , Порт , "Число" , СтруктураНастроек);
|
||||
OPI_Инструменты.ДобавитьПоле("proxy_type", Вид , "Строка", СтруктураНастроек);
|
||||
|
||||
Если Не Логин = Неопределено Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);
|
||||
СтруктураНастроек.Вставить("login", Логин);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Пароль = Неопределено Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
|
||||
СтруктураНастроек.Вставить("password", Пароль);
|
||||
КонецЕсли;
|
||||
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат СтруктураНастроек;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ВнутреннееХранилище
|
||||
|
||||
Функция ПоместитьДанные(Знач Компонента, Знач Значение) Экспорт
|
||||
|
||||
Обработано = Ложь;
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
|
||||
ФайлДанных = Новый Файл(Значение);
|
||||
|
||||
Если ФайлДанных.Существует() Тогда
|
||||
Результат = Компонента.LoadFileToVault(ФайлДанных.ПолноеИмя);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
Обработано = Истина;
|
||||
Иначе
|
||||
Результат = Компонента.LoadBase64ToVault(Значение);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
Обработано = Результат["result"];
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Обработано Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Значение, Истина, Истина);
|
||||
Результат = Компонента.LoadBinaryToVault(Значение);
|
||||
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ИнициализироватьВнешнююКомпоненту(Знач ИмяКомпоненты, Знач Класс, Компонента)
|
||||
|
||||
Попытка
|
||||
Компонента = Новый("AddIn." + ИмяКомпоненты + "." + Класс);
|
||||
Возврат Истина;
|
||||
Исключение
|
||||
Возврат Ложь;
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПодключитьКомпонентуНаСервере(Знач ИмяКомпоненты, Знач Класс, Ошибка)
|
||||
|
||||
Если OPI_Инструменты.ЭтоOneScript() Тогда
|
||||
ИмяМакета = КаталогКомпонентOS() + ИмяКомпоненты + ".zip";
|
||||
Иначе
|
||||
ИмяМакета = "ОбщийМакет." + ИмяКомпоненты;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
ПодключитьКомпонентуНеИзолированно(ИмяМакета, ИмяКомпоненты);
|
||||
Компонента = Новый("AddIn." + ИмяКомпоненты + "." + Класс);
|
||||
Ошибка = Неопределено;
|
||||
Возврат Компонента;
|
||||
Исключение
|
||||
Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
Возврат Неопределено;
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПодключитьКомпонентуНеИзолированно(ИмяМакета, ИмяКомпоненты)
|
||||
|
||||
ЭтоOneScript = OPI_Инструменты.ЭтоOneScript();
|
||||
НеобходимТипПоСистеме = Не ЭтоOneScript И Не OPI_Инструменты.ЭтоWindows();
|
||||
|
||||
Если ЭтоOneScript Тогда
|
||||
|
||||
НеобходимТипПоВерсии = Ложь;
|
||||
|
||||
Иначе
|
||||
|
||||
СистемнаяИнформация = Новый СистемнаяИнформация();
|
||||
|
||||
Версия1С = СистемнаяИнформация.ВерсияПриложения;
|
||||
Версия1С = СтрРазделить(Версия1С, ".");
|
||||
|
||||
Часть1 = Число(Версия1С[0]);
|
||||
Часть2 = Число(Версия1С[1]);
|
||||
Часть3 = Число(Версия1С[2]);
|
||||
|
||||
НеобходимТипПоВерсии = Часть1 > 8 Или Часть2 > 3 Или Часть3 > 20;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НеобходимТип = НеобходимТипПоВерсии И НеобходимТипПоСистеме;
|
||||
|
||||
Если Не НеобходимТип Тогда
|
||||
|
||||
Если Не НеобходимТипПоВерсии Тогда
|
||||
ТипПодключенияВнешнейКомпоненты = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Результат = ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native);
|
||||
|
||||
Иначе
|
||||
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
|
||||
//@skip-check module-unused-local-variable
|
||||
ТипПодключения = ТипПодключенияВнешнейКомпоненты.НеИзолированно;
|
||||
//@skip-check server-execution-safe-mode
|
||||
|
||||
// BSLLS:UnusedLocalVariable-on
|
||||
|
||||
// BSLLS:LineLength-off
|
||||
Результат = Вычислить("ПодключитьВнешнююКомпоненту(ИмяМакета, ИмяКомпоненты, ТипВнешнейКомпоненты.Native, ТипПодключения)");
|
||||
// BSLLS:LineLength-on
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогКомпонентOS() Экспорт
|
||||
|
||||
КаталогБиблиотеки = OPI_Инструменты.ПолучитьКаталогБиблиотеки();
|
||||
|
||||
// BSLLS:UsingHardcodePath-off
|
||||
|
||||
КаталогКомпонент = СтрШаблон("%1/%2/", КаталогБиблиотеки, "addins");
|
||||
|
||||
// BSLLS:UsingHardcodePath-on
|
||||
|
||||
Возврат КаталогКомпонент;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура СформироватьИсключениеКомпоненты(Знач Ошибка)
|
||||
|
||||
Текст = "Не удалось инициализировать внешнюю компоненту. Возможно, она несовместима с вашей операционной системой.";
|
||||
|
||||
Если Не OPI_Инструменты.ЭтоWindows() Тогда
|
||||
|
||||
Текст = Текст
|
||||
+ Символы.ПС
|
||||
+ Символы.ПС
|
||||
+ "Важно: Для работы компоненты требуется GLIBC >=2.18"
|
||||
+ " и OpenSSL версии 3.x"
|
||||
+ Символы.ПС
|
||||
+ "Проверьте, что данные зависимости удовлетворены в вашей системе!";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Текст
|
||||
+ Символы.ПС
|
||||
+ Символы.ПС
|
||||
+ "Подробнее: https://openintegrations.dev/docs/Start/Component-requirements"
|
||||
+ Символы.ПС
|
||||
+ Символы.ПС
|
||||
+ "Системная информация:"
|
||||
+ Ошибка;
|
||||
|
||||
ВызватьИсключение Текст;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Region Alternate
|
||||
|
||||
Function GetAddIn(Val AddInName, Val Class = "Main") Export
|
||||
Return ПолучитьКомпоненту(AddInName, Class);
|
||||
EndFunction
|
||||
|
||||
Function IsAddIn(Val Value) Export
|
||||
Return ЭтоКомпонента(Value);
|
||||
EndFunction
|
||||
|
||||
Function FileTransferRequired() Export
|
||||
Return ТребуетсяПередачаЧерезФайл();
|
||||
EndFunction
|
||||
|
||||
Function SetTls(Val AddIn, Val Tls) Export
|
||||
Return УстановитьTls(AddIn, Tls);
|
||||
EndFunction
|
||||
|
||||
Function GetTlsSettings(Val DisableCertVerification, Val CertFilepath = "") Export
|
||||
Return ПолучитьНастройкиTls(DisableCertVerification, CertFilepath);
|
||||
EndFunction
|
||||
|
||||
Function GetProxySettings(Val Address, Val Port, Val View = "socks5", Val Login = Undefined, Val Password = Undefined) Export
|
||||
Return ПолучитьНастройкиПрокси(Address, Port, View, Login, Password);
|
||||
EndFunction
|
||||
|
||||
Function PutData(Val AddIn, Val Value) Export
|
||||
Return ПоместитьДанные(AddIn, Value);
|
||||
EndFunction
|
||||
|
||||
Function AddInsFolderOS() Export
|
||||
Return КаталогКомпонентOS();
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,267 +0,0 @@
|
||||
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023-2026 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:UsingSynchronousCalls-off
|
||||
|
||||
//@skip-check module-structure-top-region
|
||||
//@skip-check module-structure-method-in-regions
|
||||
//@skip-check wrong-string-literal-content
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
#Использовать "./internal"
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция СоздатьПодпись(Знач КлючПодписи, Знач ДанныеПодписи, Знач Алгоритм, Знач ФункцияХеша) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(КлючПодписи);
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ДанныеПодписи);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Алгоритм);
|
||||
|
||||
Алгоритм = вРег(Алгоритм);
|
||||
ФункцияХеша = вРег(ФункцияХеша);
|
||||
|
||||
Если Алгоритм = "HMAC" Тогда
|
||||
Результат = HMAC(КлючПодписи, ДанныеПодписи, ФункцияХеша);
|
||||
ИначеЕсли Алгоритм = "RSA" Тогда
|
||||
Результат = RSA(КлючПодписи, ДанныеПодписи, ФункцияХеша);
|
||||
Иначе
|
||||
ВызватьИсключение "Ошибка работы с криптографией: неподдерживаемый метод";
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция RSA(Знач Ключ, Знач Данные, Знач ФункцияХеша) Экспорт
|
||||
|
||||
Компонента = OPI_Компоненты.ПолучитьКомпоненту("Cryptography");
|
||||
|
||||
Если ФункцияХеша = "SHA256" Тогда
|
||||
Результат = Компонента.RsaSha256(Ключ, Данные);
|
||||
ИначеЕсли ФункцияХеша = "SHA1" Тогда
|
||||
Результат = Компонента.RsaSha1(Ключ, Данные);
|
||||
Иначе
|
||||
Результат = "неподдерживаемый метод хеширования";
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Результат) = Тип("Строка") Тогда
|
||||
ВызватьИсключение СтрШаблон("Ошибка работы с криптографией: %1", Результат);
|
||||
Иначе
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция JWT(Знач Payload, Знач КлючПодписи, Знач Метод, Знач ДопЗаголовки = "") Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Метод);
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Payload);
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(КлючПодписи, Истина, Ложь);
|
||||
|
||||
Метод = вРег(Метод);
|
||||
|
||||
Если Метод = "HS256" Тогда
|
||||
|
||||
Алгоритм = "HMAC";
|
||||
ФункцияХеша = "SHA256";
|
||||
|
||||
ИначеЕсли Метод = "RS256" Тогда
|
||||
|
||||
Алгоритм = "RSA";
|
||||
ФункцияХеша = "SHA256";
|
||||
|
||||
Иначе
|
||||
ВызватьИсключение "JWT: Неподдерживаемый метод";
|
||||
КонецЕсли;
|
||||
|
||||
Заголовки = Новый Структура("alg,typ", Метод, "JWT");
|
||||
|
||||
Если ЗначениеЗаполнено(ДопЗаголовки) Тогда
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(ДопЗаголовки);
|
||||
|
||||
//@skip-check bsl-legacy-check-for-each-statetement-collection
|
||||
Для Каждого КлючЗначение Из ДопЗаголовки Цикл
|
||||
Заголовки.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
PayloadСтрокой = OPI_Инструменты.JSONСтрокой(Payload, , Ложь);
|
||||
ЗаголовкиСтрокой = OPI_Инструменты.JSONСтрокой(Заголовки, , Ложь);
|
||||
|
||||
PayloadДвоичные = ПолучитьДвоичныеДанныеИзСтроки(PayloadСтрокой);
|
||||
ЗаголовкиДвоичные = ПолучитьДвоичныеДанныеИзСтроки(ЗаголовкиСтрокой);
|
||||
|
||||
PayloadBase64 = Base64UrlEncode(PayloadДвоичные);
|
||||
ЗаголовкиBase64 = Base64UrlEncode(ЗаголовкиДвоичные);
|
||||
|
||||
Токен = СтрШаблон("%1.%2", ЗаголовкиBase64, PayloadBase64);
|
||||
ТокенДвоичные = ПолучитьДвоичныеДанныеИзСтроки(Токен);
|
||||
|
||||
Подпись = СоздатьПодпись(КлючПодписи, ТокенДвоичные, Алгоритм, ФункцияХеша);
|
||||
ПодписьBase64 = Base64UrlEncode(Подпись);
|
||||
|
||||
Токен = СтрШаблон("%1.%2", Токен, ПодписьBase64);
|
||||
|
||||
Возврат Токен;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Область Заимствованные
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2019, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция HMAC(Знач Ключ, Знач Данные, Знач ФункцияХеша) Экспорт
|
||||
|
||||
Дважды = 2;
|
||||
РазмерБлока = 64;
|
||||
ТипХеша = ХешФункция[ФункцияХеша];
|
||||
|
||||
Если Ключ.Размер() > РазмерБлока Тогда
|
||||
Ключ = Хеш(Ключ, ТипХеша);
|
||||
КонецЕсли;
|
||||
|
||||
Если Ключ.Размер() <= РазмерБлока Тогда
|
||||
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
|
||||
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
|
||||
КонецЕсли;
|
||||
|
||||
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
|
||||
|
||||
Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
|
||||
Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
|
||||
|
||||
Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||
Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
|
||||
|
||||
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
|
||||
|
||||
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), ТипХеша)), ТипХеша);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Хеш(ДвоичныеДанные, Тип) Экспорт
|
||||
|
||||
Хеширование = Новый ХешированиеДанных(Тип);
|
||||
Хеширование.Добавить(ДвоичныеДанные);
|
||||
|
||||
Возврат Хеширование.ХешСумма;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
|
||||
|
||||
МассивДвоичныхДанных = Новый Массив;
|
||||
МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
|
||||
МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
|
||||
|
||||
Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПовторитьСтроку(Строка, Количество) Экспорт
|
||||
|
||||
Части = Новый Массив(Количество);
|
||||
|
||||
Для К = 1 По Количество Цикл
|
||||
Части.Добавить(Строка);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтрСоединить(Части, "");
|
||||
|
||||
КонецФункции
|
||||
|
||||
// The MIT License (MIT)
|
||||
//
|
||||
// Copyright (c) 2017 Vasily Pintov
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/pintov/1c-jwt
|
||||
|
||||
Функция Base64UrlEncode(Знач Значение) Экспорт
|
||||
|
||||
Вывод = Base64Строка(Значение);
|
||||
Вывод = СтрРазделить(Вывод, "=")[0];
|
||||
Вывод = СтрЗаменить(Вывод, Символы.ВК + Символы.ПС, "");
|
||||
Вывод = СтрЗаменить(Вывод, "+" , "-");
|
||||
Вывод = СтрЗаменить(Вывод, "/" , "_");
|
||||
Возврат Вывод;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Region Alternate
|
||||
|
||||
Function CreateSignature(Val SignKey, Val SignatureData, Val Algorithm, Val HashFunc) Export
|
||||
Return СоздатьПодпись(SignKey, SignatureData, Algorithm, HashFunc);
|
||||
EndFunction
|
||||
|
||||
Function Hash(BinaryData, Type) Export
|
||||
Return Хеш(BinaryData, Type);
|
||||
EndFunction
|
||||
|
||||
Function UniteBinaryData(BinaryData1, BinaryData2) Export
|
||||
Return СклеитьДвоичныеДанные(BinaryData1, BinaryData2);
|
||||
EndFunction
|
||||
|
||||
Function RepeatString(String, Count) Export
|
||||
Return ПовторитьСтроку(String, Count);
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
// OneScript: ./OInt/tools/Modules/internal/Modules/internal/Modules/OPI_BuildHash.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023-2026 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// BSLLS:CommonModuleMissingAPI-off
|
||||
// BSLLS:CodeOutOfRegion-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
//@skip-check module-structure-method-in-regions
|
||||
|
||||
Function GetHashSum() Export
|
||||
|
||||
LastBuildHash = "8F99EA97EE8F028DF9DAE298EC9F8F3AF1367CCD7AFFC692E76E16B630941C2D";
|
||||
|
||||
Return LastBuildHash;
|
||||
|
||||
EndFunction
|
||||
|
||||
#Region Alternate
|
||||
|
||||
|
||||
|
||||
#EndRegion
|
||||
Vendored
-583
@@ -1,583 +0,0 @@
|
||||
// OneScript: ./OInt/tools/Modules/internal/Modules/internal/Modules/OPI_ПреобразованиеТипов.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023-2026 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:UsingSynchronousCalls-off
|
||||
// BSLLS:CognitiveComplexity-off
|
||||
|
||||
//@skip-check module-structure-top-region
|
||||
//@skip-check module-structure-method-in-regions
|
||||
//@skip-check undefined-function-or-procedure
|
||||
//@skip-check wrong-string-literal-content
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ПолучитьДвоичныеДанные(Значение, Знач Безусловно = Ложь, Знач ПопыткаB64 = Истина) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Значение = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
ИначеЕсли ЭтоКоллекция(Значение) Тогда
|
||||
|
||||
Значение = JSONСтрокой(Значение);
|
||||
Значение = ПолучитьДвоичныеДанныеИзСтроки(Значение);
|
||||
|
||||
Иначе
|
||||
ПолучитьСтроку(Значение);
|
||||
ПреобразоватьИсточникВЗначение(Значение, ПопыткаB64);
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
Если Безусловно Тогда
|
||||
ПолучитьСтроку(Значение);
|
||||
Значение = ПолучитьДвоичныеДанныеИзСтроки(Значение);
|
||||
Иначе
|
||||
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
|
||||
КонецЕсли;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
|
||||
ПолучитьДвоичныеДанные(Значение);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеУП = Значение;
|
||||
ВернутьУправляющиеПоследовательности(ЗначениеУП);
|
||||
|
||||
Файл = Новый Файл(ЗначениеУП);
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
Значение = Новый ФайловыйПоток(ЗначениеУП, РежимОткрытияФайла.Открыть);
|
||||
Иначе
|
||||
ПолучитьДвоичныеДанные(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьКоллекцию(Значение, ПоСети = Истина, Успех = Ложь) Экспорт
|
||||
|
||||
Успех = Ложь;
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Успех = Истина;
|
||||
|
||||
Попытка
|
||||
|
||||
// BSLLS:ExternalAppStarting-off
|
||||
|
||||
ИсходноеЗначение = Значение;
|
||||
|
||||
Если ЭтоКоллекция(Значение) Тогда
|
||||
Возврат;
|
||||
Иначе
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
|
||||
Иначе
|
||||
Значение = ЧислоВСтроку(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеУП = Значение;
|
||||
ВернутьУправляющиеПоследовательности(ЗначениеУП);
|
||||
|
||||
Файл = Новый Файл(ЗначениеУП);
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
|
||||
ЧтениеJSON.ОткрытьФайл(ЗначениеУП);
|
||||
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
ИначеЕсли ПоСети И (СтрНачинаетсяС(СокрЛ(ЗначениеУП), "http://")
|
||||
Или СтрНачинаетсяС(СокрЛ(ЗначениеУП), "https://")) Тогда
|
||||
|
||||
Значение = СкачатьФайл(ЗначениеУП);
|
||||
|
||||
Иначе
|
||||
|
||||
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
|
||||
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
|
||||
|
||||
Успех = Ложь;
|
||||
Значение = ИсходноеЗначение;
|
||||
ЗначениеВМассив(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// BSLLS:ExternalAppStarting-on
|
||||
|
||||
Исключение
|
||||
|
||||
Успех = Ложь;
|
||||
Значение = ИсходноеЗначение;
|
||||
ЗначениеВМассив(Значение);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьКоллекциюКлючИЗначение(Значение
|
||||
, Знач СообщениеОшибки = "Указанное значение не является подходящей коллекцией!") Экспорт
|
||||
|
||||
ПолучитьКоллекцию(Значение);
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||
ВызватьИсключение СообщениеОшибки;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьМассив(Значение) Экспорт
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПолучитьКоллекцию(Значение);
|
||||
|
||||
Если Не ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||
ЗначениеВМассив(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьБулево(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
Иначе
|
||||
|
||||
Значение = Булево(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
ВызватьИсключение "Ошибка получения данных булево из параметра";
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ЭтоСимвольное(Значение) Тогда
|
||||
|
||||
Значение = ЧислоВСтроку(Значение);
|
||||
|
||||
Если Не ИзИсточника Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеУП = Значение;
|
||||
ВернутьУправляющиеПоследовательности(ЗначениеУП);
|
||||
|
||||
Файл = Новый Файл(ЗначениеУП);
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
|
||||
ЧтениеТекста = Новый ЧтениеТекста(ЗначениеУП);
|
||||
Значение = ЧтениеТекста.Прочитать();
|
||||
ЧтениеТекста.Закрыть();
|
||||
|
||||
ИначеЕсли СтрНачинаетсяС(СокрЛ(ЗначениеУП), "http://")
|
||||
Или СтрНачинаетсяС(СокрЛ(ЗначениеУП), "https://") Тогда
|
||||
|
||||
Значение = СкачатьФайл(ЗначениеУП);
|
||||
ПолучитьСтроку(Значение);
|
||||
|
||||
Иначе
|
||||
|
||||
Значение = ЧислоВСтроку(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
|
||||
|
||||
ИначеЕсли ЭтоКоллекция(Значение) Тогда
|
||||
|
||||
Значение = JSONСтрокой(Значение);
|
||||
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("ЗаписьXML") Тогда
|
||||
|
||||
Значение = Значение.Закрыть();
|
||||
|
||||
Иначе
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
Значение = Строка(Значение);
|
||||
Возврат;
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьДату(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Дата = "Дата";
|
||||
|
||||
Попытка
|
||||
|
||||
Если ТипЗнч(Значение) = Тип(Дата) Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
Иначе
|
||||
|
||||
Значение = XMLЗначение(Тип(Дата), Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
ООД = Новый ОписаниеТипов(Дата);
|
||||
Значение = ООД.ПривестиЗначение(Значение);
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьЧисло(Значение) Экспорт
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Число") Тогда
|
||||
|
||||
Возврат;
|
||||
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
|
||||
|
||||
Значение = ?(Значение, 1, 0);
|
||||
|
||||
Иначе
|
||||
|
||||
ОписаниеТипа = Новый ОписаниеТипов("Число");
|
||||
Значение_ = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
|
||||
Если Значение_ = 0 Тогда
|
||||
|
||||
Попытка
|
||||
|
||||
Значение_ = Строка(Значение);
|
||||
Значение_ = СтрЗаменить(Значение, Символы.НПП, "");
|
||||
Значение_ = СтрЗаменить(Значение, " " , "");
|
||||
Значение_ = СтрЗаменить(Значение, "," , ".");
|
||||
|
||||
Если СтрЧислоВхождений(Значение_, ".") > 1 Тогда
|
||||
|
||||
МассивЧастей = СтрРазделить(Значение_, ".");
|
||||
ПоследняяЧасть = МассивЧастей.ВГраница();
|
||||
ДробнаяЧасть = МассивЧастей[ПоследняяЧасть];
|
||||
|
||||
МассивЧастей.Удалить(ПоследняяЧасть);
|
||||
|
||||
Значение_ = СтрШаблон("%1.%2", СтрСоединить(МассивЧастей), ДробнаяЧасть);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// BSLLS:TryNumber-off
|
||||
Значение = Число(Значение_);
|
||||
// BSLLS:TryNumber-on
|
||||
|
||||
Исключение
|
||||
Возврат;
|
||||
КонецПопытки;
|
||||
|
||||
Иначе
|
||||
Значение = Значение_;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьФайлНаДиске(Значение, Знач Расширение = "tmp") Экспорт
|
||||
|
||||
СтруктураВозврата = Новый Структура("Путь,Временный", "", Ложь);
|
||||
ЗначениеСтрокой = ЧислоВСтроку(Значение);
|
||||
ЗначениеФайл = Новый Файл(ЗначениеСтрокой);
|
||||
|
||||
Если ЗначениеФайл.Существует() Тогда
|
||||
|
||||
СтруктураВозврата.Вставить("Путь", ЗначениеФайл.ПолноеИмя);
|
||||
|
||||
Иначе
|
||||
|
||||
ПолучитьДвоичныеДанные(Значение, Истина);
|
||||
|
||||
// BSLLS:MissingTemporaryFileDeletion-off
|
||||
|
||||
//@skip-check missing-temporary-file-deletion
|
||||
Путь = ПолучитьИмяВременногоФайла(Расширение);
|
||||
|
||||
// BSLLS:MissingTemporaryFileDeletion-on
|
||||
|
||||
Значение.Записать(Путь);
|
||||
|
||||
СтруктураВозврата.Вставить("Путь" , Путь);
|
||||
СтруктураВозврата.Вставить("Временный", Истина);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Значение = СтруктураВозврата;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВернутьУправляющиеПоследовательности(Текст) Экспорт
|
||||
|
||||
ПолучитьСтроку(Текст);
|
||||
|
||||
СоответствиеСимволов = ПолучитьСоответствиеУправляющихПоследовательностей();
|
||||
|
||||
Для Каждого Символ Из СоответствиеСимволов Цикл
|
||||
|
||||
Текст = СтрЗаменить(Текст, Символ.Значение, Символ.Ключ);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаменитьУправляющиеПоследовательности(Текст) Экспорт
|
||||
|
||||
ПолучитьСтроку(Текст);
|
||||
|
||||
СоответствиеСимволов = ПолучитьСоответствиеУправляющихПоследовательностей();
|
||||
|
||||
Для Каждого Символ Из СоответствиеСимволов Цикл
|
||||
|
||||
Текст = СтрЗаменить(Текст, Символ.Ключ , Символ.Значение);
|
||||
Текст = СтрЗаменить(Текст, "\" + Символ.Значение, Символ.Ключ);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗначениеВМассив(Значение) Экспорт
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Значение_ = Новый Массив;
|
||||
Значение_.Добавить(Значение);
|
||||
|
||||
Значение = Значение_;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция JSONСтрокой(Знач Данные
|
||||
, Знач Экранирование = "Нет"
|
||||
, Знач ПереносСтрок = Истина
|
||||
, Знач ДвойныеКавычки = Истина) Экспорт
|
||||
|
||||
Перенос = ?(ПереносСтрок, ПереносСтрокJSON.Windows, ПереносСтрокJSON.Нет);
|
||||
|
||||
ПараметрыJSON = Новый ПараметрыЗаписиJSON(Перенос
|
||||
, " "
|
||||
, ДвойныеКавычки
|
||||
, ЭкранированиеСимволовJSON[Экранирование]
|
||||
, Ложь
|
||||
, Ложь
|
||||
, Ложь
|
||||
, Ложь);
|
||||
|
||||
Попытка
|
||||
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
|
||||
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные);
|
||||
Возврат ЗаписьJSON.Закрыть();
|
||||
|
||||
Исключение
|
||||
Возврат "НЕ JSON: " + Строка(Данные);
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЧислоВСтроку(Знач Значение) Экспорт
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Число") Тогда
|
||||
|
||||
Если Значение = 0 Тогда
|
||||
Значение_ = "0";
|
||||
Иначе
|
||||
Значение_ = Формат(Значение, "ЧГ=0");
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
Значение_ = Строка(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение_;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ЭтоКоллекция(Знач Значение)
|
||||
|
||||
Возврат ТипЗнч(Значение) = Тип("Массив")
|
||||
Или ТипЗнч(Значение) = Тип("Структура")
|
||||
Или ТипЗнч(Значение) = Тип("Соответствие");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоСимвольное(Знач Значение)
|
||||
|
||||
Возврат ТипЗнч(Значение) = Тип("Строка")
|
||||
Или ТипЗнч(Значение) = Тип("Число")
|
||||
Или ТипЗнч(Значение) = Тип("Дата");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьСоответствиеУправляющихПоследовательностей()
|
||||
|
||||
СоответствиеСимволов = Новый Соответствие;
|
||||
|
||||
СоответствиеСимволов.Вставить("\n" , Символы.ПС);
|
||||
СоответствиеСимволов.Вставить("\r" , Символы.ВК);
|
||||
СоответствиеСимволов.Вставить("\f" , Символы.ПФ);
|
||||
СоответствиеСимволов.Вставить("\v" , Символы.ВТаб);
|
||||
|
||||
Возврат СоответствиеСимволов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПреобразоватьИсточникВЗначение(Значение, ПопыткаB64)
|
||||
|
||||
ЗначениеУП = Значение;
|
||||
ВернутьУправляющиеПоследовательности(ЗначениеУП);
|
||||
|
||||
Файл = Новый Файл(ЗначениеУП);
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
|
||||
Значение = Новый ДвоичныеДанные(ЗначениеУП);
|
||||
|
||||
ИначеЕсли СтрНачинаетсяС(СокрЛ(ЗначениеУП), "http://")
|
||||
Или СтрНачинаетсяС(СокрЛ(ЗначениеУП), "https://") Тогда
|
||||
|
||||
Значение = СкачатьФайл(ЗначениеУП);
|
||||
|
||||
Иначе
|
||||
|
||||
Если ПопыткаB64 Тогда
|
||||
|
||||
Значение_ = Base64Значение(Значение);
|
||||
|
||||
Если ТипЗнч(Значение_) = Тип("ДвоичныеДанные") Тогда
|
||||
Успех = Значение_.Размер() <> 0;
|
||||
Иначе
|
||||
Успех = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если Успех Тогда
|
||||
Значение = Значение_;
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
Успех = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Успех Тогда
|
||||
ВызватьИсключение "Значение не является путем к файлу или Base64 строкой";
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область HTTP
|
||||
|
||||
Функция СкачатьФайл(Знач URL)
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
КопироватьФайл(URL, ИВФ);
|
||||
|
||||
Данные = Новый ДвоичныеДанные(ИВФ);
|
||||
|
||||
//@skip-check empty-except-statement
|
||||
Попытка
|
||||
УдалитьФайлы(ИВФ);
|
||||
Исключение КонецПопытки;
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
<package-def>
|
||||
<module name="OPI_ЗапросыSQL" file="Modules/OPI_ЗапросыSQL.os"/>
|
||||
<module name="OPI_SQLQueries" file="Modules/OPI_ЗапросыSQL.os"/>
|
||||
<module name="OPI_ЗапросыSSH" file="Modules/OPI_ЗапросыSSH.os"/>
|
||||
<module name="OPI_Инструменты" file="Modules/internal/Modules/OPI_Инструменты.os"/>
|
||||
<module name="OPI_Tools" file="Modules/internal/Modules/OPI_Инструменты.os"/>
|
||||
<module name="OPI_Компоненты" file="Modules/OPI_Компоненты.os"/>
|
||||
<module name="OPI_AddIns" file="Modules/OPI_Компоненты.os"/>
|
||||
<module name="OPI_Криптография" file="Modules/internal/Modules/OPI_Криптография.os"/>
|
||||
<module name="OPI_Cryptography" file="Modules/internal/Modules/OPI_Криптография.os"/>
|
||||
<module name="OPI_ПреобразованиеТипов" file="Modules/internal/Modules/internal/Modules/OPI_ПреобразованиеТипов.os"/>
|
||||
<module name="OPI_TypeConversion" file="Modules/internal/Modules/internal/Modules/OPI_ПреобразованиеТипов.os"/>
|
||||
</package-def>
|
||||
Reference in New Issue
Block a user