mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Use the Credentials of RED
This commit is contained in:
		@@ -37,6 +37,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/x-red" data-help-name="pushbullet">
 | 
			
		||||
@@ -47,6 +48,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -67,6 +69,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
@@ -123,7 +126,9 @@
 | 
			
		||||
    RED.nodes.registerType('pushbullet', {
 | 
			
		||||
        category: 'output',
 | 
			
		||||
        defaults: {
 | 
			
		||||
            device: {type: "bullet-device", required: true},
 | 
			
		||||
            device: {type: "bullet-device", validate: function (v) {
 | 
			
		||||
                return hasGlobal || (v && v != "_ADD_")
 | 
			
		||||
            }},
 | 
			
		||||
            title: {value: ""},
 | 
			
		||||
            name: {value: ""}
 | 
			
		||||
        },
 | 
			
		||||
@@ -149,7 +154,7 @@
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                $("#node-input-credentials-row").show();
 | 
			
		||||
                if (!this.twilio) {
 | 
			
		||||
                if (!this.device) {
 | 
			
		||||
                    $("#node-input-creds").val("global");
 | 
			
		||||
                } else {
 | 
			
		||||
                    $("#node-input-creds").val("local");
 | 
			
		||||
 
 | 
			
		||||
@@ -14,92 +14,105 @@
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 **/
 | 
			
		||||
 | 
			
		||||
var RED = require(process.env.NODE_RED_HOME+"/red/red");
 | 
			
		||||
var RED = require(process.env.NODE_RED_HOME + "/red/red");
 | 
			
		||||
var PushBullet = require('pushbullet');
 | 
			
		||||
var util = require('util');
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
    var pushkey = RED.settings.pushbullet || require(process.env.NODE_RED_HOME+"/../pushkey.js");
 | 
			
		||||
    var pushkey = RED.settings.pushbullet || require(process.env.NODE_RED_HOME + "/../pushkey.js");
 | 
			
		||||
}
 | 
			
		||||
catch(err) {
 | 
			
		||||
catch (err) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var querystring = require('querystring');
 | 
			
		||||
 | 
			
		||||
//REST API for credentials
 | 
			
		||||
RED.httpAdmin.get('/pushbullet-api/global',function(req,res) {
 | 
			
		||||
    res.send(JSON.stringify({hasApiKey:(pushkey && pushkey.pushbullet &&  pushkey.deviceid && pushkey.pushbullet != '' && pushkey.deviceid !='')}));
 | 
			
		||||
RED.httpAdmin.get('/pushbullet-api/global', function (req, res) {
 | 
			
		||||
    res.send(JSON.stringify({hasApiKey: (pushkey && pushkey.pushbullet && pushkey.deviceid && pushkey.pushbullet != '' && pushkey.deviceid != '')}));
 | 
			
		||||
});
 | 
			
		||||
RED.httpAdmin.get('/pushbullet-api/:id',function(req,res) {
 | 
			
		||||
RED.httpAdmin.get('/pushbullet-api/:id', function (req, res) {
 | 
			
		||||
    var credentials = RED.nodes.getCredentials(req.params.id);
 | 
			
		||||
    if (credentials) {
 | 
			
		||||
        res.send(JSON.stringify({hasApiKey:(credentials.apikey && credentials.apikey!="")}));
 | 
			
		||||
        res.send(JSON.stringify({hasApiKey: (credentials.apikey && credentials.apikey != "")}));
 | 
			
		||||
    } else {
 | 
			
		||||
        res.send(JSON.stringify({}));
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
RED.httpAdmin.delete('/pushbullet-api/:id',function(req,res) {
 | 
			
		||||
RED.httpAdmin.delete('/pushbullet-api/:id', function (req, res) {
 | 
			
		||||
    RED.nodes.deleteCredentials(req.params.id);
 | 
			
		||||
    res.send(200);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
RED.httpAdmin.post('/pushbullet-api/:id',function(req,res) {
 | 
			
		||||
RED.httpAdmin.post('/pushbullet-api/:id', function (req, res) {
 | 
			
		||||
    var body = "";
 | 
			
		||||
    req.on('data', function(chunk) {
 | 
			
		||||
        body+=chunk;
 | 
			
		||||
    req.on('data', function (chunk) {
 | 
			
		||||
        body += chunk;
 | 
			
		||||
    });
 | 
			
		||||
    req.on('end', function(){
 | 
			
		||||
    req.on('end', function () {
 | 
			
		||||
        var newCreds = querystring.parse(body);
 | 
			
		||||
        var credentials = RED.nodes.getCredentials(req.params.id)||{};
 | 
			
		||||
        if (newCreds.token == "") {
 | 
			
		||||
        var credentials = RED.nodes.getCredentials(req.params.id) || {};
 | 
			
		||||
        if (newCreds.apikey == "") {
 | 
			
		||||
            delete credentials.apikey;
 | 
			
		||||
        } else {
 | 
			
		||||
            credentials.apikey = newCreds.token;
 | 
			
		||||
            credentials.apikey = newCreds.apikey;
 | 
			
		||||
        }
 | 
			
		||||
        RED.nodes.addCredentials(req.params.id,credentials);
 | 
			
		||||
        RED.nodes.addCredentials(req.params.id, credentials);
 | 
			
		||||
        res.send(200);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function PushBulletDevice(n) {
 | 
			
		||||
    RED.nodes.createNode(this,n);
 | 
			
		||||
    RED.nodes.createNode(this, n);
 | 
			
		||||
    this.name = n.name;
 | 
			
		||||
    this.apikey = n.apikey;
 | 
			
		||||
    this.deviceid = n.deviceid;
 | 
			
		||||
    var credentials = RED.nodes.getCredentials(n.id);
 | 
			
		||||
    if (credentials) {
 | 
			
		||||
        this.apikey = credentials.apikey;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
RED.nodes.registerType("bullet-device",PushBulletDevice);
 | 
			
		||||
RED.nodes.registerType("bullet-device", PushBulletDevice);
 | 
			
		||||
 | 
			
		||||
function PushbulletNode(n) {
 | 
			
		||||
    RED.nodes.createNode(this,n);
 | 
			
		||||
    RED.nodes.createNode(this, n);
 | 
			
		||||
    this.title = n.title;
 | 
			
		||||
    var node = this;
 | 
			
		||||
    this.device = n.device;
 | 
			
		||||
    this.deviceInfo = RED.nodes.getNode(this.device);
 | 
			
		||||
    var pusher = new PushBullet(this.deviceInfo.apikey);
 | 
			
		||||
    var deviceId = this.deviceInfo.deviceid;
 | 
			
		||||
    this.on("input",function(msg) {
 | 
			
		||||
        var titl = this.title||msg.topic||"Node-RED";
 | 
			
		||||
    this.api = RED.nodes.getNode(n.device);
 | 
			
		||||
 | 
			
		||||
    if (this.api) {
 | 
			
		||||
        this.pusher = new PushBullet(this.api.apikey);
 | 
			
		||||
        this.deviceId = this.api.deviceid;
 | 
			
		||||
    } else if (pushkey) {
 | 
			
		||||
        this.pusher = new PushBullet(pushkey.pushbullet);
 | 
			
		||||
        this.deviceId = pushkey.deviceid;
 | 
			
		||||
    } else {
 | 
			
		||||
        this.error("missing pushbullet credentials");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    this.on("input", function (msg) {
 | 
			
		||||
        var titl = this.title || msg.topic || "Node-RED";
 | 
			
		||||
        if (typeof(msg.payload) === 'object') {
 | 
			
		||||
            msg.payload = JSON.stringify(msg.payload);
 | 
			
		||||
        }
 | 
			
		||||
        else { msg.payload = msg.payload.toString(); }
 | 
			
		||||
        if (this.deviceInfo.apikey && this.deviceInfo.deviceid) {
 | 
			
		||||
            try {
 | 
			
		||||
                if (!isNaN(deviceId)) { deviceId = Number(deviceId); }
 | 
			
		||||
                pusher.note(deviceId, titl, msg.payload, function(err, response) {
 | 
			
		||||
                    if (err) node.error("Pushbullet error: "+err);
 | 
			
		||||
                    //console.log(response);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                node.error(err);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            node.warn("Pushbullet credentials not set/found. See node info.");
 | 
			
		||||
            msg.payload = msg.payload.toString();
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            if (!isNaN(this.deviceId)) {
 | 
			
		||||
                this.deviceId = Number(this.deviceId);
 | 
			
		||||
            }
 | 
			
		||||
            this.pusher.note(this.deviceId, titl, msg.payload, function (err, response) {
 | 
			
		||||
                if (err) node.error("Pushbullet error: " + err);
 | 
			
		||||
                //console.log(response);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        catch (err) {
 | 
			
		||||
            node.error(err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RED.nodes.registerType("pushbullet",PushbulletNode);
 | 
			
		||||
RED.nodes.registerType("pushbullet", PushbulletNode);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user