1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-11-23 22:05:15 +02:00

Изменение обработки тестовых данных в пайплайнах, начало MongoDB

This commit is contained in:
Anton Titovets
2025-11-01 16:44:31 +03:00
parent 32f633e403
commit 9bbc3b6ec2
17 changed files with 39354 additions and 687 deletions

View File

@@ -51,9 +51,6 @@ pipeline {
stage('Prepare'){
steps{
sh 'cd ./src/%1/OInt && opm build && opm install oint-1.29.0.ospx && rm oint-1.29.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
@@ -71,11 +68,6 @@ pipeline {
catchError() {
runCommand('oscript ./ci/os/rp_stop.os "%1"')
}
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'rm "./data.json.gpg"'
sh 'gpg --batch --symmetric --cipher-algo AES256 --passphrase="$GPGKEY" ./data.json'
sh 'rm "./data.json"'
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'

View File

@@ -71,11 +71,6 @@ pipeline {
catchError() {
runCommand('oscript ./ci/os/rp_stop.os "%1"')
}
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'rm "./data.json.gpg"'
sh 'gpg --batch --symmetric --cipher-algo AES256 --passphrase="$GPGKEY" ./data.json'
sh 'rm "./data.json"'
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'

View File

@@ -151,11 +151,6 @@ pipeline {
catchError() {
runCommand('oscript ./ci/os/rp_stop.os "%1"')
}
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
bat encoding: 'UTF-8', script:'del "./data.json.gpg"'
bat encoding: 'UTF-8', script:'gpg --batch --symmetric --cipher-algo AES256 --passphrase="%%GPGKEY%%" ./data.json'
bat encoding: 'UTF-8', script:'del "./data.json"'
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
bat "git config user.email vitaly.the.alpaca@gmail.com"
bat 'git config user.name "Vitaly the Alpaca (bot)"'

View File

@@ -81,11 +81,6 @@ pipeline {
catchError() {
runCommand('oscript ./ci/os/rp_stop.os "%1"')
}
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'rm "./data.json.gpg"'
sh 'gpg --batch --symmetric --cipher-algo AES256 --passphrase="$GPGKEY" ./data.json'
sh 'rm "./data.json"'
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'

View File

@@ -78,11 +78,6 @@ pipeline {
catchError() {
runCommand('oscript ./ci/os/rp_stop.os "%1"')
}
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
bat encoding: 'UTF-8', script:'del "./data.json.gpg"'
bat encoding: 'UTF-8', script:'gpg --batch --symmetric --cipher-algo AES256 --passphrase="%%GPGKEY%%" ./data.json'
bat encoding: 'UTF-8', script:'del "./data.json"'
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
bat "git config user.email vitaly.the.alpaca@gmail.com"
bat 'git config user.name "Vitaly the Alpaca (bot)"'

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,7 @@
use serde_json::{Value};
use serde_json::Value;
use std::sync::mpsc::{self, Sender};
use std::thread::{self, JoinHandle};
use mongodb::Client;
pub struct MongoBackend {
pub(crate) tx: Sender<BackendCommand>,
@@ -10,7 +11,7 @@ pub struct MongoBackend {
pub enum BackendCommand {
Connect {
connection_string: String,
response: Sender<String>
response: Sender<String>,
},
Shutdown,
Execute {
@@ -19,7 +20,10 @@ pub enum BackendCommand {
collection: Option<String>,
data: Option<Value>,
fields: Option<Value>,
response: Sender<String>
response: Sender<String>,
},
Disconnect {
response: Sender<String>,
},
}
@@ -31,41 +35,78 @@ impl MongoBackend {
.name("opi_mongodb_backend".to_string())
.spawn(move || {
let rt = tokio::runtime::Runtime::new().unwrap();
//let mut client = None;
let mut client: Option<Client> = None;
while let Ok(cmd) = rx.recv() {
match cmd {
BackendCommand::Connect { connection_string, response } => {}
BackendCommand::Execute { operation
, database
, collection
, data
, fields
, response } => {}
BackendCommand::Connect { connection_string, response } => {
let client_result = rt.block_on(handle_connect(&connection_string));
match client_result {
Ok(new_client) => {
client = Some(new_client);
let _ = response.send("Connection established successfully".to_string());
}
Err(error_msg) => {
let _ = response.send(error_msg);
}
}
}
BackendCommand::Execute {
operation,
database,
collection,
data,
fields,
response,
} => {
if client.is_none() {
let _ = response.send("Not connected to MongoDB".to_string());
continue;
}
let _ = response.send(format!("Executing operation: {}", operation));
},
BackendCommand::Disconnect { response } => {
client = None;
let _ = response.send("Disconnected successfully".to_string());
}
BackendCommand::Shutdown => break,
}
}
}).unwrap();
})
.unwrap();
Self {
tx,
thread_handle: Some(thread_handle),
}
}
pub fn send_command(&self, cmd: BackendCommand) {
let _ = self.tx.send(cmd);
}
}
async fn handle_connect(connection_string: &str) -> Result<Client, String> {
let client = Client::with_uri_str(connection_string)
.await
.map_err(|e| format!("Failed to connect to MongoDB: {}", e))?;
client
.list_database_names()
.await
.map_err(|e| format!("Failed to verify connection: {}", e))?;
Ok(client)
}
impl Drop for MongoBackend {
fn drop(&mut self) {
let _ = self.tx.send(BackendCommand::Shutdown);
if let Some(handle) = self.thread_handle.take() {
if let Err(e) = handle.join() {
eprintln!("Backend thread panicked: {:?}", e);
}
}
}
}
}

View File

@@ -2,20 +2,32 @@ use std::sync::mpsc;
use crate::component::backend_core::{BackendCommand, MongoBackend};
impl MongoBackend {
pub fn connect(&self, connection_string: &str) -> Result<(), String>{
pub fn connect(&self, connection_string: &str) -> Result<(), String> {
let (response_tx, response_rx) = mpsc::channel();
let sending = self.tx.send(
BackendCommand::Connect {
self.tx
.send(BackendCommand::Connect {
connection_string: connection_string.to_string(),
response: response_tx
}
);
sending.map_err(|e| format!("Sending error: {}", e.to_string()))?;
response_rx.recv().map_err(|e| format!("Response receiver error: {}", e.to_string()))?;
response: response_tx,
})
.map_err(|e| format!("Sending error: {}", e))?;
response_rx
.recv()
.map_err(|e| format!("Response receiver error: {}", e))?;
Ok(())
}
pub fn disconnect(&self) -> Result<(), String> {
let (response_tx, response_rx) = mpsc::channel();
self.tx
.send(BackendCommand::Disconnect {
response: response_tx,
})
.map_err(|e| format!("Sending disconnect command failed: {}", e))?;
response_rx
.recv()
.map_err(|e| format!("Failed to receive disconnect response: {}", e))?;
Ok(())
}
}

View File

@@ -12,12 +12,10 @@ fn json_value_to_bson(value: &Value) -> Bson {
Value::Bool(b) => Bson::Boolean(*b),
Value::Null => Bson::Null,
// Массивы
Value::Array(arr) => {
Bson::Array(arr.iter().map(json_value_to_bson).collect())
},
// Объекты - проверяем специальные типы
Value::Object(obj) => {
if let Some(oid) = obj.get("__OPI_OID__") {
if let Some(oid_str) = oid.as_str() {

View File

@@ -11,25 +11,28 @@ use serde_json::json;
// МЕТОДЫ КОМПОНЕНТЫ
pub const METHODS: &[&[u16]] = &[
name!("Connect"),
name!("Disconnect")
];
pub fn get_params_amount(num: usize) -> usize {
match num {
0 => 0,
1 => 0,
_ => 0,
}
}
pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box<dyn getset::ValueType> {
match num {
0 => Box::new(obj.initialize()),
0 => Box::new(obj.connect()),
1 => Box::new(obj.disconnect()),
_ => Box::new(false),
}
}
// ПОЛЯ КОМПОНЕНТЫ
pub const PROPS: &[&[u16]] = &[
name!("URI")
name!("ConnectionString")
];
pub struct AddIn {
@@ -47,14 +50,14 @@ impl AddIn {
}
}
pub fn initialize(&mut self) -> String {
pub fn connect(&mut self) -> String {
if self.connection_string.is_empty() {
return format_json_error("Empty connection string!");
}
if self.initialized {
return format_json_error("Client already initialized!");
return format_json_error("Connection already initialized!");
}
let guard = match self.backend.lock(){
@@ -71,6 +74,26 @@ impl AddIn {
}
}
pub fn disconnect(&mut self) -> String {
if !self.initialized {
return format_json_error("Connection already closed!");
}
let guard = match self.backend.lock(){
Ok(lock) => lock,
Err(e) => return format_json_error(&e.to_string())
};
match guard.disconnect(){
Ok(_) => {
self.initialized = false;
json!({"result": true}).to_string()
},
Err(e) => format_json_error(&e.to_string())
}
}
pub fn get_field_ptr(&self, index: usize) -> *const dyn getset::ValueType {
match index {
0 => &self.connection_string as &dyn getset::ValueType as *const _,

Binary file not shown.

Binary file not shown.

View File

@@ -54,7 +54,7 @@
//
// Возвращаемое значение:
// Произвольный - Объект коннектора или структура с информацией об ошибке
Функция ОткрытьСоединение(Знач СтрокаПодключения = "") Экспорт
Функция ОткрытьСоединение(Знач СтрокаПодключения) Экспорт
Если ЭтоКоннектор(СтрокаПодключения) Тогда
Возврат СтрокаПодключения;
@@ -86,7 +86,7 @@
Если ЭтоКоннектор(Соединение) Тогда
Результат = Соединение.Close();
Результат = Соединение.Disconnect();
Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь);
Иначе
@@ -113,6 +113,77 @@
КонецФункции
// Сформировать строку подключения
// Формирует строку для подключения к серверу MongoDB
//
// Параметры:
// Адрес - Строка - IP адрес с портом или доменное имя для подключения - addr
// База - Строка - База для подключения, если необходимо - db
// Логин - Строка - Имя пользователя авторизации - usr
// Пароль - Строка - Пароль пользователя для авторизации - pwd
// Параметры - Структура Из КлючИЗначение, Неопределено - Дополнительные параметры подключения - params
//
// Возвращаемое значение:
// Строка - Строка подключения MongoDB
Функция СформироватьСтрокуПодключения(Знач Адрес
, Знач База = ""
, Знач Логин = ""
, Знач Пароль = ""
, Знач Параметры = Неопределено) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
Если ЗначениеЗаполнено(Параметры) Тогда
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Параметры);
КонецЕсли;
ШаблонПодключения = "mongodb://%1";
Если ЗначениеЗаполнено(Логин) Тогда
Авторизация = СтрШаблон("%1:%2", Логин, Пароль);
Иначе
Авторизация = "";
КонецЕсли;
Если ЗначениеЗаполнено(Авторизация) Тогда
ОсновнаяЧасть = СтрШаблон("%1@%2", Авторизация, Адрес);
Иначе
ОсновнаяЧасть = Адрес;
КонецЕсли;
СтрокаПодключения = СтрШаблон(ШаблонПодключения, ОсновнаяЧасть);
Если ЗначениеЗаполнено(База) Или ЗначениеЗаполнено(Параметры) Тогда
СтрокаПодключения = СтрокаПодключения + "/";
Если ЗначениеЗаполнено(База) Тогда
СтрокаПодключения = СтрокаПодключения + База;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры) Тогда
СтрокаПодключения = СтрокаПодключения + "?";
МассивПараметров = Новый Массив;
Для Каждого Параметр Из Параметры Цикл
МассивПараметров.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, Параметр.Значение));
КонецЦикла;
СтрокаПодключения = СтрокаПодключения + СтрСоединить(МассивПараметров, "&");
КонецЕсли;
КонецЕсли;
Возврат СтрокаПодключения;
КонецФункции
#КонецОбласти
#КонецОбласти

View File

@@ -139,6 +139,7 @@
Разделы.Вставить("MySQL" , 5);
Разделы.Вставить("MSSQL" , 5);
Разделы.Вставить("SQLite" , 5);
Разделы.Вставить("MongoDB" , 5);
Разделы.Вставить("RCON" , 5);
Разделы.Вставить("YandexDisk" , 5);
Разделы.Вставить("GoogleWorkspace", 2);
@@ -185,6 +186,7 @@
Разделы.Вставить("MySQL" , СтандартныеЗависимости);
Разделы.Вставить("MSSQL" , СтандартныеЗависимости);
Разделы.Вставить("SQLite" , СтандартныеЗависимости);
Разделы.Вставить("MongoDB" , СтандартныеЗависимости);
Разделы.Вставить("RCON" , СтандартныеЗависимости);
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
@@ -237,6 +239,7 @@
TCP = "TCP";
SQLite = "SQLite";
Postgres = "PostgreSQL";
MongoDB = "MongoDB";
GreenAPI = "GreenAPI";
RCON = "RCON";
MySQL = "MySQL";
@@ -390,6 +393,7 @@
НовыйТест(ТаблицаТестов, "MYS_ORM" , "ORM" , MySQL);
НовыйТест(ТаблицаТестов, "MSS_ОсновныеМетоды" , "Основные методы" , MSSQL);
НовыйТест(ТаблицаТестов, "MSS_ORM" , "ORM" , MSSQL);
НовыйТест(ТаблицаТестов, "Mongo_ОсновныеМетоды" , "Основные методы" , MongoDB);
НовыйТест(ТаблицаТестов, "GAPI_УправлениеГруппами" , "Управление группами" , GreenAPI);
НовыйТест(ТаблицаТестов, "GAPI_ОтправкаСообщений" , "Отправка сообщений" , GreenAPI);
НовыйТест(ТаблицаТестов, "GAPI_ПолучениеУведомлений" , "Получение уведомлений" , GreenAPI);
@@ -670,7 +674,7 @@
РезультатПроверки = Неопределено;
//@skip-check server-execution-safe-mode
Выполнить (ВызовПроверки);
Выполнить(ВызовПроверки);
Текст = ВывестиЛог(Результат, МетодЛога, Библиотека);
@@ -11665,10 +11669,6 @@
Параметры.Вставить("GreenMax_ReceiptID", IDСообщения);
КонецЕсли;
МассивПризнаков = СтрРазделить("phone,idInstance,wid,sender,chatId", ",");
Результат = ЗаменитьСекретыРекурсивно(Результат, МассивПризнаков);
Возврат Результат;
КонецФункции
@@ -11697,10 +11697,6 @@
ЗаписатьПараметр("GreenMax_MainMessageID", IDСообщения);
Параметры.Вставить("GreenMax_MainMessageID", IDСообщения);
МассивПризнаков = СтрРазделить("phone,idInstance,wid,sender,chatId", ",");
Результат = ЗаменитьСекретыРекурсивно(Результат, МассивПризнаков);
Возврат Результат;
КонецФункции
@@ -11710,10 +11706,6 @@
ОжидаетЧто(Результат["idMessage"]).Равно(IDСообщения);
ОжидаетЧто(Результат["chatId"]).Заполнено();
МассивПризнаков = СтрРазделить("phone,idInstance,wid,sender,chatId", ",");
Результат = ЗаменитьСекретыРекурсивно(Результат, МассивПризнаков);
Возврат Результат;
КонецФункции
@@ -11722,10 +11714,6 @@
ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);
МассивПризнаков = СтрРазделить("phone,idInstance,wid,sender,chatId", ",");
Результат = ЗаменитьСекретыРекурсивно(Результат, МассивПризнаков);
Возврат Результат;
КонецФункции
@@ -11734,10 +11722,6 @@
ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);
МассивПризнаков = СтрРазделить("phone,idInstance,wid,sender,chatId", ",");
Результат = ЗаменитьСекретыРекурсивно(Результат, МассивПризнаков);
Возврат Результат;
КонецФункции
@@ -11754,10 +11738,6 @@
ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат)).Равно(Истина);
МассивПризнаков = СтрРазделить("phone,idInstance,wid,sender,chatId", ",");
Результат = ЗаменитьСекретыРекурсивно(Результат, МассивПризнаков);
Возврат Результат;
КонецФункции
@@ -11786,6 +11766,35 @@
КонецФункции
Функция Проверка_MongoDB_СформироватьСтрокуПодключения(Знач Результат, Знач Вариант, Параметры = "")
Адрес = ПолучитьLocalhost() + Параметры["MongoDB_Port"];
Логин = Параметры["MongoDB_User"];
Пароль = Параметры["MongoDB_Password"];
База = Параметры["MongoDB_DB"];
ШаблонСтроки = "mongodb://%1:%2@%3/%4?authSource=admin";
СтрокаПроверки = СтрШаблон(ШаблонСтроки, Логин, Пароль, Адрес, База);
СтрокаВозврата = СтрШаблон(ШаблонСтроки, Логин, "***", Адрес, База);;
ОжидаетЧто(СтрокаПроверки).Равно(Результат);
Возврат СтрокаВозврата;
КонецФункции
Функция Проверка_MongoDB_ОткрытьСоединение(Знач Результат, Знач Вариант)
Если Вариант = "Закрытие" Тогда
ОжидаетЧто(Результат["result"]).Равно(Истина);
Иначе
Результат = Строка(ТипЗнч(Результат));
ОжидаетЧто(Результат).Равно("AddIn.OPI_MongoDB.Main");
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ReportPortal
@@ -12234,17 +12243,7 @@
Функция ОформитьОпцию(Знач Имя, Знач Значение, Вложенный = Ложь)
МассивСекретов = Новый Массив;
МассивСекретов.Добавить("token");
МассивСекретов.Добавить("key");
МассивСекретов.Добавить("secret");
МассивСекретов.Добавить("pass");
МассивСекретов.Добавить("password");
МассивСекретов.Добавить("client");
МассивСекретов.Добавить("api");
МассивСекретов.Добавить("refresh");
МассивСекретов.Добавить("invite_link");
МассивСекретов.Добавить("phone");
МассивСекретов = ПолучитьМассивКлючейСекретов();
СписокИсключений = Новый СписокЗначений;
СписокИсключений.Добавить("passive");
@@ -12404,6 +12403,74 @@
КонецФункции
Функция ЗаменитьСекретыРекурсивно(Значение, Знач Признаки)
Если ТипЗнч(Значение) = Тип("Массив") Тогда
Значение_ = Новый Массив;
Для Каждого Элемент Из Значение Цикл
Значение_.Добавить(ЗаменитьСекретыРекурсивно(Элемент, Признаки));
КонецЦикла;
ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Значение, Истина) Тогда
Значение_ = Новый(ТипЗнч(Значение));
Для Каждого Элемент Из Значение Цикл
ТекущийКлюч = Элемент.Ключ;
ТекущееЗначение = Элемент.Значение;
Если OPI_Инструменты.ЭтоКоллекция(ТекущееЗначение) Тогда
ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки);
Иначе
Для Каждого Признак Из Признаки Цикл
Если СтрНайти(нРег(ТекущийКлюч), нРег(Признак)) > 0 Тогда
ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Значение_.Вставить(ТекущийКлюч, ТекущееЗначение);
КонецЦикла;
Иначе
Значение_ = "***";
КонецЕсли;
Возврат Значение_;
КонецФункции
Функция ПолучитьМассивКлючейСекретов()
МассивСекретов = Новый Массив;
МассивСекретов.Добавить("token");
МассивСекретов.Добавить("key");
МассивСекретов.Добавить("secret");
МассивСекретов.Добавить("pass");
МассивСекретов.Добавить("password");
МассивСекретов.Добавить("client");
МассивСекретов.Добавить("api");
МассивСекретов.Добавить("refresh");
МассивСекретов.Добавить("phone");
МассивСекретов.Добавить("idInstance");
МассивСекретов.Добавить("wid");
МассивСекретов.Добавить("sender");
МассивСекретов.Добавить("chat");
МассивСекретов.Добавить("invite");
Возврат МассивСекретов;
КонецФункции
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
НовыйТест = ТаблицаЗначений.Добавить();
@@ -12527,6 +12594,13 @@
Если Не КаталогЛоговБиблиотеки.Существует() Тогда
СоздатьКаталог(ПутьЛоговБиблиотеки);
КонецЕсли;
Если OPI_Инструменты.ЭтоКоллекция(Данные, Истина) Тогда
МассивСекретов = ПолучитьМассивКлючейСекретов();
Данные = ЗаменитьСекретыРекурсивно(Данные, МассивСекретов);
КонецЕсли;
ДанныеТекст = РезультатТестаКакТекст(Данные);
@@ -12658,52 +12732,6 @@
КонецПроцедуры
Функция ЗаменитьСекретыРекурсивно(Значение, Знач Признаки)
Если ТипЗнч(Значение) = Тип("Массив") Тогда
Значение_ = Новый Массив;
Для Каждого Элемент Из Значение Цикл
Значение_.Добавить(ЗаменитьСекретыРекурсивно(Элемент, Признаки));
КонецЦикла;
ИначеЕсли OPI_Инструменты.ЭтоКоллекция(Значение, Истина) Тогда
Значение_ = Новый(ТипЗнч(Значение));
Для Каждого Элемент Из Значение Цикл
ТекущийКлюч = Элемент.Ключ;
ТекущееЗначение = Элемент.Значение;
Если OPI_Инструменты.ЭтоКоллекция(ТекущееЗначение) Тогда
ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки);
Иначе
Для Каждого Признак Из Признаки Цикл
Если СтрНайти(нРег(ТекущийКлюч), нРег(Признак)) > 0 Тогда
ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Значение_.Вставить(ТекущийКлюч, ТекущееЗначение);
КонецЦикла;
Иначе
Значение_ = "***";
КонецЕсли;
Возврат Значение_;
КонецФункции
#КонецОбласти
#КонецОбласти

View File

@@ -11,7 +11,7 @@
// 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
// 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
@@ -1062,7 +1062,7 @@
Twitter_ПолучитьТокен(ПараметрыТеста);
Twitter_ПолучитьСсылкуАвторизации(ПараметрыТеста);
Twitter_ОбновитьТокен(ПараметрыТеста);
// Twitter_ОбновитьТокен(ПараметрыТеста);
КонецПроцедуры
@@ -3104,6 +3104,24 @@
#КонецОбласти
#Область MongoDB
Процедура Mongo_ОсновныеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("MongoDB_Port" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("MongoDB_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("MongoDB_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("MongoDB_DB" , ПараметрыТеста);
MongoDB_СформироватьСтрокуПодключения(ПараметрыТеста);
MongoDB_ОткрытьСоединение(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -3127,11 +3145,24 @@
Функция ПолучитьПараметрыАвторизацииТвиттер()
Параметры = Новый Соответствие;
ТокенСервера = OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Access_Token");
URL = "https://hut.openintegrations.dev/melezh/get_twitter_token";
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
.Инициализировать()
.УстановитьURL(URL)
.ДобавитьBearerАвторизацию(ТокенСервера) // <---
.ОбработатьЗапрос("GET")
.ВернутьОтветКакJSONКоллекцию();
Токен = Результат["data"];
Параметры.Вставить("redirect_uri" , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_Redirect"));
Параметры.Вставить("client_id" , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_ClinetID"));
Параметры.Вставить("client_secret" , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_ClientSecret"));
Параметры.Вставить("access_token" , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_Token"));
Параметры.Вставить("access_token" , Токен);
Параметры.Вставить("refresh_token" , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_Refresh"));
Параметры.Вставить("oauth_token" , OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_OAuthToken"));
Параметры.Вставить("oauth_token_secret", OPI_ПолучениеДанныхТестов.ПолучитьПараметр("Twitter_OAuthSecret"));
@@ -24235,6 +24266,52 @@
#КонецОбласти
#Область MongoDB
Процедура MongoDB_СформироватьСтрокуПодключения(ПараметрыФункции)
Адрес = "127.0.0.1:1234";
Логин = ПараметрыФункции["MongoDB_User"];
Пароль = ПараметрыФункции["MongoDB_Password"];
База = ПараметрыФункции["MongoDB_DB"];
Адрес = OPI_ПолучениеДанныхТестов.ПолучитьLocalhost() + ПараметрыФункции["MongoDB_Port"]; // END
ПараметрыПодключения = Новый Структура("authSource", "admin");
Результат = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль, ПараметрыПодключения);
// END
Обработать(Результат, "MongoDB", "СформироватьСтрокуПодключения", , ПараметрыФункции);
КонецПроцедуры
Процедура MongoDB_ОткрытьСоединение(ПараметрыФункции)
Адрес = "127.0.0.1:1234";
Логин = ПараметрыФункции["MongoDB_User"];
Пароль = ПараметрыФункции["MongoDB_Password"];
База = ПараметрыФункции["MongoDB_DB"];
Адрес = OPI_ПолучениеДанныхТестов.ПолучитьLocalhost() + ПараметрыФункции["MongoDB_Port"]; // END
ПараметрыПодключения = Новый Структура("authSource", "admin");
СтрокаПодключения = OPI_MongoDB.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль, ПараметрыПодключения);
Результат = OPI_MongoDB.ОткрытьСоединение(СтрокаПодключения);
// END
Обработать(Результат, "MongoDB", "ОткрытьСоединение");
Результат = OPI_MongoDB.ЗакрытьСоединение(Результат);
Обработать(Результат, "MongoDB", "ОткрытьСоединение", "Закрытие");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти