Files
Lucas/API_AUTH_DOC.md
Debian 24dbc7cd6a Initial commit — Serveur Lucas SmartEye
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>
2026-03-14 21:26:06 +01:00

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.json sous le champ password_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) :

  1. L'admin exécute php generate_password.php Demo_01
  2. Le serveur génère un mot de passe aléatoire (12 caractères)
  3. Le serveur affiche le mot de passe en clair (une seule fois)
  4. L'admin le communique au client (QR code, SMS, email)
  5. Le client le saisit dans LucasApp
  6. 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",
    ...
  }
}