Environment Variables: handling of environment variables in user input

This commit is contained in:
vinodkiran
2023-12-12 14:15:41 +05:30
parent bfa870e56b
commit 947ab9dae6
2 changed files with 32 additions and 1 deletions
+6 -1
View File
@@ -43,7 +43,8 @@ import {
checkMemorySessionId, checkMemorySessionId,
clearSessionMemoryFromViewMessageDialog, clearSessionMemoryFromViewMessageDialog,
getUserHome, getUserHome,
replaceChatHistory replaceChatHistory,
replaceEnvVariables
} from './utils' } from './utils'
import { cloneDeep, omit, uniqWith, isEqual } from 'lodash' import { cloneDeep, omit, uniqWith, isEqual } from 'lodash'
import { getDataSource } from './DataSource' import { getDataSource } from './DataSource'
@@ -1381,6 +1382,10 @@ export class App {
const chatflowid = req.params.id const chatflowid = req.params.id
let incomingInput: IncomingInput = req.body let incomingInput: IncomingInput = req.body
if (incomingInput.question) {
incomingInput.question = await replaceEnvVariables(incomingInput.question, this.AppDataSource)
}
let nodeToExecuteData: INodeData let nodeToExecuteData: INodeData
const chatflow = await this.AppDataSource.getRepository(ChatFlow).findOneBy({ const chatflow = await this.AppDataSource.getRepository(ChatFlow).findOneBy({
+26
View File
@@ -954,3 +954,29 @@ export const getAllValuesFromJson = (obj: any): any[] => {
extractValues(obj) extractValues(obj)
return values 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
}