From 85b0dd0b39dc4a3c76db0e37ffcf37d462ba8c41 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Wed, 15 Jul 2026 15:50:17 +0200 Subject: [PATCH] =?UTF-8?q?Ajoute=20le=20widget=20de=20chat=20Chatwoot=20(?= =?UTF-8?q?essai)=20=E2=80=94=20issue=20#120?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injecte le script d'intégration Chatwoot dans app.index_string, activé via CHATWOOT_WEBSITE_TOKEN. Vide par défaut, donc désactivé en test/CI. --- .template.env | 4 ++++ src/app.py | 8 +++++++- src/utils/chatwoot.py | 23 +++++++++++++++++++++++ tests/test_chatwoot.py | 17 +++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/utils/chatwoot.py create mode 100644 tests/test_chatwoot.py diff --git a/.template.env b/.template.env index 957c6eb..61733d0 100644 --- a/.template.env +++ b/.template.env @@ -22,6 +22,10 @@ MATOMO_ID_SITE= MATOMO_BASE_URL= MATOMO_TOKEN= +# Widget de chat Chatwoot (essai, offre managée, issue #120). Laisser vide +# pour désactiver le widget. +CHATWOOT_WEBSITE_TOKEN= + # API privée API_AUTH_DISABLED="false" MATOMO_URL=https://analytics.maudry.com/matomo.php diff --git a/src/app.py b/src/app.py index 58ac103..83647d5 100644 --- a/src/app.py +++ b/src/app.py @@ -35,6 +35,7 @@ from flask_login import current_user from src.auth.setup import init_auth from src.utils import DEVELOPMENT from src.utils.cache import cache +from src.utils.chatwoot import build_widget_script load_dotenv() @@ -222,6 +223,10 @@ with open("./pyproject.toml", "rb") as f: pyproject = tomllib.load(f) version = "v" + pyproject["project"]["version"] +# Widget de chat Chatwoot (essai, issue #120) : chaîne vide si la variable +# d'env n'est pas définie, ce qui désactive le widget (utilisé notamment +# pour ne jamais le charger pendant les tests/CI). +chatwoot_script = build_widget_script(os.getenv("CHATWOOT_WEBSITE_TOKEN")) app.index_string = """ @@ -266,9 +271,10 @@ app.index_string = """ g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); + __CHATWOOT_SCRIPT__ -""" +""".replace("__CHATWOOT_SCRIPT__", chatwoot_script) navbar = dbc.Navbar( dbc.Container( diff --git a/src/utils/chatwoot.py b/src/utils/chatwoot.py new file mode 100644 index 0000000..128e2a7 --- /dev/null +++ b/src/utils/chatwoot.py @@ -0,0 +1,23 @@ +def build_widget_script(website_token: str | None) -> str: + """Bloc """ diff --git a/tests/test_chatwoot.py b/tests/test_chatwoot.py new file mode 100644 index 0000000..c46103a --- /dev/null +++ b/tests/test_chatwoot.py @@ -0,0 +1,17 @@ +from src.utils.chatwoot import build_widget_script + + +def test_no_token_returns_empty_string(): + assert build_widget_script(None) == "" + + +def test_empty_token_returns_empty_string(): + assert build_widget_script("") == "" + + +def test_token_produces_script_with_token_and_managed_base_url(): + script = build_widget_script("PVejdJRyKtSZdEkJtDJQ3xCd") + assert "