transfer from private server/git server

This commit is contained in:
M1n-0
2026-08-21 09:12:02 +02:00
parent 45c8982178
commit 6ecb014238
75 changed files with 4344 additions and 274 deletions

69
web/config.py Normal file
View 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"