mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
update according to PR comments
This commit is contained in:
@@ -233,7 +233,9 @@ var api = module.exports = {
|
||||
}
|
||||
var sendCredentials = {};
|
||||
var cred;
|
||||
if (/^subflow(:|$)/.test(opts.type)) {
|
||||
if (/^subflow(:|$)/.test(opts.type) ||
|
||||
(opts.type === "tab") ||
|
||||
(opts.type === "group")) {
|
||||
for (cred in credentials) {
|
||||
if (credentials.hasOwnProperty(cred)) {
|
||||
sendCredentials['has_'+cred] = credentials[cred] != null && credentials[cred] !== '';
|
||||
|
@@ -20,6 +20,7 @@ const events = require("@node-red/util").events;
|
||||
var flowUtil = require("./util");
|
||||
const context = require('../nodes/context');
|
||||
const hooks = require("@node-red/util").hooks;
|
||||
const credentials = require("../nodes/credentials");
|
||||
|
||||
var Subflow;
|
||||
var Log;
|
||||
@@ -422,11 +423,22 @@ class Flow {
|
||||
*/
|
||||
getFlowSetting(name) {
|
||||
const flow = this.flow;
|
||||
if (flow.credentials === undefined) {
|
||||
flow.credentials = credentials.get(flow.id) || {};
|
||||
}
|
||||
if (flow.env) {
|
||||
if (!name.startsWith("$parent.")) {
|
||||
if (!flow._env) {
|
||||
const envs = flow.env;
|
||||
const entries = envs.map((env) => [env.name, env]);
|
||||
const entries = envs.map((env) => {
|
||||
if (env.type === "cred") {
|
||||
const cred = flow.credentials;
|
||||
if (cred.hasOwnProperty(env.name)) {
|
||||
env.value = cred[env.name];
|
||||
}
|
||||
}
|
||||
return [env.name, env]
|
||||
});
|
||||
flow._env = Object.fromEntries(entries);
|
||||
}
|
||||
const env = flow._env[name];
|
||||
@@ -466,6 +478,82 @@ class Flow {
|
||||
return null;
|
||||
}
|
||||
|
||||
/*!
|
||||
* Get value of environment variable defined in group node.
|
||||
* @param {String} group - group node
|
||||
* @param {String} name - name of variable
|
||||
* @return {Object} object containing the value in val property or null if not defined
|
||||
*/
|
||||
getGroupEnvSetting(node, group, name) {
|
||||
if (group) {
|
||||
if (group.credentials === undefined) {
|
||||
group.credentials = credentials.get(group.id) || {};
|
||||
}
|
||||
if (!name.startsWith("$parent.")) {
|
||||
if (group.env) {
|
||||
if (!group._env) {
|
||||
const envs = group.env;
|
||||
const entries = envs.map((env) => {
|
||||
if (env.type === "cred") {
|
||||
const cred = group.credentials;
|
||||
if (cred.hasOwnProperty(env.name)) {
|
||||
env.value = cred[env.name];
|
||||
}
|
||||
}
|
||||
return [env.name, env];
|
||||
|
||||
return [env.name, env];
|
||||
});
|
||||
group._env = Object.fromEntries(entries);
|
||||
}
|
||||
const env = group._env[name];
|
||||
if (env) {
|
||||
let value = env.value;
|
||||
const type = env.type;
|
||||
if ((type !== "env") ||
|
||||
(value !== name)) {
|
||||
if (type === "env") {
|
||||
value = value.replace(new RegExp("\\${"+name+"}","g"),"${$parent."+name+"}");
|
||||
}
|
||||
if (type === "bool") {
|
||||
const val
|
||||
= ((value === "true") ||
|
||||
(value === true));
|
||||
return {
|
||||
val: val
|
||||
};
|
||||
}
|
||||
if (type === "cred") {
|
||||
return {
|
||||
val: value
|
||||
};
|
||||
}
|
||||
try {
|
||||
var val = redUtil.evaluateNodeProperty(value, type, node, null, null);
|
||||
return {
|
||||
val: val
|
||||
};
|
||||
}
|
||||
catch (e) {
|
||||
this.error(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
name = name.substring(8);
|
||||
}
|
||||
if (group.g) {
|
||||
const parent = this.getGroupNode(group.g);
|
||||
return this.getGroupEnvSetting(node, parent, name);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a flow setting value. This currently automatically defers to the parent
|
||||
* flow which, as defined in ./index.js returns `process.env[key]`.
|
||||
|
@@ -43,54 +43,6 @@ function evaluateInputValue(value, type, node) {
|
||||
return redUtil.evaluateNodeProperty(value, type, node, null, null);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Get value of environment variable defined in group node.
|
||||
* @param {String} group - group node
|
||||
* @param {String} name - name of variable
|
||||
* @return {Object} object containing the value in val property or null if not defined
|
||||
*/
|
||||
function getGroupSetting(node, group, flow, name) {
|
||||
if (group) {
|
||||
if (!name.startsWith("$parent.")) {
|
||||
if (group.env) {
|
||||
if (!group._env) {
|
||||
const envs = group.env;
|
||||
const entries = envs.map((env) => [env.name, env]);
|
||||
group._env = Object.fromEntries(entries);
|
||||
}
|
||||
const env = group._env[name];
|
||||
if (env) {
|
||||
let value = env.value;
|
||||
const type = env.type;
|
||||
if ((type !== "env") || (value !== name)) {
|
||||
if (type === "env") {
|
||||
value = value.replace(new RegExp("\\${"+name+"}","g"),"${$parent."+name+"}");
|
||||
}
|
||||
try {
|
||||
const val = evaluateInputValue(value, type, node);
|
||||
return {
|
||||
val: val
|
||||
};
|
||||
}
|
||||
catch (e) {
|
||||
this.error(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
name = name.substring(8);
|
||||
}
|
||||
if (group.g && flow) {
|
||||
const parent = flow.getGroupNode(group.g);
|
||||
return getGroupSetting(node, parent, flow, name);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* This class represents a subflow - which is handled as a special type of Flow
|
||||
*/
|
||||
@@ -421,7 +373,7 @@ class Subflow extends Flow {
|
||||
const node = this.subflowInstance;
|
||||
if (node.g) {
|
||||
const group = this.getGroupNode(node.g);
|
||||
const result = getGroupSetting(node, group, this, name);
|
||||
const result = this.getGroupEnvSetting(node, group, name);
|
||||
if (result) {
|
||||
return result.val;
|
||||
}
|
||||
|
@@ -703,6 +703,9 @@ async function updateFlow(id,newFlow, user) {
|
||||
if (newFlow.hasOwnProperty('env')) {
|
||||
tabNode.env = newFlow.env;
|
||||
}
|
||||
if (newFlow.hasOwnProperty('credentials')) {
|
||||
tabNode.credentials = newFlow.credentials;
|
||||
}
|
||||
|
||||
nodes = [tabNode].concat(newFlow.nodes||[]).concat(newFlow.configs||[]);
|
||||
nodes.forEach(function(n) {
|
||||
|
Reference in New Issue
Block a user