From c4f930fb73c4667d8588ab45a330691464145cdd Mon Sep 17 00:00:00 2001 From: ycharbi Date: Mon, 27 Dec 2021 01:34:02 +0100 Subject: [PATCH] =?UTF-8?q?Support=20exclusif=20des=20mots=20de=20passe=20?= =?UTF-8?q?hach=C3=A9s=20avec=20la=20fonction=20crypt=20pour=20l'authentif?= =?UTF-8?q?ication=20des=20utilisateurs=20+=20adaptation=20du=20format=20d?= =?UTF-8?q?es=20identifiants=20utilisateurs=20de=20"nom"=20en=20"nom@domai?= =?UTF-8?q?ne"=20+=20ajout=20de=20la=20possibilit=C3=A9=20pour=20un=20admi?= =?UTF-8?q?nistrateur=20de=20g=C3=A9rer=20les=20possessions=20des=20autres?= =?UTF-8?q?=20utilisateurs=20+=20ajout=20d'une=20confirmation=20pour=20la?= =?UTF-8?q?=20suppression=20d'un=20alias=20virtuel=20+=20nettoyage=20du=20?= =?UTF-8?q?code=20+=20ajout=20de=20commentaires=20au=20format=20PHPDoc=20+?= =?UTF-8?q?=20gestion=20de=20certaines=20exceptions=20du=20pilote=20PDO=20?= =?UTF-8?q?SQLite=20+=20suppression=20du=20fichier=20testObjet.php=20+=20s?= =?UTF-8?q?uppression=20des=20fins=20de=20lignes=20vides=20sur=20tous=20le?= =?UTF-8?q?s=20fichiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- README.md | 2 +- fichiers/css/confirmation.css | 26 +++ fichiers/js/filtre.js | 14 ++ inclusions/barre_menu.php | 2 +- inclusions/entete.php | 3 +- inclusions/pied.php | 2 +- index.php | 9 +- outils/.htaccess | 2 +- outils/genenv.sh | 2 +- outils/rundocker.sh | 2 +- pages/formulaire_accueil.php | 9 +- pages/gestion/administration.php | 15 ++ pages/gestion/parametres.php | 7 +- pages/testObjet.php | 84 ------- services/actions/ajoutAliasVirtuels.php | 20 +- services/actions/changeUtilisateur.php | 22 ++ services/actions/editEtatAliasVirtuels.php | 5 + services/actions/supprAliasVirtuels.php | 5 + services/bdd/alias_virtuels.php | 207 +++++++++--------- services/bdd/connexion.php | 3 +- services/bdd/domaines.php | 15 +- services/bdd/utilisateurs.php | 9 +- services/gestion/alias.php | 165 ++++++-------- services/gestion/domaines.php | 7 +- services/gestion/listes_noires.php | 7 +- services/utilisateurs/authentification.php | 31 ++- services/utilisateurs/deconnexion.php | 5 +- services/utilisateurs/echec_auth.php | 9 +- .../utilisateurs/formChoixUtilisateur.php | 31 +++ services/utilisateurs/identification.php | 9 +- services/utilisateurs/privileges.php | 13 +- 32 files changed, 416 insertions(+), 328 deletions(-) create mode 100644 fichiers/css/confirmation.css delete mode 100644 pages/testObjet.php create mode 100644 services/actions/changeUtilisateur.php create mode 100644 services/utilisateurs/formChoixUtilisateur.php diff --git a/Dockerfile b/Dockerfile index a818e6f..859132c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,4 +10,4 @@ mv /var/www/html/outils/conf/apache2.conf /etc/apache2/ && \ chmod +x /var/www/html/outils/genenv.sh && \ /var/www/html/outils/genenv.sh -CMD /usr/sbin/apachectl -D FOREGROUND +CMD /usr/sbin/apachectl -D FOREGROUND \ No newline at end of file diff --git a/README.md b/README.md index 5a41748..05f7094 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,4 @@ Interface WEB d'administration pour le serveur de courriel : https://doc.ycharbi.fr/index.php/Serveur_de_courriels ## Dépendances du projet -`apt install --no-install-recommends sqlite3 php php-sqlite3 apache2 git` +`apt install --no-install-recommends sqlite3 php php-sqlite3 apache2 git` \ No newline at end of file diff --git a/fichiers/css/confirmation.css b/fichiers/css/confirmation.css new file mode 100644 index 0000000..3aec415 --- /dev/null +++ b/fichiers/css/confirmation.css @@ -0,0 +1,26 @@ +/* Style concernant la confirmation de suppression d'un alias virtuel */ +.confirmation-suppression { + display: none; + color: #e23026; +} +.input-checkbox-supprimer-alias:checked ~ .confirmation-suppression { + display: inline; +} + +.input-label-supprimer-alias { + color: #ffffff; + background: #e23026; + padding: 0.5rem 1rem; + border-radius: 0.5rem; +} + +.visuellement-cache { + position: absolute; + left: -100vw; +} + +/* Sources : + * https://stackoverflow.com/questions/6019845/show-hide-div-on-click-with-css + * https://dabblet.com/gist/1506530 + * https://css-tricks.com/the-checkbox-hack/ + */ \ No newline at end of file diff --git a/fichiers/js/filtre.js b/fichiers/js/filtre.js index 269062e..779818a 100644 --- a/fichiers/js/filtre.js +++ b/fichiers/js/filtre.js @@ -1,3 +1,10 @@ +/* + * Page de fonctions JavaScript afférentes aux filtres de chaînes de carractères. + **/ + +/* + * Fonction permettant de filtrer la liste des alias virtuels d'un utilisateur au file des caractères entrés dans le formulaire de création idoine. + **/ function filtreAliasVirtuels() { // Déclaration des variables var input, filter, ul, li, a, i, txtValue; @@ -18,3 +25,10 @@ function filtreAliasVirtuels() { } } } + +/* + * Fonction permettant de valider (soumettre le formulaire) le choix de l'utilisateur pour en administrer les possessions. + **/ +function autosubmit() { + document.getElementById("form_choix_utilisateur").submit(); +} \ No newline at end of file diff --git a/inclusions/barre_menu.php b/inclusions/barre_menu.php index 7f9fcfd..a76ec48 100644 --- a/inclusions/barre_menu.php +++ b/inclusions/barre_menu.php @@ -19,4 +19,4 @@ if (isset($_GET['message']) && !empty($_GET['message'])) { } } -?> +?> \ No newline at end of file diff --git a/inclusions/entete.php b/inclusions/entete.php index ab278cc..6918bdd 100644 --- a/inclusions/entete.php +++ b/inclusions/entete.php @@ -4,6 +4,7 @@ Courtail - Portail des courriels + - + \ No newline at end of file diff --git a/inclusions/pied.php b/inclusions/pied.php index 3e932e9..4c22ccf 100644 --- a/inclusions/pied.php +++ b/inclusions/pied.php @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/index.php b/index.php index fc4f14f..5424009 100644 --- a/index.php +++ b/index.php @@ -1,3 +1,10 @@ +?> \ No newline at end of file diff --git a/outils/.htaccess b/outils/.htaccess index bc3efc5..2978e40 100644 --- a/outils/.htaccess +++ b/outils/.htaccess @@ -1,4 +1,4 @@ Deny from all Options -Indexes - + \ No newline at end of file diff --git a/outils/genenv.sh b/outils/genenv.sh index c92ba4c..96b76be 100644 --- a/outils/genenv.sh +++ b/outils/genenv.sh @@ -9,4 +9,4 @@ rm -f /etc/postfix/db/postfix.sqlite sqlite3 /etc/postfix/db/postfix.sqlite < "${chemin_script}"/postfix.sql # Création des données -sqlite3 /etc/postfix/db/postfix.sqlite < "${chemin_script}"/données.sql +sqlite3 /etc/postfix/db/postfix.sqlite < "${chemin_script}"/données.sql \ No newline at end of file diff --git a/outils/rundocker.sh b/outils/rundocker.sh index dab684a..baac2fc 100755 --- a/outils/rundocker.sh +++ b/outils/rundocker.sh @@ -1,3 +1,3 @@ #!/bin/sh docker build -t courtail ../ -docker run -it -p 8080:80 courtail:latest +docker run -it -p 8080:80 courtail:latest \ No newline at end of file diff --git a/pages/formulaire_accueil.php b/pages/formulaire_accueil.php index 8ab3956..7dc1936 100644 --- a/pages/formulaire_accueil.php +++ b/pages/formulaire_accueil.php @@ -1,3 +1,8 @@ + +

@@ -5,7 +10,7 @@

- +
@@ -40,4 +45,4 @@ ?>
-
+ \ No newline at end of file diff --git a/pages/gestion/administration.php b/pages/gestion/administration.php index 21da11e..52c7807 100644 --- a/pages/gestion/administration.php +++ b/pages/gestion/administration.php @@ -2,7 +2,9 @@ /** * Page centrale de gestion des fonctionnalités du serveur de courriel. + * C'est de cette page qu'est appelé l'ensemble des fonctionnalités du portail. */ + session_start(); require_once($_SERVER["DOCUMENT_ROOT"]."/services/utilisateurs/privileges.php"); testPrivileges(); @@ -24,6 +26,13 @@ if (isset($_GET['erreur']) && !empty($_GET['erreur'])){ case 2: echo "

Erreur : aucun alias virtuel créé car une donnée est erronée ou manquante.

"; break; + case 3: + echo "

Erreur : L'alias virtuel est déjà existant.

"; + break; + case 4: + echo "

Erreur : La base SQLite n'est pas accessible en écriture. Il faut que la base et le répertoire bdd appartiennent à www-data.

"; + break; + } } elseif (isset($_GET['succes']) && !empty($_GET['succes'])){ @@ -37,9 +46,15 @@ elseif (isset($_GET['succes']) && !empty($_GET['succes'])){ case 3: echo "

Succès : alias virtuel créé avec succès.

"; break; + case 4: + echo "

Succès : utilisateur changé en ".$_SESSION['pseudo_utilisateur']." avec succès.

"; + break; } } +/** + * Permet d'importer les fonctions de la page demandée par l'utilisateur sur le portail d'administration. + */ if (isset($_GET['page']) && !empty($_GET['page'])) { switch ($_GET['page']) { case 'alias': diff --git a/pages/gestion/parametres.php b/pages/gestion/parametres.php index 74bb588..884ba78 100644 --- a/pages/gestion/parametres.php +++ b/pages/gestion/parametres.php @@ -1,4 +1,9 @@ + \ No newline at end of file diff --git a/pages/testObjet.php b/pages/testObjet.php deleted file mode 100644 index 2f59679..0000000 --- a/pages/testObjet.php +++ /dev/null @@ -1,84 +0,0 @@ -do_foo(); -$bar->yohan(); - -# classe -class Voiture -{ - /** - * Déclaration des attributs - */ - # attributs - private $niveau_carburant; - private $nombre_portes; - private $nombre_roues; - - /** - * Cette méthode un peu spéciale est le constructeur, elle est exécutée lorsque vous "créez" votre objet. Elle doit initialiser les attributs de la classe. - */ - # méthode constructeur - public function __construct() - { - $this->niveau_carburant = 50; - $this-> = 3; - $this->nombre_roues = 4; - } - - /** - * Première méthode accessible par tous et modifiant le niveau de carburant - */ - # méthode - public function modifier_carburant(int $niveau) - { - $this->niveau_carburant = $niveau; - } - - /** - * Seconde méthode accessible à tous et modifiant le nombre de portes - */ - # méthode - public function modifier_nb_portes(int $nb_portes) - { - $this->nombre_portes = $nb_portes; - } -} - -$voiture = new Voiture; -echo "
";
-var_dump($voiture);
-echo "
"; - -$voiture->modifier_nb_portes(4); - -echo "
";
-var_dump($voiture);
-echo "
"; - -echo $voiture['nombre_portes']; - -?> -# https://www.vulgarisation-informatique.com/php-poo.php diff --git a/services/actions/ajoutAliasVirtuels.php b/services/actions/ajoutAliasVirtuels.php index e2771a8..da04b21 100644 --- a/services/actions/ajoutAliasVirtuels.php +++ b/services/actions/ajoutAliasVirtuels.php @@ -1,26 +1,24 @@ "; -var_dump($_POST); -echo ""; - if (isset($_POST['prefix_alias']) && isset($_POST['nom_alias']) && isset($_POST['choix_domaine_alias']) && !empty($_POST['nom_alias']) && !empty($_POST['choix_domaine_alias'])) { ajoutAliasVirtuelsPostfix($pdo); header ("Location: /pages/gestion/administration.php?page=alias&succes=3"); + die(); } else { header ("Location: /pages/gestion/administration.php?page=alias&erreur=2"); + die(); } -/*if(ajoutAliasVirtuelsPostfix($pdo)) { - header ("Location: /pages/gestion/administration.php?page=alias&succes=1"); -} -else { - header ("Location: /pages/gestion/administration.php?page=alias&erreur=1"); -}*/ - ?> \ No newline at end of file diff --git a/services/actions/changeUtilisateur.php b/services/actions/changeUtilisateur.php new file mode 100644 index 0000000..3626e58 --- /dev/null +++ b/services/actions/changeUtilisateur.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/services/actions/editEtatAliasVirtuels.php b/services/actions/editEtatAliasVirtuels.php index 5bf0340..21f04db 100644 --- a/services/actions/editEtatAliasVirtuels.php +++ b/services/actions/editEtatAliasVirtuels.php @@ -1,4 +1,9 @@ query('SELECT * FROM postfix_alias_virtuels'); - // Filtre des alias virtuels de l'utilisateur courant - /*$reqDomaineDefaut = $pdo->query('SELECT domaine FROM postfix_domaines WHERE defaut=1 LIMIT 1'); - foreach ($reqDomaineDefaut as $cle => $domaineDefaut) { - $req = $pdo->query('SELECT * FROM postfix_alias_virtuels WHERE courriel='."\"$_SESSION[pseudo_utilisateur]".'@'."$domaineDefaut[domaine]\""); - }*/ - $req = $pdo->query('SELECT * FROM postfix_alias_virtuels WHERE courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'); + $req = $pdo->query('SELECT * FROM postfix_alias_virtuels WHERE destination='."\"$_SESSION[pseudo_utilisateur]\""); $liste_alias_virtuels = array(); foreach ($req as $alias_virtuels_bdd => $alias_virtuels) { array_push($liste_alias_virtuels,$alias_virtuels); @@ -23,127 +25,126 @@ function listeAliasVirtuelsPostfix($pdo) { } } +/** + * Fonction d'ajout d'un alias virtuel. + */ function ajoutAliasVirtuelsPostfix($pdo) { try { - require_once ($_SERVER["DOCUMENT_ROOT"]."/services/bdd/domaines.php"); - //foreach ($_GET as $id_alias_virtuel => $etat_alias_virtuel) { - //echo "$id_alias_virtuel et $etat_alias_virtuel"; - //echo 'UPDATE postfix_alias_virtuels SET active='."$etat_alias_virtuel".' WHERE id='."$id_alias_virtuel".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'; - //die(); - echo "
";
-			var_dump($_POST);
-			echo "
"; - //echo afficheDomaineDefautPostfix($pdo); - //die(); - //$req = $pdo->query('DELETE FROM postfix_alias_virtuels WHERE id='."$_GET[supprAliasVirtuel]".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'); - $req='INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:courriel,:alias_virtuel,1)'; - $sql=$pdo->prepare($req); - //$sql->bindParam(':id',$_GET['supprAliasVirtuel'],':pseudo_utilisateur',$_SESSION['pseudo_utilisateur]',':@','@'); - - //Vérifier que l'utilisateur choisi dans la liste est un choix légitime. - $sql->bindValue(':courriel',$_SESSION['pseudo_utilisateur']."@".afficheDomaineDefautPostfix($pdo)); - ////$sql->bindValue(':courriel',"toto@toto.fr"); - if (!empty($_POST['prefix_alias'])) { - $separateur_prefix_alias="."; - } - $sql->bindValue(':alias_virtuel',$_POST['prefix_alias'].$separateur_prefix_alias.$_POST['nom_alias']."@".$_POST['choix_domaine_alias']); - ////$sql->bindValue(':alias_virtuel',"y.charbi@toto.fr"); - //$sql->bindValue(':@','@'); - $sql->execute(); - if($sql->rowCount() == 1){ - return true; - } - /*if($sql->execute()){ - echo "Successfully deleted record "; - echo "

Number of rows deleted : ".$sql->rowCount(); - }*/ - else{ - return false; - } - //} - //die(); - - /*/$liste_alias_virtuels = array(); - foreach ($req as $alias_virtuels_bdd => $alias_virtuels) { - array_push($liste_alias_virtuels,$alias_virtuels); - }*/ + // 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']); + + // Si l'utilisateur spécifie un préfixe à son alias, un "." est ajouté pour lé séparé du reste afin d'avoir "préfixe.alias@NdD" + if (!empty($_POST['prefix_alias'])) { + $separateur_prefix_alias="."; + } + // Permet de ne pas renvoyer le message "Notice: Undefined variable: separateur_prefix_alias" lors de lexécution du "bindValue" suivant + else { + $separateur_prefix_alias=""; + } + + $sql->bindValue(':alias_virtuel',$_POST['prefix_alias'].$separateur_prefix_alias.$_POST['nom_alias']."@".$_POST['choix_domaine_alias']); + $sql->execute(); + + if($sql->rowCount() == 1){ + return true; + } + + else{ + return false; + } } catch (\Exception $e) { - die ("Erreur de requête d'ajout d'alias virtuel : ".$e->getMessage()); + // 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()); + } } } - -//Tester les injections SQL +/** + * 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) { - //echo "$id_alias_virtuel et $etat_alias_virtuel"; - //echo 'UPDATE postfix_alias_virtuels SET active='."$etat_alias_virtuel".' WHERE id='."$id_alias_virtuel".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'; - //die(); - - //$req = $pdo->query('UPDATE postfix_alias_virtuels SET active='."$etat_alias_virtuel".' WHERE id='."$id_alias_virtuel".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'); - $req='UPDATE postfix_alias_virtuels SET active=:etat_alias_virtuel WHERE id=:id_alias_virtuel AND courriel=:pseudo_utilisateur||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'; + $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->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']); $sql->execute(); - /*return true; - die(); - } - else{ - return false; - }*/ } - //die(); - - /*/$liste_alias_virtuels = array(); - foreach ($req as $alias_virtuels_bdd => $alias_virtuels) { - array_push($liste_alias_virtuels,$alias_virtuels); - }*/ } catch (\Exception $e) { - die ("Erreur de requête de modification d'état pour les alias virtuels : ".$e->getMessage()); + // 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 { - //foreach ($_GET as $id_alias_virtuel => $etat_alias_virtuel) { - //echo "$id_alias_virtuel et $etat_alias_virtuel"; - //echo 'UPDATE postfix_alias_virtuels SET active='."$etat_alias_virtuel".' WHERE id='."$id_alias_virtuel".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'; - //die(); - echo $_GET['supprAliasVirtuel']; - //$req = $pdo->query('DELETE FROM postfix_alias_virtuels WHERE id='."$_GET[supprAliasVirtuel]".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'); - $req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND courriel=:pseudo_utilisateur||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'; - $sql=$pdo->prepare($req); - //$sql->bindParam(':id',$_GET['supprAliasVirtuel'],':pseudo_utilisateur',$_SESSION['pseudo_utilisateur]',':@','@'); - $sql->bindValue(':id_alias_virtuel',$_GET['supprAliasVirtuel']); - $sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']."@"); - //$sql->bindValue(':@','@'); - $sql->execute(); - if($sql->rowCount() == 1){ - return true; - } - /*if($sql->execute()){ - echo "Successfully deleted record "; - echo "

Number of rows deleted : ".$sql->rowCount(); - }*/ - else{ - return false; - } - //} - //die(); - - /*/$liste_alias_virtuels = array(); - foreach ($req as $alias_virtuels_bdd => $alias_virtuels) { - array_push($liste_alias_virtuels,$alias_virtuels); - }*/ + //$req = $pdo->query('DELETE FROM postfix_alias_virtuels WHERE id='."$_GET[supprAliasVirtuel]".' AND courriel='."\"$_SESSION[pseudo_utilisateur]".'@"'.'||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'); + $req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur'; + //$req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND courriel=:pseudo_utilisateur||(SELECT domaine FROM postfix_domaines WHERE defaut=1)'; + $sql=$pdo->prepare($req); + //$sql->bindParam(':id',$_GET['supprAliasVirtuel'],':pseudo_utilisateur',$_SESSION['pseudo_utilisateur]',':@','@'); + $sql->bindValue(':id_alias_virtuel',$_GET['supprAliasVirtuel']); + //$sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']."@"); + $sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']); + $sql->execute(); + if($sql->rowCount() == 1){ + return true; + } + else{ + return false; + } } catch (\Exception $e) { - die ("Erreur de requête de modification d'état pour les alias virtuels : ".$e->getMessage()); + // 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()); + } } } diff --git a/services/bdd/connexion.php b/services/bdd/connexion.php index 9ab4200..9f7e961 100644 --- a/services/bdd/connexion.php +++ b/services/bdd/connexion.php @@ -3,7 +3,8 @@ /** * Connexion à la base SQLite3. */ -$base = "/etc/postfix/db/postfix.sqlite"; + +$base = "/etc/postfix/bdd/postfix.sqlite"; try{ $pdo = new PDO("sqlite:$base"); diff --git a/services/bdd/domaines.php b/services/bdd/domaines.php index 12709f4..8209883 100644 --- a/services/bdd/domaines.php +++ b/services/bdd/domaines.php @@ -1,7 +1,14 @@ query('SELECT domaine FROM postfix_domaines ORDER BY defaut DESC'); @@ -9,7 +16,6 @@ function listeDomainesPostfix($pdo) { foreach ($req as $domaine_bdd => $domaine) { array_push($liste_domaines,$domaine); } - //return array_reverse($liste_domaines); return $liste_domaines; } catch (\Exception $e) { @@ -17,13 +23,14 @@ function listeDomainesPostfix($pdo) { } } +/** + * Fonction affichant le domaine par défaut. + */ function afficheDomaineDefautPostfix($pdo) { try { $req = $pdo->query('SELECT domaine FROM postfix_domaines WHERE defaut=1 LIMIT 1'); foreach ($req as $domaine_bdd => $domaine_defaut) { - //echo $domaine_defaut['domaine']; } - //return array_reverse($liste_domaines); return $domaine_defaut['domaine']; } catch (\Exception $e) { @@ -32,4 +39,4 @@ function afficheDomaineDefautPostfix($pdo) { } -?> +?> \ No newline at end of file diff --git a/services/bdd/utilisateurs.php b/services/bdd/utilisateurs.php index fcfc942..0f88841 100644 --- a/services/bdd/utilisateurs.php +++ b/services/bdd/utilisateurs.php @@ -1,7 +1,14 @@ query('SELECT utilisateur FROM postfix_utilisateurs'); @@ -16,4 +23,4 @@ function listeUtilisateursPostfix($pdo) { } } -?> +?> \ No newline at end of file diff --git a/services/gestion/alias.php b/services/gestion/alias.php index 4ecd547..355adb8 100644 --- a/services/gestion/alias.php +++ b/services/gestion/alias.php @@ -1,117 +1,84 @@ -
- -
-

Choix du domaines

- - + + + + + -

Alias de

- -
-
    - $alias_virtuels) { - /*echo "
    ";
    -			var_dump($alias_virtuels);
    -			echo "
    ";*/ - - //echo "
  • ".$alias_virtuels['destination']."

    Supprimer
  • \n"; - - //echo "

    ".$alias_virtuels['destination']."Supprimer

    \n"; +

    Alias de

    + +
    +
      + $alias_virtuels) { + echo "
    • ".$alias_virtuels['courriel']."

      Confirmer la suppression
    • \n"; + } } - } - catch (\Exception $e) { - die ("Erreur de requête de selection utilisateurs pour \"$base\" : ".$e->getMessage()); - } - - ?> -
    - -
    - - + catch (\Exception $e) { + die ("Erreur de requête de selection utilisateurs pour \"$base\" : ".$e->getMessage()); + } + + ?> +
+ + + +
\ No newline at end of file diff --git a/services/gestion/domaines.php b/services/gestion/domaines.php index 3340a62..53a29e3 100644 --- a/services/gestion/domaines.php +++ b/services/gestion/domaines.php @@ -1,4 +1,9 @@ + \ No newline at end of file diff --git a/services/gestion/listes_noires.php b/services/gestion/listes_noires.php index 3340a62..5145c84 100644 --- a/services/gestion/listes_noires.php +++ b/services/gestion/listes_noires.php @@ -1,4 +1,9 @@ + \ No newline at end of file diff --git a/services/utilisateurs/authentification.php b/services/utilisateurs/authentification.php index c040876..09bc909 100644 --- a/services/utilisateurs/authentification.php +++ b/services/utilisateurs/authentification.php @@ -1,16 +1,23 @@ prepare($req); $prep->bindValue(':identifiant', $identifiant); - $prep->bindValue(':mdp', $mdp); $prep->execute(); $result = $prep ->fetchAll(PDO::FETCH_ASSOC); @@ -22,10 +29,26 @@ function validationIdentifiants($pdo,$identifiant,$mdp){ } 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: /services/utilisateurs/echec_auth.php'); + die(); + } + return $result; } else return false; } -?> +?> \ No newline at end of file diff --git a/services/utilisateurs/deconnexion.php b/services/utilisateurs/deconnexion.php index 2305a1c..f549841 100644 --- a/services/utilisateurs/deconnexion.php +++ b/services/utilisateurs/deconnexion.php @@ -1,8 +1,9 @@ +?> \ No newline at end of file diff --git a/services/utilisateurs/echec_auth.php b/services/utilisateurs/echec_auth.php index 9468673..97f00a2 100644 --- a/services/utilisateurs/echec_auth.php +++ b/services/utilisateurs/echec_auth.php @@ -1,4 +1,11 @@ @@ -255,4 +262,4 @@ header ("Refresh: 5;URL=/pages/formulaire_accueil.php?erreur=1");
- + \ No newline at end of file diff --git a/services/utilisateurs/formChoixUtilisateur.php b/services/utilisateurs/formChoixUtilisateur.php new file mode 100644 index 0000000..1c8f33d --- /dev/null +++ b/services/utilisateurs/formChoixUtilisateur.php @@ -0,0 +1,31 @@ +
+
+
+

Choix de l'adresse

+ +
+
+
\ No newline at end of file diff --git a/services/utilisateurs/identification.php b/services/utilisateurs/identification.php index 2a1f6a9..f92e4a8 100644 --- a/services/utilisateurs/identification.php +++ b/services/utilisateurs/identification.php @@ -1,5 +1,12 @@ +?> \ No newline at end of file