UNPKG

node-red-contrib-thinkp-sofia2

Version:

A Node-RED node to interact with Indra's Sofia2 IoT platform.

232 lines (205 loc) 7.1 kB
module.exports = function(RED) { var ssapMessageGenerator = require('../lib/SSAPMessageGenerator'); var sofia2Config = require('../sofia2-connection-config/sofia2-connection-config'); var ssapResourceGenerator = require('../lib/SSAPResourceGenerator'); var http = null; var isHttps = false; function Delete(n) { RED.nodes.createNode(this,n); var node = this; this.ontology = n.ontology; this.query = n.query; this.queryType = n.queryType; // Retrieve the server (config) node var server = RED.nodes.getNode(n.server); this.on('input', function(msg) { var ontologia=""; var queryType=""; var query=""; if(this.ontology==""){ ontologia = msg.ontology; }else{ ontologia=this.ontology; } if(this.queryType==""){ queryType = msg.queryType; }else{ queryType=this.queryType; } if(this.query==""){ query = msg.query; }else{ query=this.query; } if (server) { var protocol = server.protocol; if(protocol.toUpperCase() == "MQTT".toUpperCase()){ var queryDelete = ssapMessageGenerator.generateDeleteWithQueryTypeMessage(query, ontologia,queryType,server.sessionKey); var state = server.sendToSib(queryDelete); state.then(function(response){ var body = JSON.parse(response.body); if(body.ok){ console.log("The message is send."); msg.payload=body; node.send(msg); }else{ console.log("Error sendind the delete SSAP message."); msg.payload=body.error; if(body.errorCode == "AUTENTICATION"){ console.log("The sessionKey is not valid."); server.generateSession(); } node.send(msg); } }); }else if(protocol.toUpperCase() == "REST".toUpperCase()){ query = query.replace(/ /g, "+"); var instance = server.kp + ':' + server.instance; var endpoint = server.endpoint; var arr = endpoint.toString().split(":"); var host; var port = 80; if (arr[0].toUpperCase()=='HTTPS'.toUpperCase()) { isHttps=true; console.log("Using HTTPS:"+arr[0]); } if(arr[0].toUpperCase()=="HTTP".toUpperCase()||arr[0].toUpperCase()=='HTTPS'.toUpperCase()){ host=arr[1].substring(2, arr[1].length); if(arr.length>2){ port = parseInt(arr[arr.length-1]); } }else{ host = arr[0]; if(arr.length>1){ port = parseInt(arr[arr.length-1]); } } //Se prepara el mensaje delete var queryDelete='?$sessionKey='+server.sessionKey+'&$query='+query+'&$queryType='+queryType; queryDelete = queryDelete.replace(/ /g, "+"); var postheadersDelete = { 'Content-Type' : 'application/json', 'Accept' : 'application/json', //'Content-Length' : Buffer.byteLength(queryDelete, 'utf8') }; var optionsDelete = { host: host, port: port, path: '/sib/services/api_ssap/v01/SSAPResource'+queryDelete, method: 'GET', headers: postheadersDelete, rejectUnauthorized: false }; // do the GET POST call var resultDelete=''; if (isHttps) http= require('https'); else http = require('http'); var reqDelete = http.request(optionsDelete, function(res) { console.log("Status code of the Delete call: ", res.statusCode); res.on('data', function(d) { resultDelete +=d; }); res.on('end', function() { if(res.statusCode==400 || res.statusCode==401){ //La sessionKey no es válida, se hace el join //Se regenera la sessionKey con un join var instance = server.kp + ':' + server.instance; var queryJoin = ssapResourceGenerator.generateJoinByTokenMessage(server.kp, instance, server.token); var postheadersJoin = { 'Content-Type' : 'application/json', 'Accept' : 'application/json', 'Content-Length' : Buffer.byteLength(queryJoin, 'utf8') }; var optionsJoin = { host: host, port: port, path: '/sib/services/api_ssap/v01/SSAPResource/', method: 'POST', headers: postheadersJoin, rejectUnauthorized: false }; var result=''; var reqPost = http.request(optionsJoin, function(res) { console.log("Status code of the Join call: ", res.statusCode); res.on('data', function(d) { result +=d; }); res.on('end', function() { result = JSON.parse(result); server.sessionKey=result.sessionKey; console.log("SessionKey obtained: " + server.sessionKey); //Se prepara el mensaje delete var queryDelete='?$sessionKey='+server.sessionKey+'&$query='+query+'&$queryType='+queryType; queryDelete = queryDelete.replace(/ /g, "+"); var postheadersDelete = { 'Content-Type' : 'application/json', 'Accept' : 'application/json', //'Content-Length' : Buffer.byteLength(queryDelete, 'utf8') }; var optionsDelete = { host: host, port: port, path: '/sib/services/api_ssap/v01/SSAPResource'+queryDelete, method: 'GET', headers: postheadersDelete, rejectUnauthorized: false }; // do the GET POST call var resultDelete=''; var reqDelete = http.request(optionsDelete, function(res) { console.log("Status code of the Delete call: ", res.statusCode); res.on('data', function(d) { resultDelete +=d; }); res.on('end', function() { if(res.statusCode=="200"){ console.log("The data has been deleted."); try{ resultDelete = JSON.parse(resultDelete); msg.payload=resultDelete; } catch (err) { msg.payload=resultDelete; } node.send(msg); } }); }); reqDelete.end(); reqDelete.on('error', function(err) { console.log("Error:"+err); node.error("Error:"+err); }); }); }); reqPost.write(queryJoin); reqPost.end(); reqPost.on('error', function(err) { console.log("There was an error inserting the data: ", err); }); }else if(res.statusCode==200){ try{ resultDelete = JSON.parse(resultDelete); msg.payload=resultDelete; } catch (err) { msg.payload=resultDelete; } node.send(msg); } }); }); //reqDelete.write(queryDelete); reqDelete.end(); reqDelete.on('error', function(err) { console.log("Error:"+err); node.error("Error:"+err); }); } } else { console.log("Error"); } }); } RED.nodes.registerType("sofia2-delete",Delete); }