70 lines
3.0 KiB
Python
70 lines
3.0 KiB
Python
"""
|
|
config.py — Configuration centralisée de l'application.
|
|
|
|
Toutes les valeurs sensibles (secrets, mots de passe, client_secret OIDC)
|
|
sont lues depuis les variables d'environnement (fichier .env en local,
|
|
variables d'environnement Docker en production). Aucun secret n'est en dur
|
|
dans le code source, conformément à l'analyse de risques DevSecOps
|
|
(Bloc 1 - C8 : "fuite du CLIENT_SECRET OIDC").
|
|
"""
|
|
|
|
import os
|
|
|
|
|
|
class Config:
|
|
# --- Application ---
|
|
SECRET_KEY = os.environ.get("SECRET_KEY", "dev-key-change-me")
|
|
DEBUG = os.environ.get("FLASK_DEBUG", "false").lower() == "true"
|
|
ENV = os.environ.get("FLASK_ENV", "production")
|
|
|
|
# --- Base de données (MariaDB via PyMySQL) ---
|
|
DB_HOST = os.environ.get("DB_HOST", "mariadb")
|
|
DB_PORT = int(os.environ.get("DB_PORT", "3306"))
|
|
DB_USER = os.environ.get("DB_USER", "flaskuser")
|
|
DB_PASSWORD = os.environ.get("DB_PASSWORD", "flaskpass")
|
|
DB_NAME = os.environ.get("DB_NAME", "gesthub")
|
|
|
|
# --- Authentification Keycloak (OIDC) ---
|
|
OIDC_CLIENT_ID = os.environ.get("OIDC_CLIENT_ID", "flask-app")
|
|
OIDC_CLIENT_SECRET = os.environ.get("OIDC_CLIENT_SECRET", "")
|
|
OIDC_ISSUER = os.environ.get(
|
|
"OIDC_ISSUER", "https://keycloak.ninolbt.com/realms/gesthub"
|
|
)
|
|
OIDC_DISCOVERY_URL = f"{OIDC_ISSUER}/.well-known/openid-configuration"
|
|
OIDC_LOGOUT_URL = f"{OIDC_ISSUER}/protocol/openid-connect/logout"
|
|
PUBLIC_BASE_URL = os.environ.get("PUBLIC_BASE_URL", "https://dashboard.ninolbt.com")
|
|
|
|
# --- Rôles applicatifs (mappés sur les groupes Keycloak) ---
|
|
ADMIN_GROUP = "/admin"
|
|
|
|
# --- RGPD (droit à l'effacement, art. 17) ---
|
|
# Secret utilisé pour pseudonymiser irréversiblement un `sub` OIDC lors
|
|
# d'une anonymisation (HMAC-SHA256). Distinct de SECRET_KEY par défaut ;
|
|
# si absent, retombe sur SECRET_KEY (voir routes/rgpd.py).
|
|
RGPD_ANON_PEPPER = os.environ.get("RGPD_ANON_PEPPER", "")
|
|
|
|
# --- Module fichiers ---
|
|
UPLOAD_DIR = os.environ.get(
|
|
"UPLOAD_DIR", os.path.join(os.path.dirname(__file__), "static", "assets", "uploads")
|
|
)
|
|
MAX_UPLOAD_SIZE_BYTES = int(os.environ.get("MAX_UPLOAD_SIZE_BYTES", 20 * 1024 * 1024)) # 20 Mo
|
|
ALLOWED_EXTENSIONS = {"pdf", "png", "jpg", "jpeg", "gif", "txt", "docx", "xlsx", "zip"}
|
|
ALLOWED_MIME_TYPES = {
|
|
"application/pdf", "image/png", "image/jpeg", "image/gif", "text/plain",
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
"application/zip", "application/x-zip-compressed",
|
|
}
|
|
|
|
|
|
class TestConfig(Config):
|
|
"""Configuration utilisée par la suite de tests pytest (Bloc 1 - C5, Bloc 3 - C7).
|
|
|
|
Pointe vers une base MariaDB de test dédiée (voir tests/conftest.py) afin de ne
|
|
jamais exécuter les tests contre les données de développement ou de production.
|
|
"""
|
|
|
|
TESTING = True
|
|
DB_NAME = os.environ.get("TEST_DB_NAME", "gesthub_test")
|
|
SECRET_KEY = "test-secret-key"
|