From e4240766774dc606d63f4f863bf641b97f72b8cb Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 2 Jul 2024 16:19:47 -0300 Subject: [PATCH] fix(service.py): improve handling of environment variables in DatabaseVariableService to update or create variables based on changes in secret_key (#2481) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../base/langflow/services/variable/service.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/backend/base/langflow/services/variable/service.py b/src/backend/base/langflow/services/variable/service.py index fc88f1301..da77043a8 100644 --- a/src/backend/base/langflow/services/variable/service.py +++ b/src/backend/base/langflow/services/variable/service.py @@ -31,9 +31,22 @@ class DatabaseVariableService(VariableService, Service): for var in self.settings_service.settings.variables_to_get_from_environment: if var in os.environ: logger.debug(f"Creating {var} variable from environment.") - if not session.exec( + + if found_variable := session.exec( select(Variable).where(Variable.user_id == user_id, Variable.name == var) ).first(): + # Update it + value = os.environ[var] + if isinstance(value, str): + value = value.strip() + # If the secret_key changes the stored value could be invalid + # so we need to re-encrypt it + encrypted = auth_utils.encrypt_api_key(value, settings_service=self.settings_service) + found_variable.value = encrypted + session.add(found_variable) + session.commit() + else: + # Create it try: value = os.environ[var] if isinstance(value, str):