added storage-delete node

This commit is contained in:
Peter Svensson
2020-04-26 15:19:43 +02:00
parent 7ac88211f7
commit 0ed1f8f382
4 changed files with 72 additions and 51 deletions

View File

@ -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

View File

@ -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": {

View File

@ -70,6 +70,7 @@ module.exports = function(RED) {
})
} catch(ex){
console.log('storage-read caught exception: '+ex)
msg.payload = ex
node.send(msg)
}
} else {

View File

@ -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);
}
};