transfer from private server/git server
This commit is contained in:
69
web/config.py
Normal file
69
web/config.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
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"
|
||||
Reference in New Issue
Block a user