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.']);
}
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