/* Сервис интеграции ПП Парус 8 с WEB API Дополнительный модуль: Загрузки файла на сервер SCP */ //------------------------------ // Подключение внешних библиотек //------------------------------ const { ServerError } = require("./../core/server_errors"); //Типовая ошибка const { SERR_APP_SERVER_BEFORE, SERR_DB_SERVER } = require("./../core/constants"); //Общесистемные константы const oracledb = require("oracledb"); //Работа с СУБД Oracle const { Client } = require('node-scp') //------------ // Тело модуля //------------ //------------ // Чтение файла и запись в file_buffer //------------ let myReadFiles = async(nRN,dbConn) => { if (dbConn){ //Если есть подключение к БД if (dbConn.bConnected) { let pooledConnection; try { //Выполняем процедуру console.log('!1 -',nRN); pooledConnection = await dbConn.connection.getConnection(); console.log('!2 -',nRN); let res = await pooledConnection.execute( "select t.file_name, t.dataset from UDO_V_T_EQUIPDSCMFL1 t where t.prn = :nRN", {nRN: nRN} ); console.log('!!3 -',nRN); return res.rows; } catch (e) { throw new ServerError(`Выполнение процедуры не удачно`, e.message); } finally { if (pooledConnection) { try { await pooledConnection.close(); } catch (e) { throw new Error(`Чегото не то!`, e.message); } } } } else { throw new ServerError(SERR_DB_SERVER, `Нет подключения к БД`); } } else{ throw new ServerError(SERR_DB_SERVER, `Что тот не то ${dbConn}`); } }; //------------ // Загрузка файлов на сервер SCP //------------ async function uploadSCP(sHost, sPort, sUsername, sPassword, sSCPPatch, data ) { try { //console.log(`sHost ${sHost}, sPort ${sPort}, sUsername ${sUsername}, sPassword ${sPassword}, sSCPPatch ${sSCPPatch}`); console.log("sHost",sHost); console.log("sPort",sPort); console.log("sUsername",sUsername); console.log("sPassword",sPassword); console.log("data",data); const client = await Client({ host: sHost, port: sPort, username: sUsername, password: sPassword, // privateKey: fs.readFileSync('./key.pem'), // passphrase: 'your key passphrase', }) console.log("1",client); await client.writeFile(sSCPPatch, data, ) //client.uploadFile( // sLocalPatch, // sSCPPatch, // options?: TransferOptions // ) //const result = await client.stat('/home/bilaboutsource/parus') //console.log(result) const result = await client.list('/home/sftp_user/parus') console.log(result) // you can perform upload multiple times //await client.uploadFile('./test1.txt', '/workspace/test1.txt') client.close() // remember to close connection after you finish } catch (e) { //console.log(`Ошибка загрузки файла ${e}`) return e.message; } } //Обработчик "До" для полученного сообщения const uploadFileSCP = async prms => { //Проверим, что есть подключение к БД if (prms.dbConn.bConnected) { try { //Разбираем //console.log("sHost:", prms.options["SHOST_SCP"]); //console.log( "sPort:", prms.options["SPORT_SCP"]); //console.log( "sUsername:", prms.options["SUSER_SCP"]); //console.log( "sPassword:", prms.options["SPASS_SCP"]); //console.log( "sLocalPatch:", prms.options["SPATCH_LOCAL"]); //console.log( "sSCPPatch:", prms.options["SPATCH_FSERV"]); //console.log("data",prms.queue.blMsg); //let rows = await myReadFiles(prms.options["NEQUIPDSCMN"],prms.dbConn); //console.log(rows.length); //res = "urq"; //for ( let i= 0; i < rows.count; i++){ // console.log() //} //console.log(prms.options["SPATCH_FSERV"]); //console.log(prms.queue.blMsg); let res = await uploadSCP(prms.options["SHOST_SCP"],prms.options["SPORT_SCP"], prms.options["SUSER_SCP"], prms.options["SPASS_SCP"],prms.options["SPATCH_FSERV"], prms.queue.blMsg ) if (res){ stateres = 500; }else{ stateres = 200; res = ""; } console.log(stateres); console.log(res); // Соберем результат в XML let resXml = ""; resXml += ""; resXml += `${stateres}`; resXml += `${res}`; resXml += ""; return{ blMsg: Buffer.from(resXml), bStopPropagation: true } } catch (e) { throw new ServerError(SERR_APP_SERVER_BEFORE, `Ошибка обработки тела входящего сообщения: ${e.message}`); } } else throw new ServerError(SERR_DB_SERVER, "Нет подключения к БД"); }; //----------------- // Интерфейс модуля //----------------- exports.uploadFileSCP = uploadFileSCP;