feat(vues): jeton de partage en minuscules (base36, #112)

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).
This commit is contained in:
Colin Maudry
2026-07-13 22:17:26 +02:00
parent e0828a7e13
commit 31427a8b3b
2 changed files with 5 additions and 3 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_saved_views_token
ON 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: def generate_token(length: int = 6) -> str:
+4 -2
View File
@@ -79,11 +79,13 @@ def test_views_deleted_on_user_cascade(users_db_path):
assert db.list_views(uid, "tableau") == [] 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() token = db.generate_token()
assert len(token) == 6 assert len(token) == 6
alphabet = set(string.ascii_letters + string.digits) alphabet = set(string.ascii_lowercase + string.digits)
assert set(token) <= alphabet 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): def test_upsert_returns_token_on_insert(users_db_path):