Files
PolyWeather/src/utils/runtime_secrets.py
T
2026-05-30 20:33:30 +08:00

66 lines
1.8 KiB
Python

"""Runtime secret lookup helpers.
Secrets rotated from the ops UI live in the shared SQLite database so backend
processes can pick them up without host-level Docker access. Environment
variables remain the fallback source for bootstrapping and local development.
"""
from __future__ import annotations
import os
from typing import Any
from src.database.db_manager import DBManager
def get_runtime_secret(key: str) -> str:
normalized_key = str(key or "").strip()
if not normalized_key:
return ""
try:
stored = DBManager().get_runtime_secret(normalized_key)
except Exception:
stored = None
if stored:
return str(stored).strip()
return str(os.getenv(normalized_key) or "").strip()
def get_runtime_secret_status(key: str) -> dict[str, Any]:
normalized_key = str(key or "").strip()
if not normalized_key:
return {
"key": "",
"configured": False,
"masked": "",
"updated_at": "",
"updated_by": "",
"source": "runtime_store",
}
try:
metadata = DBManager().get_runtime_secret_metadata(normalized_key)
except Exception:
metadata = {}
if isinstance(metadata, dict) and metadata.get("configured"):
return metadata
env_value = str(os.getenv(normalized_key) or "").strip()
if not env_value:
return {
"key": normalized_key,
"configured": False,
"masked": "",
"updated_at": "",
"updated_by": "",
"source": "runtime_store",
}
return {
"key": normalized_key,
"configured": True,
"masked": DBManager._mask_secret_value(env_value),
"length": len(env_value),
"updated_at": "",
"updated_by": "",
"source": "environment",
}