mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 09:00:52 +03:00
Environment Variables: handling of environment variables in user input
This commit is contained in:
@@ -43,7 +43,8 @@ import {
|
||||
checkMemorySessionId,
|
||||
clearSessionMemoryFromViewMessageDialog,
|
||||
getUserHome,
|
||||
replaceChatHistory
|
||||
replaceChatHistory,
|
||||
replaceEnvVariables
|
||||
} from './utils'
|
||||
import { cloneDeep, omit, uniqWith, isEqual } from 'lodash'
|
||||
import { getDataSource } from './DataSource'
|
||||
@@ -1381,6 +1382,10 @@ export class App {
|
||||
const chatflowid = req.params.id
|
||||
let incomingInput: IncomingInput = req.body
|
||||
|
||||
if (incomingInput.question) {
|
||||
incomingInput.question = await replaceEnvVariables(incomingInput.question, this.AppDataSource)
|
||||
}
|
||||
|
||||
let nodeToExecuteData: INodeData
|
||||
|
||||
const chatflow = await this.AppDataSource.getRepository(ChatFlow).findOneBy({
|
||||
|
||||
@@ -954,3 +954,29 @@ export const getAllValuesFromJson = (obj: any): any[] => {
|
||||
extractValues(obj)
|
||||
return values
|
||||
}
|
||||
|
||||
export const replaceEnvVariables = async (question: string, appDataSource: DataSource): Promise<string> => {
|
||||
// the incoming question can have more than one env variable with the pattern {{ env.VARIABLE_NAME }}
|
||||
// extract all the env variables from the question and iterate through them
|
||||
const envVariables = question.match(/{{[^}]*}}/g)
|
||||
if (envVariables) {
|
||||
for (const envVariable of envVariables) {
|
||||
// this is needed as the user can have spaces between the curly braces and the env keyword
|
||||
// extract the variable name from the env variable
|
||||
const variableName = envVariable.replace(/{{\s*env.|\s*}}/g, '')
|
||||
// get the value of the env variable from the database
|
||||
const variable = await appDataSource.getRepository(Variable).findOneBy({
|
||||
name: variableName
|
||||
})
|
||||
if (variable) {
|
||||
let value = variable.value
|
||||
if (variable.type === 'runtime') {
|
||||
value = process.env[variable.name] as string
|
||||
}
|
||||
// replace the env variable with the value from the database
|
||||
question = question.replace(envVariable, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
return question
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user