From 3a2b8df8813ae869b2475f511c059138f66777b4 Mon Sep 17 00:00:00 2001 From: Wolfgang Nagele Date: Sat, 21 Dec 2013 19:02:56 +0100 Subject: [PATCH] Make AWS credentials reusable --- lib/aws.html | 65 ++++++++++++++++++++++++++++++++++++++ lib/aws.js | 65 ++++++++++++++++++++++++++++++++++++++ storage/ddb/69-ddbout.html | 52 +----------------------------- storage/ddb/69-ddbout.js | 49 +--------------------------- 4 files changed, 132 insertions(+), 99 deletions(-) create mode 100644 lib/aws.html create mode 100644 lib/aws.js diff --git a/lib/aws.html b/lib/aws.html new file mode 100644 index 00000000..da463c52 --- /dev/null +++ b/lib/aws.html @@ -0,0 +1,65 @@ + + + + + diff --git a/lib/aws.js b/lib/aws.js new file mode 100644 index 00000000..9997b676 --- /dev/null +++ b/lib/aws.js @@ -0,0 +1,65 @@ +/** + * Copyright 2013 Wolfgang Nagele + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +var RED = require(process.env.NODE_RED_HOME+"/red/red"); +var querystring = require('querystring'); + +function AWSCredentialsNode(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("aws credentials", AWSCredentialsNode); + +RED.app.get('/aws-credentials/: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('/aws-credentials/:id', function(req, res) { + RED.nodes.deleteCredentials(req.params.id); + res.send(200); +}); + +RED.app.post('/aws-credentials/: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); + }); +}); diff --git a/storage/ddb/69-ddbout.html b/storage/ddb/69-ddbout.html index dfe8dac0..4262ea5a 100644 --- a/storage/ddb/69-ddbout.html +++ b/storage/ddb/69-ddbout.html @@ -51,7 +51,7 @@ category: "storage-output", color: "#ffaaaa", defaults: { - credentials: { type: "awscredentials", required: true }, + credentials: { type: "aws credentials", required: true }, region: { value: "us-east-1" }, table: { value: "", required: true }, name: { value: "" } @@ -65,53 +65,3 @@ } }); - - - - diff --git a/storage/ddb/69-ddbout.js b/storage/ddb/69-ddbout.js index 8cf0d753..3a9120d5 100644 --- a/storage/ddb/69-ddbout.js +++ b/storage/ddb/69-ddbout.js @@ -15,58 +15,11 @@ **/ var RED = require(process.env.NODE_RED_HOME+"/red/red"); +require("../../lib/aws"); 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.credentials = RED.nodes.getNode(n.credentials);