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 "