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>
This commit is contained in:
Debian
2026-03-14 21:26:06 +01:00
commit 24dbc7cd6a
64 changed files with 9677 additions and 0 deletions

94
api/auth.php Normal file
View File

@@ -0,0 +1,94 @@
<?php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");
/**
* ENDPOINT D'AUTHENTIFICATION LUCASAPP
*
* Reçoit : client_id, password, fcm_token (optionnel)
* Retourne : token, infos client si authentification OK
*/
// --- 1. CHARGEMENT BASE DE DONNÉES ---
$json_file = '../database.json';
if (!file_exists($json_file)) {
http_response_code(500);
die(json_encode(["status" => "error", "message" => "Base de données introuvable"]));
}
$db = json_decode(file_get_contents($json_file), true);
// --- 2. RÉCEPTION DONNÉES ---
$input = json_decode(file_get_contents('php://input'), true);
$client_id = $input['client_id'] ?? '';
$password = $input['password'] ?? '';
$fcm_token = $input['fcm_token'] ?? null;
if (empty($client_id) || empty($password)) {
http_response_code(400);
die(json_encode(["status" => "error", "message" => "Identifiant et mot de passe requis"]));
}
// --- 3. RECHERCHE CLIENT ---
$client_index = -1;
$current_client = null;
if (isset($db['clients'])) {
foreach ($db['clients'] as $index => $c) {
if (strcasecmp($c['name'], $client_id) == 0) {
$client_index = $index;
$current_client = $c;
break;
}
}
}
if ($client_index === -1) {
http_response_code(403);
die(json_encode(["status" => "error", "message" => "Identifiant inconnu"]));
}
// --- 4. VÉRIFICATION MOT DE PASSE ---
$password_hash = $current_client['password_hash'] ?? null;
if ($password_hash === null) {
http_response_code(403);
die(json_encode(["status" => "error", "message" => "Compte non configuré. Contactez l'administrateur."]));
}
if (!password_verify($password, $password_hash)) {
http_response_code(403);
die(json_encode(["status" => "error", "message" => "Mot de passe incorrect"]));
}
// --- 5. ENREGISTREMENT FCM TOKEN (si fourni) ---
if ($fcm_token !== null) {
if (!isset($current_client['fcm_tokens'])) {
$current_client['fcm_tokens'] = [];
}
// Ajouter le token s'il n'existe pas déjà
if (!in_array($fcm_token, $current_client['fcm_tokens'])) {
$current_client['fcm_tokens'][] = $fcm_token;
$db['clients'][$client_index]['fcm_tokens'] = $current_client['fcm_tokens'];
file_put_contents($json_file, json_encode($db, JSON_PRETTY_PRINT));
}
}
// --- 6. RÉPONSE SUCCÈS ---
echo json_encode([
"status" => "success",
"message" => "Authentification réussie",
"data" => [
"token" => $current_client['token'],
"client_name" => $current_client['name'],
"senior_name" => $current_client['senior_name'] ?? '',
"senior_nickname" => $current_client['senior_nickname'] ?? '',
"senior_photo" => $current_client['senior_photo'] ?? '',
"latitude" => $current_client['latitude'] ?? '',
"longitude" => $current_client['longitude'] ?? '',
"emergency_number" => $current_client['emergency_number'] ?? '15',
"contacts" => $current_client['contacts'] ?? [],
"site_status" => $current_client['site_status'] ?? 'provisioned'
]
]);
?>