bugfix: settings delta clearing auth

frdel committed Feb 10, 2026 at 17:13 UTC 343b14117803d1f4402ec19db3160ee41bbaf362
2 files changed +28 -4
python/helpers/login.py
+3 -3
@@ -3,13 +3,13 @@ import hashlib
3
4
5 def get_credentials_hash():
6 - user = dotenv.get_dotenv_value("AUTH_LOGIN")
7 - password = dotenv.get_dotenv_value("AUTH_PASSWORD")
6 + user = dotenv.get_dotenv_value(dotenv.KEY_AUTH_LOGIN)
7 + password = dotenv.get_dotenv_value(dotenv.KEY_AUTH_PASSWORD)
8 if not user:
9 return None
10 return hashlib.sha256(f"{user}:{password}".encode()).hexdigest()
11
12
13 def is_login_required():
14 - user = dotenv.get_dotenv_value("AUTH_LOGIN")
14 + user = dotenv.get_dotenv_value(dotenv.KEY_AUTH_LOGIN)
15 return bool(user)
python/helpers/settings.py
+25 -1
@@ -359,6 +359,7 @@ def get_settings() -> Settings:
359 if not _settings:
360 _settings = get_default_settings()
361 norm = normalize_settings(_settings)
362 + _load_sensitive_settings(norm)
363 return norm
364
365
@@ -380,7 +381,7 @@ def set_settings(settings: Settings, apply: bool = True):
381 _write_settings_file(_settings)
382 if apply:
383 _apply_settings(previous)
383 - return _settings
384 + return reload_settings()
385
386
387 def set_settings_delta(delta: dict, apply: bool = True):
@@ -436,6 +437,29 @@ def _adjust_to_version(settings: Settings, default: Settings):
437
438
439
440 +def _load_sensitive_settings(settings: Settings):
441 + # load api keys from .env
442 + providers = get_providers("chat") + get_providers("embedding")
443 + for provider in providers:
444 + provider_name = provider["value"]
445 + api_key = settings["api_keys"].get(provider_name) or models.get_api_key(provider_name)
446 + if api_key and api_key != "None":
447 + settings["api_keys"][provider_name] = api_key
448 +
449 + # load auth fields from .env
450 + settings["auth_login"] = dotenv.get_dotenv_value(dotenv.KEY_AUTH_LOGIN) or ""
451 + settings["auth_password"] = dotenv.get_dotenv_value(dotenv.KEY_AUTH_PASSWORD) or ""
452 + settings["rfc_password"] = dotenv.get_dotenv_value(dotenv.KEY_RFC_PASSWORD) or ""
453 + settings["root_password"] = dotenv.get_dotenv_value(dotenv.KEY_ROOT_PASSWORD) or ""
454 +
455 + # load secrets raw content
456 + secrets_manager = get_default_secrets_manager()
457 + try:
458 + settings["secrets"] = secrets_manager.read_secrets_raw()
459 + except Exception:
460 + settings["secrets"] = ""
461 +
462 +
463 def _read_settings_file() -> Settings | None:
464 if os.path.exists(SETTINGS_FILE):
465 content = files.read_file(SETTINGS_FILE)