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
]);
?>