diff --git a/config.py b/config.py index 4b67bc7..b05fc59 100644 --- a/config.py +++ b/config.py @@ -10,27 +10,38 @@ from contextlib import contextmanager def _build_connection_string() -> str: """ - En déploiement (variables d'environnement présentes), on se connecte en - authentification SQL. Sinon, on garde la connexion Windows locale par défaut - (poste de dev). + Construit la chaîne de connexion ODBC à partir des variables + d'environnement. + + Deux modes d'authentification : + • authentification SQL (déploiement) — dès que DB_USER est défini ; + • authentification Windows (poste de dev) — sinon, ou en forçant + DB_TRUSTED_CONNECTION=yes. + + Le serveur par défaut reste modifiable par DB_SERVER : coder en dur le + nom d'un poste rendait l'API inutilisable sur toute autre machine. """ - server = os.getenv("DB_SERVER") - if server: - driver = os.getenv("DB_DRIVER", "ODBC Driver 18 for SQL Server") - port = os.getenv("DB_PORT", "1433") - return ( - f"Driver={{{driver}}};" - f"Server={server},{port};" - f"Database={os.getenv('DB_NAME', 'DataSentinel')};" - f"UID={os.getenv('DB_USER')};" - f"PWD={os.getenv('DB_PASSWORD')};" - "Encrypt=yes;TrustServerCertificate=yes;" - ) + server = os.getenv("DB_SERVER", "localhost") + port = os.getenv("DB_PORT", "") + base = os.getenv("DB_NAME", "DataSentinel") + driver = os.getenv("DB_DRIVER", "ODBC Driver 18 for SQL Server") + user = os.getenv("DB_USER") + + # Une instance nommée (MonPoste\SQLEXPRESS) se joint sans port explicite. + adresse = f"{server},{port}" if port else server + + trusted = os.getenv("DB_TRUSTED_CONNECTION", "").lower() in ("1", "yes", "true") + if user and not trusted: + identification = f"UID={user};PWD={os.getenv('DB_PASSWORD', '')};" + else: + identification = "Trusted_Connection=yes;" + return ( - "Driver={ODBC Driver 17 for SQL Server};" - "Server=LaptopCA\\SQLEXPRESS;" - "Database=DataSentinel;" - "Trusted_Connection=yes;" + f"Driver={{{driver}}};" + f"Server={adresse};" + f"Database={base};" + f"{identification}" + "Encrypt=yes;TrustServerCertificate=yes;" )