✨ 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>
135 lines
4.4 KiB
Markdown
135 lines
4.4 KiB
Markdown
# 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)
|
|
```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
|
|
```sql
|
|
-- 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é. |