diff --git a/social/pushbullet/57-pushbullet.html b/social/pushbullet/57-pushbullet.html index 4008321f..d2f00a67 100644 --- a/social/pushbullet/57-pushbullet.html +++ b/social/pushbullet/57-pushbullet.html @@ -19,6 +19,15 @@ +
+ + +
+
+ + +
+
@@ -28,11 +37,10 @@ diff --git a/social/pushbullet/57-pushbullet.js b/social/pushbullet/57-pushbullet.js index a172490d..21a30f96 100644 --- a/social/pushbullet/57-pushbullet.js +++ b/social/pushbullet/57-pushbullet.js @@ -18,37 +18,46 @@ var RED = require(process.env.NODE_RED_HOME+"/red/red"); var PushBullet = require('pushbullet'); var util = require('util'); -// Either add a line like this to settings.js -// pushbullet: {pushbullet:'My-API-KEY', deviceid:'12345'}, -// or create pushkey.js in dir ABOVE node-red, it just needs to be like -// module.exports = {pushbullet:'My-API-KEY', deviceid:'12345'} +// Either create pushkey.js in dir ABOVE node-red, it just needs to be like +// module.exports = {pushbullet:'My-API-KEY', deviceid:'12345'} +// or set them per node in the edit dialog try { - var pushkey = RED.settings.pushbullet || require(process.env.NODE_RED_HOME+"/../pushkey.js"); + var pushkeys = RED.settings.pushbullet || require(process.env.NODE_RED_HOME+"/../pushkey.js"); } catch(err) { - util.log("[57-pushbullet.js] Error: Failed to load PushBullet credentials"); -} - -if (pushkey) { - if (pushkey.pushbullet) { var pusher = new PushBullet(pushkey.pushbullet); } - if (pushkey.deviceid) { var deviceId = pushkey.deviceid; } + //util.log("[57-pushbullet.js] Warning: Failed to load global PushBullet credentials"); } function PushbulletNode(n) { RED.nodes.createNode(this,n); this.title = n.title; + var credentials = RED.nodes.getCredentials(n.id); + if ((credentials) && (credentials.hasOwnProperty("pushkey"))) { this.pushkey = credentials.pushkey; } + else { + if (pushkeys) { this.pushkey = pushkeys.pushbullet; } + else { this.error("No credentials set"); } + } + if ((credentials) && (credentials.hasOwnProperty("deviceid"))) { this.deviceid = credentials.deviceid; } + else { + if (pushkeys) { this.deviceid = pushkeys.deviceid; } + else { this.warn("No deviceId set"); } + } + //console.log("Cred:",n.id,this.deviceid,this.pushkey); + this.pusher = new PushBullet(this.pushkey); var node = this; + this.on("input",function(msg) { - var titl = this.title||msg.topic||"Node-RED"; + var titl = node.title||msg.topic||"Node-RED"; + var dev = msg.deviceID||node.deviceId; if (typeof(msg.payload) === 'object') { msg.payload = JSON.stringify(msg.payload); } else { msg.payload = msg.payload.toString(); } - if (pushkey.pushbullet && pushkey.deviceid) { + if (node.pushkey && node.deviceid) { try { - if (!isNaN(deviceId)) { deviceId = Number(deviceId); } - pusher.note(deviceId, titl, msg.payload, function(err, response) { + if (!isNaN(node.deviceId)) { node.deviceId = Number(node.deviceId); } + node.pusher.note(dev, titl, msg.payload, function(err, response) { if (err) node.error("Pushbullet error: "+err); //console.log(response); }); @@ -62,5 +71,43 @@ function PushbulletNode(n) { } }); } - RED.nodes.registerType("pushbullet",PushbulletNode); + +var querystring = require('querystring'); + +RED.httpAdmin.get('/pushbullet/:id',function(req,res) { + var credentials = RED.nodes.getCredentials(req.params.id); + if (credentials) { + res.send(JSON.stringify({deviceid:credentials.deviceid,hasPassword:(credentials.pushkey&&credentials.pushkey!="")})); + } else { + res.send(JSON.stringify({})); + } +}); + +RED.httpAdmin.delete('/pushbullet/:id',function(req,res) { + RED.nodes.deleteCredentials(req.params.id); + res.send(200); +}); + +RED.httpAdmin.post('/pushbullet/:id',function(req,res) { + var body = ""; + req.on('data', function(chunk) { + body+=chunk; + }); + req.on('end', function(){ + var newCreds = querystring.parse(body); + var credentials = RED.nodes.getCredentials(req.params.id)||{}; + if (newCreds.deviceid == null || newCreds.deviceid == "") { + delete credentials.deviceid; + } else { + credentials.deviceid = newCreds.deviceid; + } + if (newCreds.pushkey == "") { + delete credentials.pushkey; + } else { + credentials.pushkey = newCreds.pushkey||credentials.pushkey; + } + RED.nodes.addCredentials(req.params.id,credentials); + res.send(200); + }); +});