diff --git a/README.md b/README.md index 38711fd..7977476 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ Seul `data/config.example.json` est versionné. "jours_par_semaine": 5, "log_level": "DEBUG", "allowed_email_domain": "exemple.fr", + "base_url": "https://pointeuse.exemple.fr", "mail_from": "no-reply@exemple.fr", "smtp": { "host": "smtp.exemple.fr", @@ -96,6 +97,11 @@ Seul `data/config.example.json` est versionné. - `jours_par_semaine` — nombre de jours travaillés dans la semaine (ex: `5`). Le quota quotidien est calculé : `heures_semaine ÷ jours_par_semaine` (39h / 5 = 7h48/jour). - `log_level` — `DEBUG`, `INFO`, `WARNING` ou `ERROR`. Contrôle la verbosité des logs (`docker logs`). - `allowed_email_domain` — seules les adresses de ce domaine peuvent se connecter. +- `base_url` — schéma + domaine (ex: `https://pointeuse.exemple.fr`, sans `/` final) utilisés + pour construire les liens envoyés par email (magic link) et les URLs Tasker/Automation + affichées dans Réglages. Si vide, ces URLs sont dérivées de la requête entrante (Host header) + quand celui-ci correspond à `localhost` ou à `allowed_email_domain` ; sinon l'envoi d'email est + refusé par sécurité (anti open-redirect). **Toujours renseigner `base_url` en production.** - `mail_from` — adresse expéditrice des emails de connexion. - `smtp` — serveur relais utilisé pour l'envoi (host, port, identifiants, TLS). diff --git a/app/main.py b/app/main.py index b50a3c2..bd2abee 100644 --- a/app/main.py +++ b/app/main.py @@ -385,17 +385,17 @@ def _oob_time_cells(date, jour, plages): matin_html = ( f'
{arrivee_url}'
+ f'{arrivee_url}'
+ f''
f'{depart_url}'
+ f'{depart_url}'
+ f''
f'{{ arrivee_url }}
+ {{ arrivee_url }}
+
{{ depart_url }}
+ {{ depart_url }}
+
@@ -252,6 +254,26 @@ .settings-regen-btn:hover:not([disabled]) { background: var(--neg-bg); } +.settings-copy-btn { + font-family: var(--mono); + font-size: 10px; + letter-spacing: .04em; + color: var(--accent); + background: none; + border: 1px solid var(--rule); + padding: .35rem .6rem; + cursor: pointer; + flex-shrink: 0; + transition: border-color .15s, background .15s; +} +.settings-copy-btn:hover { + border-color: var(--accent); + background: rgba(47,95,160,.06); +} +.settings-copy-btn.settings-copy-btn--done { + color: var(--pos); + border-color: var(--pos); +} #ntfy-test-result { flex: 1; min-width: 0; @@ -266,4 +288,46 @@ line-height: 1.45; } + {% endblock %}