diff --git a/storage/ddb/69-ddbout.html b/storage/ddb/69-ddbout.html index 70235393..33b5463e 100644 --- a/storage/ddb/69-ddbout.html +++ b/storage/ddb/69-ddbout.html @@ -16,12 +16,8 @@ + + + + diff --git a/storage/ddb/69-ddbout.js b/storage/ddb/69-ddbout.js index 8f51576b..8cf0d753 100644 --- a/storage/ddb/69-ddbout.js +++ b/storage/ddb/69-ddbout.js @@ -16,18 +16,65 @@ var RED = require(process.env.NODE_RED_HOME+"/red/red"); var util = require("util"); +var querystring = require('querystring'); var aws = require("aws-sdk"); var attrWrapper = require("dynamodb-data-types").AttributeValue; +function DDBNode(n) { + RED.nodes.createNode(this, n); + var credentials = RED.nodes.getCredentials(n.id); + if (credentials) { + this.accessKey = credentials.accessKey; + this.secretAccessKey = credentials.secretAccessKey; + } +} +RED.nodes.registerType("awscredentials", DDBNode); + +RED.app.get('/awscredentials/:id', function(req, res) { + var credentials = RED.nodes.getCredentials(req.params.id); + if (credentials) { + res.send(JSON.stringify({ accessKey: credentials.accessKey, secretAccessKey: credentials.secretAccessKey })); + } else { + res.send(JSON.stringify({})); + } +}); + +RED.app.delete('/awscredentials/:id', function(req, res) { + RED.nodes.deleteCredentials(req.params.id); + res.send(200); +}); + +RED.app.post('/awscredentials/: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.accessKey == null || newCreds.accessKey == "") { + delete credentials.accessKey; + } else { + credentials.accessKey = newCreds.accessKey || credentials.accessKey; + } + if (newCreds.secretAccessKey == null || newCreds.secretAccessKey == "") { + delete credentials.secretAccessKey; + } else { + credentials.secretAccessKey = newCreds.secretAccessKey || credentials.secretAccessKey; + } + RED.nodes.addCredentials(req.params.id, credentials); + res.send(200); + }); +}); + function DDBOutNode(n) { RED.nodes.createNode(this, n); - this.accessKey = n.accessKey; - this.secretAccessKey = n.secretAccessKey; + this.credentials = RED.nodes.getNode(n.credentials); this.region = n.region || "us-east-1"; this.table = n.table; - aws.config.update({ accessKeyId: this.accessKey, - secretAccessKey: this.secretAccessKey, + aws.config.update({ accessKeyId: this.credentials.accessKey, + secretAccessKey: this.credentials.secretAccessKey, region: this.region }); var ddb = new aws.DynamoDB();