From 0ed1f8f38290b616a2ba949e513ff7fc401e7684 Mon Sep 17 00:00:00 2001 From: Peter Svensson Date: Sun, 26 Apr 2020 15:19:43 +0200 Subject: [PATCH] added storage-delete node --- README.md | 19 ++++++-- package.json | 5 +- storage/storage-read.js | 1 + storage/storage-write.js | 98 +++++++++++++++++++++------------------- 4 files changed, 72 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 9a94563..49923bc 100644 --- a/README.md +++ b/README.md @@ -42,12 +42,12 @@ output: whatever data was at the path "foo/bar" in the rtdb database, when chang ## rtdb-set Set data at a path in the rtdb database. Use "on" snapshot so will fire every time the data at the path changes and so drive flow execution from that point. -input: {"payload": {"path": "foo/bar", "obj": {"the": "object"}} +input: {"payload": {"path": "foo/bar", "obj": {"the": "object"}}} ## rtdb-push Pushes the new object onto an array under the path -input: {"payload": {"path": "foo/bar", "obj": {"the": "object"}} +input: {"payload": {"path": "foo/bar", "obj": {"the": "object"}}} ## rtdb-query Set up a reactive query for a path in the rtdb database. @@ -181,7 +181,20 @@ output: An array of google cloud-storage File objects. If you take this output a The storage-read module will read all file contents and output an object of filename keyed Buffer objects instead of the normal one. - +## storage-delete +Deletes a file at a given path under a given cloud storage bucket. The default bucket to be used can be set in the general firebase SDK settings. +If the payload defines an optional bucket property, it will override the default bucket settings. + +input: + + { + "payload": { + "bucket": "xyzzyz123.appspot.com", + "path": "myFile.txt" + } + } + +output: An array of headers returned by the operation if all went well. These are mostly useless but at least a confirmation of success. # Auth nodes diff --git a/package.json b/package.json index 999e314..2408b15 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-firebase-admin", - "version": "1.1.20", + "version": "1.1.21", "description": "A node-red module that wraps the server-side admin SDK of firebase, firestore, et.c.", "main": "index.js", "scripts": { @@ -39,7 +39,8 @@ "rtdb-to-flow": "rtdb/rtdb-to-flow.js", "storage-read": "storage/storage-read.js", "storage-write": "storage/storage-write.js", - "storage-list": "storage/storage-list.js" + "storage-list": "storage/storage-list.js", + "storage-delete": "storage/storage-delete.js" } }, "dependencies": { diff --git a/storage/storage-read.js b/storage/storage-read.js index 06d8ba8..786bd30 100644 --- a/storage/storage-read.js +++ b/storage/storage-read.js @@ -70,6 +70,7 @@ module.exports = function(RED) { }) } catch(ex){ console.log('storage-read caught exception: '+ex) + msg.payload = ex node.send(msg) } } else { diff --git a/storage/storage-write.js b/storage/storage-write.js index 4799311..29db4e6 100644 --- a/storage/storage-write.js +++ b/storage/storage-write.js @@ -1,57 +1,63 @@ - -module.exports = function(RED) { - +module.exports = function (RED) { function FirebaseAdmin(config) { RED.nodes.createNode(this, config); var node = this; - - if(config.cred){ + if (config.cred) { let c = RED.nodes.getNode(config.cred); this.config = c; - this.admin = c.admin - - this.bucket = config.bucket || c.bucket - this.path = config.path - /* - console.log('configuring storage-write to listen for messages. config is') - console.dir(config) - console.log('storage is') - console.dir(this.storage) - */ + this.admin = c.admin; + + this.bucket = config.bucket || c.bucket; + this.path = config.path; } - - node.on('input', function(msg) { - if(msg && msg.payload){ - let global = this.context().global - this.storage = this.config.storage || global.get('cloud-storage') - let path = msg.payload.path || msg.path|| this.path - let bucket = msg.payload.bucket || msg.bucket || this.bucket - let contents = msg.payload.contents || msg.payload - let options ={ - contentType: msg.payload.contentType || msg.contentType || 'auto', - metadata: msg.payload.metadata || msg.metadata || {}, - private: msg.payload.private || msg.private || true, - public: msg.payload.public || msg.public || true, - } - console.log('storage-write writing file to bucket "'+bucket+'" path "'+path+'" contents is of type '+(typeof contents)) - const myBucket = this.storage.bucket(bucket); - const file = myBucket.file(path); - file.save(contents, options, function(err) { - if (!err) { - // File written successfully. - msg.payload={success:true, filename: path} - } else { - console.log('cloud storage write error: '+JSON.stringify(err)) - msg.payload ={success:false, filename: path} + node.on( + "input", + function (msg) { + try { + if (msg && msg.payload) { + let global = this.context().global; + this.storage = this.config.storage || global.get("cloud-storage"); + let path = msg.payload.path || msg.path || this.path; + let bucket = msg.payload.bucket || msg.bucket || this.bucket; + let contents = msg.payload.contents || msg.payload; + let options = { + contentType: msg.payload.contentType || msg.contentType || "auto", + metadata: msg.payload.metadata || msg.metadata || {}, + private: msg.payload.private || msg.private || true, + public: msg.payload.public || msg.public || true, + }; + console.log( + 'storage-write writing file to bucket "' + + bucket + + '" path "' + + path + + '" contents is of type ' + + typeof contents + ); + const myBucket = this.storage.bucket(bucket); + const file = myBucket.file(path); + file.save(contents, options, function (err) { + if (!err) { + // File written successfully. + msg.payload = { success: true, filename: path }; + } else { + console.log( + "cloud storage write error: " + JSON.stringify(err) + ); + msg.payload = { success: false, filename: path }; + } + node.send(msg); + }); } - node.send(msg) - }); - } - }.bind(this)); - - + } catch (ex) { + console.log("storage-read caught exception: " + ex); + msg.payload = ex; + node.send(msg); + } + }.bind(this) + ); } RED.nodes.registerType("storage-write", FirebaseAdmin); -} \ No newline at end of file +};