mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Add envVarExcludes setting to block named env vars
This commit is contained in:
parent
3213c03754
commit
28e08ebaf5
@ -70,6 +70,7 @@ function init(runtime) {
|
|||||||
typeEventRegistered = true;
|
typeEventRegistered = true;
|
||||||
}
|
}
|
||||||
Flow.init(runtime);
|
Flow.init(runtime);
|
||||||
|
flowUtil.init(runtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadFlows() {
|
function loadFlows() {
|
||||||
@ -676,7 +677,7 @@ const flowAPI = {
|
|||||||
getNode: getNode,
|
getNode: getNode,
|
||||||
handleError: () => false,
|
handleError: () => false,
|
||||||
handleStatus: () => false,
|
handleStatus: () => false,
|
||||||
getSetting: k => process.env[k]
|
getSetting: k => flowUtil.getEnvVar(k)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@ var Log = require("@node-red/util").log;
|
|||||||
var subflowInstanceRE = /^subflow:(.+)$/;
|
var subflowInstanceRE = /^subflow:(.+)$/;
|
||||||
var typeRegistry = require("@node-red/registry");
|
var typeRegistry = require("@node-red/registry");
|
||||||
|
|
||||||
|
var envVarExcludes = {};
|
||||||
|
|
||||||
function diffNodes(oldNode,newNode) {
|
function diffNodes(oldNode,newNode) {
|
||||||
if (oldNode == null) {
|
if (oldNode == null) {
|
||||||
return true;
|
return true;
|
||||||
@ -52,12 +54,8 @@ function mapEnvVarProperties(obj,prop,flow) {
|
|||||||
} else if (typeof obj[prop] === 'string') {
|
} else if (typeof obj[prop] === 'string') {
|
||||||
if (obj[prop][0] === "$" && (EnvVarPropertyRE_old.test(v) || EnvVarPropertyRE.test(v)) ) {
|
if (obj[prop][0] === "$" && (EnvVarPropertyRE_old.test(v) || EnvVarPropertyRE.test(v)) ) {
|
||||||
var envVar = v.substring(2,v.length-1);
|
var envVar = v.substring(2,v.length-1);
|
||||||
if (!flow) {
|
var r = flow.getSetting(envVar);
|
||||||
obj[prop] = process.env.hasOwnProperty(envVar)?process.env[envVar]:v;
|
obj[prop] = r!==undefined?r:obj[prop];
|
||||||
} else {
|
|
||||||
var r = flow.getSetting(envVar);
|
|
||||||
obj[prop] = r!==undefined?r:obj[prop];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (var p in v) {
|
for (var p in v) {
|
||||||
@ -69,7 +67,15 @@ function mapEnvVarProperties(obj,prop,flow) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
init: function(runtime) {
|
||||||
|
envVarExcludes = {};
|
||||||
|
if (runtime.settings.hasOwnProperty('envVarExcludes') && Array.isArray(runtime.settings.envVarExcludes)) {
|
||||||
|
runtime.settings.envVarExcludes.forEach(v => envVarExcludes[v] = true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getEnvVar: function(k) {
|
||||||
|
return !envVarExcludes[k]?process.env[k]:undefined
|
||||||
|
},
|
||||||
diffNodes: diffNodes,
|
diffNodes: diffNodes,
|
||||||
mapEnvVarProperties: mapEnvVarProperties,
|
mapEnvVarProperties: mapEnvVarProperties,
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ describe('flows/util', function() {
|
|||||||
var foo = {a:"$(foo1)",b:"$(foo2)",c:{d:"$(foo3)"}};
|
var foo = {a:"$(foo1)",b:"$(foo2)",c:{d:"$(foo3)"}};
|
||||||
for (var p in foo) {
|
for (var p in foo) {
|
||||||
if (foo.hasOwnProperty(p)) {
|
if (foo.hasOwnProperty(p)) {
|
||||||
flowUtil.mapEnvVarProperties(foo,p);
|
flowUtil.mapEnvVarProperties(foo,p,{getSetting: p => process.env[p]});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foo.should.eql({ a: 'bar1', b: 'bar2', c: { d: 'bar3' } } );
|
foo.should.eql({ a: 'bar1', b: 'bar2', c: { d: 'bar3' } } );
|
||||||
@ -59,7 +59,7 @@ describe('flows/util', function() {
|
|||||||
var foo = {a:"${foo1}",b:"${foo2}",c:{d:"${foo3}"}};
|
var foo = {a:"${foo1}",b:"${foo2}",c:{d:"${foo3}"}};
|
||||||
for (var p in foo) {
|
for (var p in foo) {
|
||||||
if (foo.hasOwnProperty(p)) {
|
if (foo.hasOwnProperty(p)) {
|
||||||
flowUtil.mapEnvVarProperties(foo,p);
|
flowUtil.mapEnvVarProperties(foo,p,{getSetting: p => process.env[p]});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foo.should.eql({ a: 'bar1', b: 'bar2', c: { d: 'bar3' } } );
|
foo.should.eql({ a: 'bar1', b: 'bar2', c: { d: 'bar3' } } );
|
||||||
@ -77,6 +77,27 @@ describe('flows/util', function() {
|
|||||||
foo.should.eql({ a: '$(unknown)', b: 'FOO2', c: { d: 'FOO3' } } );
|
foo.should.eql({ a: '$(unknown)', b: 'FOO2', c: { d: 'FOO3' } } );
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('#getEnvVar',function() {
|
||||||
|
before(function() {
|
||||||
|
process.env.foo1 = "bar1";
|
||||||
|
})
|
||||||
|
after(function() {
|
||||||
|
delete process.env.foo1;
|
||||||
|
})
|
||||||
|
it('returns a known env var', function() {
|
||||||
|
flowUtil.init({settings:{}});
|
||||||
|
flowUtil.getEnvVar("foo1").should.equal("bar1")
|
||||||
|
})
|
||||||
|
it('returns undefined for an unknown env var', function() {
|
||||||
|
flowUtil.init({settings:{}});
|
||||||
|
(flowUtil.getEnvVar("foo2") === undefined).should.be.true()
|
||||||
|
})
|
||||||
|
it('returns undefined for an excluded env var', function() {
|
||||||
|
flowUtil.init({settings:{envVarExcludes:['foo1']}});
|
||||||
|
(flowUtil.getEnvVar("foo1") === undefined).should.be.true()
|
||||||
|
})
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
describe('#diffNodes',function() {
|
describe('#diffNodes',function() {
|
||||||
it('handles a null old node', function() {
|
it('handles a null old node', function() {
|
||||||
|
@ -31,17 +31,18 @@ describe("red/nodes/index", function() {
|
|||||||
before(function() {
|
before(function() {
|
||||||
sinon.stub(index,"startFlows");
|
sinon.stub(index,"startFlows");
|
||||||
process.env.NODE_RED_HOME = NR_TEST_UTILS.resolve("node-red");
|
process.env.NODE_RED_HOME = NR_TEST_UTILS.resolve("node-red");
|
||||||
|
process.env.foo="bar";
|
||||||
});
|
});
|
||||||
after(function() {
|
after(function() {
|
||||||
index.startFlows.restore();
|
index.startFlows.restore();
|
||||||
delete process.env.NODE_RED_HOME;
|
delete process.env.NODE_RED_HOME;
|
||||||
|
delete process.env.foo;
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(function() {
|
afterEach(function() {
|
||||||
index.clearRegistry();
|
index.clearRegistry();
|
||||||
});
|
});
|
||||||
|
|
||||||
process.env.foo="bar";
|
|
||||||
var testFlows = [{"type":"test","id":"tab1","label":"Sheet 1"}];
|
var testFlows = [{"type":"test","id":"tab1","label":"Sheet 1"}];
|
||||||
var testCredentials = {"tab1":{"b":1, "c":"2", "d":"$(foo)"}};
|
var testCredentials = {"tab1":{"b":1, "c":"2", "d":"$(foo)"}};
|
||||||
var storage = {
|
var storage = {
|
||||||
@ -68,8 +69,8 @@ describe("red/nodes/index", function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function TestNode(n) {
|
function TestNode(n) {
|
||||||
|
this._flow = {getSetting: p => process.env[p]};
|
||||||
index.createNode(this, n);
|
index.createNode(this, n);
|
||||||
var node = this;
|
|
||||||
this.on("log", function() {
|
this.on("log", function() {
|
||||||
// do nothing
|
// do nothing
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user