Ajoute la régénèse du token de présence Tasker et élargit le bandeau de test ntfy
Le bouton "Régénérer le token" de la carte Tasker crée un nouveau token
secret et invalide immédiatement les anciennes URLs, au cas où elles
auraient fuité. La fonction regenerate_presence_token préserve les
autres réglages notif (topic, serveur, jeton d'accès, plage). Au passage
le message de retour du bouton de test ntfy occupe désormais toute la
largeur de la carte au lieu d'être limité à 420px.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
This commit is contained in:
@ -250,3 +250,52 @@ def test_settings_save_persists_ntfy_token():
|
||||
cfg = models.load_notif_config("alice")
|
||||
assert cfg["ntfy_token"] == "tk_persisted_123"
|
||||
assert cfg["ntfy_topic"] == "topic-persisted"
|
||||
|
||||
|
||||
# ── Régénération du token de présence (Tasker) ───────────────────────────────
|
||||
|
||||
def test_regenerate_presence_token_requires_auth():
|
||||
unauth = TestClient(main.app)
|
||||
r = unauth.post("/settings/regenerate-presence-token", follow_redirects=False)
|
||||
assert r.status_code == 302
|
||||
assert "/login" in r.headers["location"]
|
||||
|
||||
|
||||
def test_regenerate_presence_token_invalidates_old_urls():
|
||||
"""Le nouveau token remplace l'ancien : les anciennes URLs ne marchent plus."""
|
||||
old_token = models.load_notif_config("alice")["token"]
|
||||
|
||||
r = client.post("/settings/regenerate-presence-token", cookies=COOKIES)
|
||||
assert r.status_code == 200
|
||||
# Le HTML retourné contient de nouvelles URLs avec un nouveau token
|
||||
assert old_token not in r.text
|
||||
assert "/presence/" in r.text
|
||||
assert "Token régénéré" in r.text
|
||||
|
||||
# L'ancienne URL doit maintenant renvoyer 404 (token inconnu)
|
||||
r_old = client.get(f"/presence/{old_token}/arrivee")
|
||||
assert r_old.status_code == 404
|
||||
|
||||
# La nouvelle URL doit fonctionner
|
||||
new_cfg = models.load_notif_config("alice")
|
||||
r_new = client.get(f"/presence/{new_cfg['token']}/arrivee")
|
||||
assert r_new.status_code == 200
|
||||
assert r_new.json() == {"ok": True}
|
||||
|
||||
|
||||
def test_regenerate_preserves_other_notif_fields():
|
||||
"""La régénération ne doit pas effacer topic/server/token ntfy."""
|
||||
models.save_notif_config(
|
||||
"alice", ntfy_topic="topic-x", ntfy_server="https://ntfy.arkel.fr",
|
||||
ntfy_token="tk_xyz",
|
||||
)
|
||||
before = models.load_notif_config("alice")
|
||||
new_token = models.regenerate_presence_token("alice")
|
||||
after = models.load_notif_config("alice")
|
||||
|
||||
assert after["token"] == new_token
|
||||
assert before["token"] != new_token
|
||||
# Les autres champs sont préservés
|
||||
assert after["ntfy_topic"] == "topic-x"
|
||||
assert after["ntfy_server"] == "https://ntfy.arkel.fr"
|
||||
assert after["ntfy_token"] == "tk_xyz"
|
||||
|
||||
Reference in New Issue
Block a user