Code secure_action.php

code pour créer secure_action.php

 

Deux possibilités pour créer le fichier.

Vous créez le fichier secure_action.php sur votre PC et transférez le via FTP

Ou depuis votre terminal, connectez-vous à votre Raspberry Pi et créez 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.

Ce fichier gère les actions manuelles (Marche/Arrêt) déclenchées depuis l'interface web après la saisie du code PIN.

 
<?php
session_start();
header('Content-Type: application/json');
$config = include('/var/www/html/data/.env.php');

// Vérification de la session
if (!isset($_SESSION['pin_ok']) || $_SESSION['pin_ok'] !== true) {
    die(json_encode(['status' => 'error', 'message' => 'Non autorisé.']));
}

$action = $_POST['action'] ?? '';

if (in_array($action, ['start', 'stop'])) {
    // Exécution de la commande
    shell_exec("sudo /bin/systemctl $action motioneye");
    
    $date = date('Y-m-d H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $msg_status = ($action === 'start') ? "Caméra DÉMARRÉE (ON)" : "Caméra ARRÊTÉE (OFF)";
    $sujet = "Action Manuelle";
    
    // Corps du mail avec le lien vers votre site
    $corps_mail = "La caméra a été mise sur " . strtoupper($action) . " manuellement via l'interface (IP: $ip).\n\n";
    $corps_mail .= "🏠 Accéder au site : http://motioneye.free.fr";
    
    // Corps du SMS (plus court)
    $corps_sms = "La caméra a été mise sur " . strtoupper($action) . " manuellement via l'interface (IP: $ip).";

    // 1. Log avec rotation
    $logEntry = "[$date] [MANUAL] $msg_status : Déclenché par IP $ip\n";
    file_put_contents($config['LOG_PATH'], $logEntry, FILE_APPEND | LOCK_EX);
    $lines = file($config['LOG_PATH']);
    if (count($lines) > 500) {
        file_put_contents($config['LOG_PATH'], implode("", array_slice($lines, -500)), LOCK_EX);
    }

    // 2. Notification EMAIL
    if (isset($config['MAIL_ENABLED']) && $config['MAIL_ENABLED'] === true) {
        $headers = "From: " . $config['MAIL_FROM'] . "\r\n";
        $headers .= "Reply-To: " . $config['MAIL_FROM'] . "\r\n";
        $headers .= "Content-Type: text/plain; charset=utf-8\r\n";
        $headers .= "X-Mailer: PHP/" . phpversion();
        @mail($config['MAIL_DEST'], $sujet, $corps_mail, $headers);
    }

    // 3. Notification SMS Free
    if (isset($config['FREE_SMS_ACTIVE']) && $config['FREE_SMS_ACTIVE'] === true) {
        $sms_text = urlencode($sujet . " : " . $corps_sms);
        $url = "https://smsapi.free-mobile.fr/sendmsg?user=" . $config['FREE_USER'] . "&pass=" . $config['FREE_PASS'] . "&msg=" . $sms_text;
        @file_get_contents($url);
    }

    echo json_encode(['status' => 'success', 'message' => 'Commande exécutée.']);
} else {
    echo json_encode(['status' => 'error', 'message' => 'Action invalide.']);
}

Important : Permissions du fichier de log

Si ce n'est pas déjà fait, assurez-vous que le fichier de log possède les droits d'écriture pour le serveur web :

 
sudo chmod 666 /var/log/camera_status.log
 
Fermer cette fenêtre