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>
This commit is contained in:
135
api/docs/USERNAME_VALIDATION_CHANGES.md
Normal file
135
api/docs/USERNAME_VALIDATION_CHANGES.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# 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é.
|
||||
Reference in New Issue
Block a user