Code secure_action.php
Depuis votre terminal, connectez-vous a votre Raspberry PI et rentrez la commande suivante pour créer le fichier secure_action.php.
sudo nano /var/www/html/secure_action.php
Copier le code suivant et coller le dans le fichier qui vient de s'ouvrir.
<?php
date_default_timezone_set('Europe/Paris');
// --- CONFIGURATION ---
const LOG_FILE = '/var/log/camera_status.log';
// --- DÉMARRAGE DE SESSION ET VÉRIFICATION ---
session_start();
// Le contrôle manuel n'est possible que si l'utilisateur a entré le PIN et que la session est active.
if (!isset($_SESSION['admin_logged_in']) && !isset($_SESSION['pin_ok'])) {
header('HTTP/1.0 401 Unauthorized');
die(json_encode(['status' => 'error', 'message' => 'Non autorisé. PIN requis.']));
}
// Optionnel: Supprimer la session pin_ok pour forcer une nouvelle saisie de PIN
unset($_SESSION['pin_ok']);
// --- VÉRIFICATION DES PARAMÈTRES REÇUS (CORRIGÉ: Utilise POST) ---
// Note: Si vous utilisez l'Option A, la variable 'action' sera disponible dans $_POST.
$action_received = isset($_POST['action']) ? strtolower(trim($_POST['action'])) : null;
// Vérifier l'action reçue (maintenant 'start' ou 'stop' si vous avez appliqué l'Option A dans index.php)
if (!in_array($action_received, ['start', 'stop'])) {
header('HTTP/1.0 400 Bad Request');
// Le message indique l'erreur côté client/transport.
die(json_encode(['status' => 'error', 'message' => 'Action invalide ou manquante dans la requête POST.']));
}
// Définir les variables pour l'exécution et la journalisation
$final_action_systemctl = $action_received;
$log_action_french = ($final_action_systemctl === 'start') ? 'DÉMARRÉE' : 'ARRÊTÉE';
$timestamp = date('Y-m-d H:i:s');
$log_message = '';
// --- LOGIQUE PRINCIPALE : EXÉCUTION DIRECTE DE LA COMMANDE ---
if ($final_action_systemctl === 'start') {
// Démarrer MotionEye
shell_exec('sudo /bin/systemctl start motioneye');
} else {
// Arrêter MotionEye
shell_exec('sudo /bin/systemctl stop motioneye');
}
$log_message = sprintf("[%s] [MANUAL] Caméra %s manuellement par l'interface web.", $timestamp, $log_action_french);
// --- JOURNALISATION ---
file_put_contents(LOG_FILE, $log_message . "\n", FILE_APPEND | LOCK_EX);
// --- RÉPONSE AU CLIENT ---
echo json_encode([
'status' => 'success',
'message' => 'Action ' . $log_action_french . ' lancée.',
'action' => $final_action_systemctl
]);
?>