From 31427a8b3b0553cf0b8a387605ea5b671e968ba1 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Mon, 13 Jul 2026 22:17:26 +0200 Subject: [PATCH] feat(vues): jeton de partage en minuscules (base36, #112) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alphabet du jeton passé de base62 (a-z A-Z 0-9) à base36 (a-z 0-9), longueur inchangée (6). Lien plus lisible/dictable et cohérent avec le slug déjà en minuscules. Les jetons déjà générés (à casse mixte) restent valides (lookup par match exact). --- src/saved_views/db.py | 2 +- tests/saved_views/test_db.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/saved_views/db.py b/src/saved_views/db.py index 1931aa7..fa0bde6 100644 --- a/src/saved_views/db.py +++ b/src/saved_views/db.py @@ -24,7 +24,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_saved_views_token ON saved_views(token); """ -_TOKEN_ALPHABET = string.ascii_letters + string.digits # base62 +_TOKEN_ALPHABET = string.ascii_lowercase + string.digits # base36 (a-z 0-9) def generate_token(length: int = 6) -> str: diff --git a/tests/saved_views/test_db.py b/tests/saved_views/test_db.py index f711f79..68a2c16 100644 --- a/tests/saved_views/test_db.py +++ b/tests/saved_views/test_db.py @@ -79,11 +79,13 @@ def test_views_deleted_on_user_cascade(users_db_path): assert db.list_views(uid, "tableau") == [] -def test_generate_token_is_base62_and_length_6(): +def test_generate_token_is_lowercase_base36_and_length_6(): token = db.generate_token() assert len(token) == 6 - alphabet = set(string.ascii_letters + string.digits) + alphabet = set(string.ascii_lowercase + string.digits) assert set(token) <= alphabet + # Jamais de majuscule (lien plus lisible/dictable, cohérent avec le slug). + assert token == token.lower() def test_upsert_returns_token_on_insert(users_db_path):