UNPKG

domotz-remote-pawn

Version:

Domotz Agent

80 lines (72 loc) 2.94 kB
/** This file is part of Domotz Agent. * Copyright (C) 2020 Domotz Ltd * * Domotz Agent is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Domotz Agent is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Domotz Agent. If not, see <http://www.gnu.org/licenses/>. * * Created by Alessandro Pagiaro <apagiaro@domotz.com> on 11/02/20. */ var scpFactory = function (scpTool) { var scp = scpTool; function logCommand(message, operation) { var logId = message.correlationId; var payload = JSON.parse(JSON.stringify(message.payload)); var command = ' - Executing command'; command = command + ' scp ' + operation; delete payload.password; return logId + command + JSON.stringify(payload); } function validateMessage(payload, operation) { var error = ''; if (!payload.user) { error += 'SCP ERROR: Missing user for authentication \n'; } if (!payload.host) { error += 'SCP ERROR: Missing host for authentication \n'; } if (!payload.file_path) { error += 'SCP ERROR: Missing file_path to write or read \n'; } if (!payload.password) { error += 'SCP ERROR: Missing password for authentication \n'; } if (operation === 'write' && !payload.content) { error += 'SCP ERROR: Missing content to write \n'; } return error; } return function (operation, message) { return { describe: function () { return logCommand(message, operation); }, execute: function (callback) { var payload = message.payload; var error = validateMessage(payload, operation); if (error !== '') { console.info(error); return callback(error); } scp.exec(operation, payload.user, payload.host, payload.file_path, payload.password, payload.options || {}, payload.content) .then(function (result) { console.debug('%s: SCP received the following result: %s', message.correlationId, JSON.stringify(result)); callback(result); }) .catch(function (result) { callback({ error: result.message }); }); }, }; }; }; module.exports.factory = scpFactory;