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:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Page de fonctions permettant d'identifier la légitimité d'un utilisateur.
|
||||
*/
|
||||
|
||||
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
|
||||
|
||||
/*
|
||||
* Fonction d'authentification des utilisateurs.
|
||||
* Elle récupère le couple identifiant/mot de passe renseigné par le visiteur sur la page d'accueil.
|
||||
* Elle compare ces information avec la ligne correspondante dans la base de donnée (en prenant l'adresse de courriel comme sélecteur).
|
||||
* Elle hache le mot de passe du formulaire et le compare à celui de l'entrée correspondante en base.
|
||||
*/
|
||||
function validationIdentifiants($pdo,$identifiant,$mdp){
|
||||
try {
|
||||
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
|
||||
|
||||
$prep = $pdo->prepare($req);
|
||||
$prep->bindValue(':identifiant', $identifiant);
|
||||
$prep->execute();
|
||||
|
||||
$result = $prep ->fetchAll(PDO::FETCH_ASSOC);
|
||||
$comptage = count($result);
|
||||
|
||||
}
|
||||
catch(PDOException $e) {
|
||||
die ("Erreur lors du traitement de la requête : " . $e->getMessage());
|
||||
}
|
||||
|
||||
if($comptage == 1){
|
||||
|
||||
/**
|
||||
* Les paramètres de la fonction crypt de $mot_de_passe_form sont composés du mot de passe issue du formulaire accueil ainsi que du sel.
|
||||
* Les signes dollars sont des séparateurs. $mot_de_passe_base[1]=6=SHA512. $mot_de_passe_base[2]=au sel du mot de passe contenu dans la base.
|
||||
* Les paramètres de sel sont issus du mot de passe haché contenu dans la base.
|
||||
* L'opération de vérification s'adapte ainsi automatiquement aux algoritmes utilisés par Dovecot lors du hachage du mot de passe utilisateur.
|
||||
*/
|
||||
$mot_de_passe_base=explode('$', $result['0']['mot_de_passe']);
|
||||
$mot_de_passe_form=crypt(trim("$mdp"), "$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$");
|
||||
|
||||
if ("$".$mot_de_passe_base[1]."$".$mot_de_passe_base[2]."$".$mot_de_passe_base[3]!=$mot_de_passe_form) {
|
||||
// Si le mot de passe renseigné n'est le bon, le visiteur est redirigé vers la page d'accueil avec un message explicatif
|
||||
header('Location: /pages/visiteurs/echec_auth.php');
|
||||
die();
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Page permettant la déconnexion d'un utilisateur authentifié.
|
||||
*/
|
||||
|
||||
// Récupération de la session
|
||||
session_start ();
|
||||
// Destruction des variables de la session
|
||||
session_unset ();
|
||||
// Destruction de la session
|
||||
session_destroy ();
|
||||
// Redirection de l'utilisateur vers la page d'authentifiaction
|
||||
header('location: /pages/visiteurs/formulaire_accueil.php?succes=1');
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Page de fonctions permettant la vérification des permission d'un utilisateur ou d'un visiteur.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fonction testant le niveau de privilège d'un utilisateur authentifié ou non.
|
||||
* Elle vérifie le privilège de l'utilisateur connecté et retourne la valeur adéquate.
|
||||
* Si un visiteur ou un utilisateur ne remplis pas la bonne condition, il est redirigé à la page d'accueil avec un message expllicatif.
|
||||
* Cette fonction devrait être appelée dans toute page de traitement.
|
||||
*/
|
||||
function testPrivileges(){
|
||||
if (isset($_SESSION['id_utilisateur']) && !empty($_SESSION['id_utilisateur']) && $_SESSION['privilege_utilisateur']=="administrateur") {
|
||||
return "administrateur";
|
||||
}
|
||||
elseif (isset($_SESSION['id_utilisateur']) && !empty($_SESSION['id_utilisateur']) && $_SESSION['privilege_utilisateur']=="utilisateur") {
|
||||
return "utilisateur";
|
||||
}
|
||||
else {
|
||||
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=2");
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user