Ajout du nom du site dans la barre de menu + affichage des liens menant vers les pages en fonction des privilèges + réorganisation de l'arborescence + limitation de l'accès à la page domaines.php aux seuls administrateurs

This commit is contained in:
ycharbi
2021-12-28 18:48:43 +01:00
parent 5dfc627b70
commit 7d7b47c69f
18 changed files with 53 additions and 36 deletions
+162
View File
@@ -0,0 +1,162 @@
<?php
/**
* Page de fonctions permettant la gestion des alias virtuels.
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
/**
* Fonction listant le préfixe de l'utilisateur courant.
*/
function retournePrefixeUtilisateurPostfix($pdo) {
try {
$req = 'SELECT prefixe FROM postfix_utilisateurs WHERE utilisateur=:utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':utilisateur',$_SESSION['pseudo_utilisateur']);
$sql->execute();
$prefixe_utilisateur=$sql->fetchAll();
return $prefixe_utilisateur[0]['prefixe'];
}
catch (\Exception $e) {
die ("Erreur de requête de selection des alias virtuels : ".$e->getMessage());
}
}
/**
* Fonction listant les alias virtuels.
*/
function listeAliasVirtuelsPostfix($pdo) {
try {
// Filtre des alias virtuels de l'utilisateur courant
$req = 'SELECT * FROM postfix_alias_virtuels WHERE destination=:destination';
$sql=$pdo->prepare($req);
$sql->bindValue(':destination',$_SESSION['pseudo_utilisateur']);
$sql->execute();
$liste_alias_virtuels = array();
foreach ($sql->fetchAll() as $alias_virtuels_bdd => $alias_virtuels) {
array_push($liste_alias_virtuels,$alias_virtuels);
}
return $liste_alias_virtuels;
}
catch (\Exception $e) {
die ("Erreur de requête de selection des alias virtuels : ".$e->getMessage());
}
}
/**
* Fonction d'ajout d'un alias virtuel.
*/
function ajoutAliasVirtuelsPostfix($pdo) {
try {
// Insertion de l'alias virtuel entré par l'utilisateur et lié avec son adresse
$req='INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:alias_virtuel,:courriel,1)';
$sql=$pdo->prepare($req);
$sql->bindValue(':courriel',$_SESSION['pseudo_utilisateur']);
$sql->bindValue(':alias_virtuel',retournePrefixeUtilisateurPostfix($pdo).$_POST['nom_alias']."@".$_POST['choix_domaine_alias']);
$sql->execute();
if($sql->rowCount() == 1){
return true;
}
else{
return false;
}
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite.
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="23000") {
// Code de retour envoyé par le pilote PDO SQLite signifiant que la contrainte "UNIQUE" du champ "courriel" de la table "postif_alias_virtuels" est violé. L'alias envoyé via le formulaire par l'utilisateur a déjà été renseigné
header ("Location: /pages/gestion/administration.php?page=alias&erreur=3");
die();
}
elseif ($code_retour[0]=="HY000") {
// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
header ("Location: /pages/gestion/administration.php?page=alias&erreur=4");
die();
}
else {
// En cas d'erreur non gérée, le script s'arrête avec un message d'erreur à destination de l'administrateur du serveur
die ("Erreur de requête d'ajout d'alias virtuel : ".$e->getMessage());
}
}
}
/**
* Fonction d'activation/désactivation d'un alias virtuel.
* Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des alias d'un utilisateur.
* Elle occasionnera peut-être des baisses de performance si un très grand nombre d'alias existe pour un utilisateur donné (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
*/
function modifEtatAliasVirtuelsPostfix($pdo) {
try {
$compteModifs=0;
foreach ($_POST as $id_alias_virtuel => $etat_alias_virtuel) {
$req='UPDATE postfix_alias_virtuels SET active=:etat_alias_virtuel WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':etat_alias_virtuel',$etat_alias_virtuel);
$sql->bindValue(':id_alias_virtuel',$id_alias_virtuel);
$sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']);
$sql->execute();
}
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite.
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="HY000") {
// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
header ("Location: /pages/gestion/administration.php?page=alias&erreur=4");
die();
}
else {
// En cas d'erreur non gérée, le script s'arrête avec un message d'erreur à destination de l'administrateur du serveur
die ("Erreur de requête de modification d'état pour les alias virtuels : ".$e->getMessage());
}
}
}
/**
* Fonction de suppression d'un alias virtuel.
*/
function supprAliasVirtuelsPostfix($pdo) {
try {
$req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':id_alias_virtuel',$_GET['supprAliasVirtuel']);
$sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']);
$sql->execute();
if($sql->rowCount() == 1){
return true;
}
else{
return false;
}
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite.
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="HY000") {
// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
header ("Location: /pages/gestion/administration.php?page=alias&erreur=4");
die();
}
else {
// En cas d'erreur non gérée, le script s'arrête avec un message d'erreur à destination de l'administrateur du serveur
die ("Erreur de requête de suppression d'un alias virtuel : ".$e->getMessage());
}
}
}
?>
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* Connexion à la base SQLite3.
*/
$base = "/etc/postfix/bdd/postfix.sqlite";
try{
$pdo = new PDO("sqlite:$base");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e){
die ("Erreur de connexion à la base \"$base\" : ".$e->getMessage());
}
?>
+43
View File
@@ -0,0 +1,43 @@
<?php
/**
* Page de fonctions concernant la gestion des domaines.
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
/**
* Fonction listant les domaines.
*/
function listeDomainesPostfix($pdo) {
try {
$req = 'SELECT domaine FROM postfix_domaines ORDER BY defaut DESC';
$sql=$pdo->prepare($req);
$sql->execute();
$liste_domaines = $sql->fetchAll();
return $liste_domaines;
}
catch (\Exception $e) {
die ("Erreur de requête de selection des domaines pour \"$base\" : ".$e->getMessage());
}
}
/**
* Fonction affichant le domaine par défaut.
*/
function retourneDomaineDefautPostfix($pdo) {
try {
$req = 'SELECT domaine FROM postfix_domaines WHERE defaut=1 LIMIT 1';
$sql=$pdo->prepare($req);
$sql->execute();
$domaine_defaut = $sql->fetchAll();
return $domaine_defaut[0]['domaine'];
}
catch (\Exception $e) {
die ("Erreur de requête de selection des domaines pour \"$base\" : ".$e->getMessage());
}
}
?>
+26
View File
@@ -0,0 +1,26 @@
<?php
/**
* Page de fonctions permettant la gestion des utilisateurs.
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
/**
* Fonction listant les utilisateurs.
*/
function listeUtilisateursPostfix($pdo) {
try {
$req = 'SELECT utilisateur FROM postfix_utilisateurs';
$sql=$pdo->prepare($req);
$sql->execute();
$liste_utilisateurs = $sql->fetchAll();
return $liste_utilisateurs;
}
catch (\Exception $e) {
die ("Erreur de requête de selection des utilisateurs pour \"$base\" : ".$e->getMessage());
}
}
?>