You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-11-23 22:05:15 +02:00
Изменение обработки тестовых данных в пайплайнах, начало MongoDB
This commit is contained in:
8
service/templates/jenkins/cli_test_deb.txt
vendored
8
service/templates/jenkins/cli_test_deb.txt
vendored
@@ -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)"'
|
||||
|
||||
5
service/templates/jenkins/cli_test_rpm.txt
vendored
5
service/templates/jenkins/cli_test_rpm.txt
vendored
@@ -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)"'
|
||||
|
||||
@@ -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)"'
|
||||
|
||||
5
service/templates/jenkins/os_test_linux.txt
vendored
5
service/templates/jenkins/os_test_linux.txt
vendored
@@ -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)"'
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -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 _,
|
||||
|
||||
BIN
src/en/OInt/addins/OPI_MongoDB.zip
vendored
BIN
src/en/OInt/addins/OPI_MongoDB.zip
vendored
Binary file not shown.
Binary file not shown.
BIN
src/ru/OInt/addins/OPI_MongoDB.zip
vendored
BIN
src/ru/OInt/addins/OPI_MongoDB.zip
vendored
Binary file not shown.
@@ -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", Параметр.Ключ, Параметр.Значение));
|
||||
КонецЦикла;
|
||||
|
||||
СтрокаПодключения = СтрокаПодключения + СтрСоединить(МассивПараметров, "&");
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СтрокаПодключения;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@@ -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 Тогда
|
||||
ТекущееЗначение = ЗаменитьСекретыРекурсивно(ТекущееЗначение, Признаки);
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Значение_.Вставить(ТекущийКлюч, ТекущееЗначение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
Значение_ = "***";
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение_;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@@ -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", "ОткрытьСоединение", "Закрытие");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user