Ajout du mécanisme SMS STOP pour bloquer les SMS. Mise en place de la configuration et repercussion sur les scripts d'envoi et de reception

This commit is contained in:
Pierre-Lin Bonnemaison 2015-09-22 16:04:41 +02:00
parent 111af61bf5
commit 7b8ff9fe7c
7 changed files with 240 additions and 2 deletions

View file

@ -131,9 +131,26 @@
$numbers[] = $contact['number'];
}
}
$smsStops = $db->getFromTableWhere('sms_stop');
foreach ($numbers as $number)
{
//Si les SMS STOP sont activés, on passe au numéro suivant si le numéro actuelle fait parti des SMS STOP
if (RASPISMS_SETTINGS_SMS_STOP)
{
foreach ($smsStops as $smsStop)
{
if (!($number == $smsStop['number']))
{
continue;
}
echo "Un SMS destiné au " . $number . " a été bloqué par SMS STOP\n";
continue(2); //On passe au numéro suivant !
}
}
echo " Envoi d'un SMS au " . $number . "\n";
//On ajoute le SMS aux SMS envoyés
//Pour plus de précision, on remet la date à jour en réinstanciant l'objet DateTime (et on reformatte la date, bien entendu)
@ -183,6 +200,8 @@
continue;
}
echo "Analyse du SMS " . $dir . "\n";
//On récupère la date du SMS à la seconde près grâce au nom du fichier (Cf. parseSMS.sh)
//Il faut mettre la date au format Y-m-d H:i:s
$date = substr($dir, 0, 4) . '-' . substr($dir, 4, 2) . '-' . substr($dir, 6, 2) . ' ' . substr($dir, 8, 2) . ':' . substr($dir, 10, 2) . ':' . substr($dir, 12, 2);
@ -217,6 +236,14 @@
$number = internalTools::parsePhone($number);
$text = $content_file[1];
//On gère les SMS STOP
if (trim($text) == 'STOP')
{
echo 'STOP SMS detected ' . $number;
$this->wlog('STOP SMS detected ' . $number);
$db->insertIntoTable('sms_stop', ['number' => $number]);
continue;
}
if (!$number)
{

View file

@ -30,7 +30,7 @@
/**
* Cette fonction permet de mettre à jour l'activation ou la désactivation du transfer des SMS
* @param $csrf : Le jeton CSRF
* @param string $_POST['transfer'] : Le nouveau transfer de l'utilisateur
* @param string $_POST['transfer'] : Le nouveau transfer
* @return void;
*/
public function changeTransfer($csrf)
@ -66,4 +66,44 @@
header('Location: ' . $this->generateUrl('settings'));
return true;
}
/**
* Cette fonction permet de mettre à jour l'activation ou la désactivation de SMS-STOP
* @param $csrf : Le jeton CSRF
* @param string $_POST['stop'] : Le nouveau stop
* @return void;
*/
public function changeSmsStop($csrf)
{
//On vérifie que le jeton csrf est bon
if (!internalTools::verifyCSRF($csrf))
{
$_SESSION['errormessage'] = 'Jeton CSRF invalide !';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
//Creation de l'object de base de données
global $db;
if (!isset($_POST['sms_stop']))
{
$_SESSION['errormessage'] = 'Vous devez renseigner un valeur';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
$stop = (int)$_POST['sms_stop'];
if (!$db->updateTableWhere('settings', ['value' => $stop], ['name' => 'sms_stop']))
{
$_SESSION['errormessage'] = 'Impossible de mettre les données à jour.';
header('Location: ' . $this->generateUrl('settings'));
return false;
}
$_SESSION['successmessage'] = 'Les données ont été mises à jour.';
header('Location: ' . $this->generateUrl('settings'));
return true;
}
}

49
controllers/smsstop.php Executable file
View file

@ -0,0 +1,49 @@
<?php
/**
* Page des SMS STOP
*/
class smsstop extends Controller
{
/**
* Cette fonction est appelée avant toute les autres :
* Elle vérifie que l'utilisateur est bien connecté
* @return void;
*/
public function before()
{
internalTools::verifyConnect();
}
/**
* Cette fonction est alias de showAll()
*/
public function byDefault()
{
$this->showAll();
}
/**
* Cette fonction retourne tous les numéros sous sms stop, sous forme d'un tableau permettant l'administration de ces numéros
* @param int $page : La page à consulter. Par défaut 0
* @return void;
*/
public function showAll($page = 0)
{
//Creation de l'object de base de données
global $db;
$page = (int)($page < 0 ? $page = 0 : $page);
$limit = 25;
$offset = $limit * $page;
//Récupération des sms-stop, par paquets de $limit, en ignorant les $offset premiers
$smsStops = $db->getFromTableWhere('sms_stop', [], false, true, $limit, $offset);
$this->render('smsstop/default', array(
'smsStops' => $smsStops,
'page' => $page,
'limit' => $limit,
'nbResults' => count($smsStops),
));
}
}