raspisms/controllers/webhooks.php

184 lines
5.0 KiB
PHP
Executable File

<?php
/**
* Page des webhooks
*/
class webhooks 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 retourne toutes les webhooks, sous forme d'un tableau permettant l'administration de ces webhooks
*/
public function byDefault()
{
//Creation de l'object de base de données
global $db;
//Recupération des webhooks
$webhooks = $db->getFromTableWhere('webhooks');
$this->render('webhooks/default', array(
'webhooks' => $webhooks,
));
}
/**
* Cette fonction va supprimer une liste de webhooks
* @param int... $ids : Les id des webhooks à supprimer
* @return boolean;
*/
public function delete($csrf)
{
if (!internalTools::verifyCSRF($csrf))
{
$_SESSION['errormessage'] = 'Jeton CSRF invalide !';
header('Location: ' . $this->generateUrl('webhooks'));
return false;
}
//On récupère les ids comme étant tous les arguments de la fonction et on supprime le premier (csrf)
$ids = func_get_args();
unset($ids[0]);
//Create de l'object de base de données
global $db;
$db->deleteWebhooksIn($ids);
header('Location: ' . $this->generateUrl('webhooks'));
return true;
}
/**
* Cette fonction retourne la page d'ajout d'un webhook
*/
public function add()
{
$this->render('webhooks/add');
}
/**
* Cette fonction retourne la page d'édition des webhook
* @param int... $ids : Les id des commandes à editer
*/
public function edit()
{
global $db;
$ids = func_get_args();
$webhooks = $db->getWebhooksIn($ids);
$this->render('webhooks/edit', array(
'webhooks' => $webhooks,
));
}
/**
* Cette fonction insert une nouvelle commande
* @param $csrf : Le jeton CSRF
* @param string $_POST['url'] : L'adresse url à laquelle on va envoyer la requête
* @param string $_POST['type'] : Le type de hook à ajouter
* @return boolean;
*/
public function create($csrf)
{
if (!internalTools::verifyCSRF($csrf))
{
$_SESSION['errormessage'] = 'Jeton CSRF invalide !';
header('Location: ' . $this->generateUrl('webhooks'));
return false;
}
global $db;
$url = $_POST['url'];
$type = $_POST['type'];
if (!$db->insertIntoTable('webhooks', ['url' => $url, 'type' => $type]))
{
$_SESSION['errormessage'] = 'Impossible créer ce webhook.';
header('Location: ' . $this->generateUrl('webhooks', 'add'));
return false;
}
$db->insertIntoTable('events', ['type' => 'WEBHOOK_ADD', 'text' => 'Ajout webhook : ' . array_search($type, internalConstants::WEBHOOK_TYPE) . ' (' . $url . ')']);
$_SESSION['successmessage'] = 'Le webhook a bien été créé.';
header('Location: ' . $this->generateUrl('webhooks'));
return true;
}
/**
* Cette fonction met à jour une liste de webhooks
* @param $csrf : Le jeton CSRF
* @param array $_POST['webhooks'] : Un tableau des webhooks avec leur nouvelle valeurs
* @return boolean;
*/
public function update($csrf)
{
if (!internalTools::verifyCSRF($csrf))
{
$_SESSION['errormessage'] = 'Jeton CSRF invalide !';
header('Location: ' . $this->generateUrl('webhooks'));
return false;
}
global $db;
$errors = array(); //On initialise le tableau qui contiendra les erreurs rencontrés
//Pour chaque webhook reçu, on boucle en récupérant son id (la clef), et le webhook lui-même (la value)
foreach ($_POST['webhooks'] as $id => $webhook)
{
$db->updateTableWhere('webhooks', $webhook, ['id' => $id]);
}
$_SESSION['successmessage'] = 'Tout les webhooks ont été modifiés avec succès.';
header('Location: ' . $this->generateUrl('webhooks'));
}
/**
* Cette méthode permet d'ajouter d'un coup toutes les requête d'un webhook à la queue des requête pour un type de webhook
* @param int $webhookType : Le type de webhook (une constante issue de internalConstants::WEBHOOK_TYPE)
* @param array $datas : Les données à envoyer avec la requête (si non définie, [])
* @return void
*/
public function _addWebhooksForType ($webhookType, $datas = [])
{
global $db;
$webhooks = $db->getFromTableWhere('webhooks', ['type' => $webhookType]);
foreach ($webhooks as $webhook)
{
$this->addWebhookQuery($webhook['url'], $datas);
}
}
/**
* Cette méthode est appelée pour ajouter une requête issue d'un webhook à la queue
* @param string $url : L'url à laquelle envoyer la requête
* @param array $datas : Les données à envoyer avec la requête (si non définie, [])
* @return boolean : true si on reussi à l'ajouter, false sinon
*/
private function addWebhookQuery ($url, $datas = [])
{
global $db;
if (!$db->insertIntoTable('webhook_queries', ['url' => $url, 'datas' => json_encode($datas)]))
{
return false;
}
return true;
}
}