Support exclusif des mots de passe hachés avec la fonction crypt pour l'authentification des utilisateurs + adaptation du format des identifiants utilisateurs de "nom" en "nom@domaine" + ajout de la possibilité pour un administrateur de gérer les possessions des autres utilisateurs + ajout d'une confirmation pour la suppression d'un alias virtuel + nettoyage du code + ajout de commentaires au format PHPDoc + gestion de certaines exceptions du pilote PDO SQLite + suppression du fichier testObjet.php + suppression des fins de lignes vides sur tous les fichiers
@ -24,6 +26,13 @@ if (isset($_GET['erreur']) && !empty($_GET['erreur'])){
case 2:
case 2:
echo "<pclass=\"alias_virtuel_ajout_ko\">Erreur : aucun alias virtuel créé car une donnée est erronée ou manquante.</p>";
echo "<pclass=\"alias_virtuel_ajout_ko\">Erreur : aucun alias virtuel créé car une donnée est erronée ou manquante.</p>";
break;
break;
case 3:
echo "<pclass=\"alias_virtuel_ajout_ko\">Erreur : L'alias virtuel est déjà existant.</p>";
break;
case 4:
echo "<pclass=\"alias_virtuel_ajout_ko\">Erreur : La base SQLite n'est pas accessible en écriture. Il faut que la base et le répertoire <i>bdd</i> appartiennent à <i>www-data</i>.</p>";
* 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)
//$req = $pdo->query('SELECT * FROM postfix_alias_virtuels');
// Filtre des alias virtuels de l'utilisateur courant
// Filtre des alias virtuels de l'utilisateur courant
/*$reqDomaineDefaut = $pdo->query('SELECT domaine FROM postfix_domaines WHERE defaut=1 LIMIT 1');
$req = $pdo->query('SELECT * FROM postfix_alias_virtuels WHERE destination='."\"$_SESSION[pseudo_utilisateur]\"");
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)');
$liste_alias_virtuels = array();
$liste_alias_virtuels = array();
foreach ($req as $alias_virtuels_bdd => $alias_virtuels) {
foreach ($req as $alias_virtuels_bdd => $alias_virtuels) {
// Insertion de l'alias virtuel entré par l'utilisateur et lié avec son adresse
//foreach ($_GET as $id_alias_virtuel => $etat_alias_virtuel) {
$req='INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:alias_virtuel,:courriel,1)';
//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)';
// 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"
echo "</pre>";
if (!empty($_POST['prefix_alias'])) {
//echo afficheDomaineDefautPostfix($pdo);
$separateur_prefix_alias=".";
//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)');
// Permet de ne pas renvoyer le message "Notice: Undefined variable: separateur_prefix_alias" lors de lexécution du "bindValue" suivant
$req='INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:courriel,:alias_virtuel,1)';
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é
// 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) {
function modifEtatAliasVirtuelsPostfix($pdo) {
try {
try {
$compteModifs=0;
$compteModifs=0;
foreach ($_POST as $id_alias_virtuel => $etat_alias_virtuel) {
foreach ($_POST as $id_alias_virtuel => $etat_alias_virtuel) {
//echo "$id_alias_virtuel et $etat_alias_virtuel";
$req='UPDATE postfix_alias_virtuels SET active=:etat_alias_virtuel WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
//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)';
// 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) {
function supprAliasVirtuelsPostfix($pdo) {
try {
try {
//foreach ($_GET as $id_alias_virtuel => $etat_alias_virtuel) {
//$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)');
//echo "$id_alias_virtuel et $etat_alias_virtuel";
$req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
//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)';
//$req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND courriel=:pseudo_utilisateur||(SELECT domaine FROM postfix_domaines WHERE defaut=1)';
//$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)';
echo "><p>".$alias_virtuels['courriel']."</p><labelclass=\"input-label-supprimer-alias\"for=\"supprimer-alias-".$alias_virtuels['id']."\">Supprimer</label><inputtype=\"checkbox\"class=\"input-checkbox-supprimer-aliasvisuellement-cache\"id=\"supprimer-alias-".$alias_virtuels['id']."\"><aclass=\"confirmation-suppression\"href=\"/services/actions/supprAliasVirtuels.php?supprAliasVirtuel=".$alias_virtuels['id']."\">Confirmer la suppression</a></li>\n";
* Elle est appelée par la page d'identification lorsqu'un visiteur n'est pas parvenu à s'identifier.
* Elle ajoute à cette redirection un temps d'attente pour limiter la fréquence des tentatives ainsi qu'une variable dans l'URL permettant l'affichage d'un message d'explication sur la redirection.
* Page de traitement de l'identification d'un visiteur.
* Elle vérifie la présence des valeurs fournies par le formulaire de la page d'accueil et les passes à la fonction de validation.
* Si le visiteur a été authentifié, il devient un utilisateur et est redirigé vers la page d'administration centrale après ouverture de session (comportant ses informations et privilèges).
* Si le visiteur n'a pas été authentifié, il est redirigé vers la page d'accueil.