API réception alertes chute (SmartEye/YOLO), analyse IA (Gemini 2.5 Flash), gestion alertes avec escalade (watchdog), notifications Firebase, dashboard web, documentation MkDocs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.0 KiB
5.0 KiB
Documentation Authentification LucasApp
Réponses aux questions
1. Quel endpoint doit recevoir/vérifier ce mot de passe ?
Endpoint : https://lucas.unigest.fr/api/auth.php
Méthode : POST Content-Type : application/json
Corps de la requête :
{
"client_id": "Demo_01",
"password": "75a9d2db3919",
"fcm_token": "fheHxyPRQlS7..." (optionnel)
}
Réponse succès (200) :
{
"status": "success",
"message": "Authentification réussie",
"data": {
"token": "secret123",
"client_name": "Demo_01",
"senior_name": "Mamie Lucas",
"senior_nickname": "mamie",
"senior_photo": "photos/mamie.jpg",
"latitude": "42.1028",
"longitude": "9.5147",
"emergency_number": "15",
"contacts": [...],
"site_status": "active"
}
}
Réponses erreur :
- 400 : Identifiant ou mot de passe manquant
- 403 : Identifiant inconnu / Mot de passe incorrect / Compte non configuré
- 500 : Erreur serveur
2. Le mot de passe est-il haché côté serveur (bcrypt, SHA256) ou comparé en clair ?
Réponse : BCRYPT
- Le mot de passe est haché avec bcrypt (
password_hash($password, PASSWORD_BCRYPT)) - Le hash est stocké dans
database.jsonsous le champpassword_hash - La vérification utilise
password_verify($password, $password_hash) - Sécurité maximale : même si database.json est compromis, les mots de passe ne peuvent pas être déchiffrés
3. Le flux voulu : le serveur génère le mot de passe et le donne au client, ou le client le choisit et le serveur le stocke ?
Réponse : SERVEUR GÉNÈRE (recommandé)
Flux principal (production) :
- L'admin exécute
php generate_password.php Demo_01 - Le serveur génère un mot de passe aléatoire (12 caractères)
- Le serveur affiche le mot de passe en clair (une seule fois)
- L'admin le communique au client (QR code, SMS, email)
- Le client le saisit dans LucasApp
- L'app l'utilise pour s'authentifier via
/api/auth.php
Flux alternatif (si besoin) :
- L'admin peut définir un mot de passe personnalisé avec
php set_password.php Demo_01 MonMotDePasse - Utile si le client veut choisir son propre mot de passe
Intégration dans LucasApp
Étape 1 : Configuration initiale
Quand l'utilisateur ouvre le dialog "Configurer le compte" :
- Demander
client_id(ID du compte) - Demander
password(mot de passe fourni par l'admin)
Étape 2 : Authentification
Future<void> _authenticate() async {
final response = await http.post(
Uri.parse('https://lucas.unigest.fr/api/auth.php'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'client_id': _clientId,
'password': _clientPassword,
'fcm_token': await FirebaseMessaging.instance.getToken(),
}),
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
final token = data['data']['token'];
// Stocker le token + infos client dans SharedPreferences
await _prefs.setString('client_token', token);
await _prefs.setString('client_name', data['data']['client_name']);
await _prefs.setString('senior_name', data['data']['senior_name']);
// ... etc
} else {
// Erreur d'authentification
_showError('Identifiant ou mot de passe incorrect');
}
}
Étape 3 : Enregistrement FCM token
Le token FCM est automatiquement enregistré lors de l'authentification si vous le passez dans le corps de la requête.
Pas besoin d'appel séparé à /api/register — tout se fait en une seule requête.
Architecture complète
SmartEye (Jetson) → Lucas
- Endpoint :
/api.php - Auth :
client_id+token(en POST) - Usage : Upload image de détection de chute
- Inchangé — SmartEye continue d'utiliser le token directement
LucasApp (Flutter) → Lucas
- Endpoint :
/api/auth.php - Auth :
client_id+password(en JSON) - Usage : Authentification + récupération du token
- Nouveau — LucasApp utilise le mot de passe pour obtenir le token
Sécurité
- Mot de passe : stocké haché (bcrypt) dans database.json
- Token : stocké en clair (car utilisé par SmartEye en POST)
- Le mot de passe NE TRANSITE JAMAIS en clair sur le réseau (HTTPS obligatoire)
Commandes admin
Générer un mot de passe aléatoire
sudo -u www-data php /var/www/lucas/admin/generate_password.php Demo_01
Définir un mot de passe personnalisé
sudo -u www-data php /var/www/lucas/admin/set_password.php Demo_01 MonMotDePasse123
Vérifier les mots de passe configurés
grep -A 2 '"name":' /var/www/lucas/database.json | grep -E '"name"|password_hash'
Exemple de test curl
curl -X POST https://lucas.unigest.fr/api/auth.php \
-H "Content-Type: application/json" \
-d '{
"client_id": "Demo_01",
"password": "75a9d2db3919"
}'
Réponse attendue :
{
"status": "success",
"message": "Authentification réussie",
"data": {
"token": "secret123",
...
}
}