Files
geo/api/docs/USERNAME_VALIDATION_CHANGES.md
Pierre 5ab03751e1 feat: Release version 3.1.4 - Mode terrain et génération PDF
 Nouvelles fonctionnalités:
- Ajout du mode terrain pour utilisation mobile hors connexion
- Génération automatique de reçus PDF avec template personnalisé
- Révision complète du système de cartes avec amélioration des performances

🔧 Améliorations techniques:
- Refactoring du module chat avec architecture simplifiée
- Optimisation du système de sécurité NIST SP 800-63B
- Amélioration de la gestion des secteurs géographiques
- Support UTF-8 étendu pour les noms d'utilisateurs

📱 Application mobile:
- Nouveau mode terrain dans user_field_mode_page
- Interface utilisateur adaptative pour conditions difficiles
- Synchronisation offline améliorée

🗺️ Cartographie:
- Optimisation des performances MapBox
- Meilleure gestion des tuiles hors ligne
- Amélioration de l'affichage des secteurs

📄 Documentation:
- Ajout guide Android (ANDROID-GUIDE.md)
- Documentation sécurité API (API-SECURITY.md)
- Guide module chat (CHAT_MODULE.md)

🐛 Corrections:
- Résolution des erreurs 400 lors de la création d'utilisateurs
- Correction de la validation des noms d'utilisateurs
- Fix des problèmes de synchronisation chat

🤖 Generated with Claude Code (https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-19 19:38:03 +02:00

4.4 KiB

Changements de validation des usernames - Version ultra-souple

Date : 17 janvier 2025

Contexte

Suite aux problèmes d'erreurs 400 et au besoin d'avoir une approche plus moderne et inclusive, les règles de validation des usernames ont été assouplies pour accepter tous les caractères UTF-8, similaire à l'approche NIST pour les mots de passe.

Anciennes règles (trop restrictives)

  • 10-30 caractères
  • Doit commencer par une lettre minuscule
  • Seulement : a-z, 0-9, ., -, _
  • Pas d'espaces
  • Pas de majuscules
  • Pas d'accents ou caractères spéciaux

Nouvelles règles (ultra-souples)

  • 8-30 caractères UTF-8
  • Tous caractères acceptés :
    • Lettres (majuscules/minuscules)
    • Chiffres
    • Espaces
    • Caractères spéciaux (!@#$%^&*()_+-=[]{}|;:'"<>,.?/)
    • Accents (é, è, à, ñ, ü, etc.)
    • Émojis (😀, 🎉, ❤️, etc.)
    • Caractères non-latins (中文, العربية, Русский, etc.)
  • Sensible à la casse (Jean ≠ jean)
  • Trim automatique des espaces début/fin
  • Unicité vérifiée dans toute la base

Exemples de usernames valides

Noms classiques

  • Jean-Pierre
  • Marie Claire (avec espace)
  • O'Connor
  • José García

Avec chiffres et caractères spéciaux

  • admin2024
  • user@company
  • test_user#1
  • Marie*123!

International

  • 李明 (chinois)
  • محمد (arabe)
  • Владимир (russe)
  • さくら (japonais)
  • Παύλος (grec)

Modernes/Fun

  • 🦄Unicorn
  • Player_1 🎮
  • ☕Coffee.Lover
  • 2024_User

Exemples de usernames invalides

  • short (moins de 8 caractères)
  • (espaces seulement)
  • very_long_username_that_exceeds_thirty_chars (plus de 30 caractères)

Modifications techniques

1. Code PHP (UserController.php)

// Avant (restrictif)
if (!preg_match('/^[a-z][a-z0-9._-]{9,29}$/', $username))

// Après (ultra-souple)
$username = trim($data['username']);
$usernameLength = mb_strlen($username, 'UTF-8');

if ($usernameLength < 8) {
    // Erreur : trop court
}
if ($usernameLength > 30) {
    // Erreur : trop long
}
// C'est tout ! Pas d'autre validation

2. Base de données

-- Script à exécuter : scripts/sql/migration_username_utf8_support.sql
ALTER TABLE `users` 
MODIFY COLUMN `encrypted_user_name` varchar(255) DEFAULT '';

3. Messages d'erreur simplifiés

  • Avant : "Format du nom d'utilisateur invalide (10-30 caractères, commence par une lettre, caractères autorisés: a-z, 0-9, ., -, _)"
  • Après :
    • "Identifiant trop court" + "Minimum 8 caractères"
    • "Identifiant trop long" + "Maximum 30 caractères"
    • "Identifiant déjà utilisé"

Impact sur l'expérience utilisateur

Avantages

  1. Inclusivité : Support de toutes les langues et cultures
  2. Modernité : Permet les émojis et caractères spéciaux
  3. Simplicité : Règles faciles à comprendre (juste la longueur)
  4. Flexibilité : Les utilisateurs peuvent choisir l'identifiant qu'ils veulent
  5. Moins d'erreurs : Moins de rejets pour format invalide

Points d'attention

  1. Support client : Former le support aux nouveaux formats possibles
  2. Affichage : S'assurer que l'UI supporte bien l'UTF-8
  3. Recherche : La recherche d'utilisateurs doit gérer la casse et l'UTF-8
  4. Export : Vérifier que les exports CSV/Excel gèrent bien l'UTF-8

Sécurité

Pas d'impact sur la sécurité

  • Les usernames sont toujours chiffrés en base (AES-256-CBC)
  • L'unicité est toujours vérifiée
  • Les injections SQL sont impossibles (prepared statements)
  • Le trim empêche les espaces invisibles

Recommandations

  • Continuer à générer automatiquement des usernames simples (ASCII) pour éviter les problèmes
  • Mais permettre la saisie manuelle de tout format
  • Logger les usernames "exotiques" pour détecter d'éventuels abus

Tests

  • Script de test disponible : /tests/test_username_validation.php
  • Teste tous les cas limites et formats internationaux

Rollback si nécessaire

Si besoin de revenir en arrière :

  1. Restaurer l'ancienne validation dans UserController
  2. Les usernames UTF-8 existants continueront de fonctionner
  3. Seuls les nouveaux seront restreints

Conclusion

Cette approche ultra-souple aligne les usernames sur les standards modernes d'inclusivité et d'accessibilité, tout en maintenant la sécurité grâce au chiffrement et à la validation de l'unicité.