diff --git a/.gitignore b/.gitignore index 719f2d8..e13ab03 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ conf.php test* var/database* var/.htaccess +devToProd.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 7151262..6be31c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,16 @@ -## 1.1 (future) +## 2 (future) - support postfix-mysql (not plain text virtual file) - - admin panel page with statistic - - limit nb alias / email - javascript checkupgrade in admin page - - add second table in database (for domain/checkupdate/intervale cron) - - send email for advertisement action ? + +## 1.4 (2018-03-19) + + - Interface admin avec stats, top user, possibilité de nettoyer, blacklister... + +## 1.2 (2018-03-19) + + - Ne pas permettre la création d'un alias depuis un alias + - Limiter le nombre d'alias possible ## 1.0.1 (2014-01-06) diff --git a/conf-dist.php b/conf-dist.php index 8bf7807..9ecf496 100644 --- a/conf-dist.php +++ b/conf-dist.php @@ -87,4 +87,13 @@ define('MAINTENANCE_MODE', false); // No maintenance for this ip (admin ip) define('MAINTENANCE_IP', '10.0.0.1'); + +// Usage de password-hash https://php.net/manual/fr/function.password-hash.php +// Vous pouvez crtyper le mot de passe en ligne avec les outils : +// http://www.passwordtool.hu/php5-password-hash-generator +// https://php-password-hash-online-tool.herokuapp.com/password_hash (PASSWORD_DEFAULT, no auto-generated, no cost 10) +// Mot de passe par défaut "admin" : +define('ADMIN_PASSWORD', '$2y$10$BncfiLy8VEYtkLVIlL5Ar.TVPY9Q3KbllJrdHNuSU5WCRnKafWM5K'); + + ?> diff --git a/emailPoubelle.php b/emailPoubelle.php index 8de3060..9208da3 100644 --- a/emailPoubelle.php +++ b/emailPoubelle.php @@ -10,16 +10,11 @@ // Depend : Postifx (postmap command) php-pdo //----------------------------------------------------------- -// @todo -// form ergonomie -// sqlite -// disable time - ////////////////// // Init & check ////////////////// -define('VERSION', '1.0'); +define('VERSION', '1.4'); if (DEBUG) { error_reporting(E_ALL); diff --git a/emailPoubelleAdmin.php b/emailPoubelleAdmin.php new file mode 100644 index 0000000..394e55f --- /dev/null +++ b/emailPoubelleAdmin.php @@ -0,0 +1,173 @@ +Erreur : Mot de passe incorrect'; +} +if (empty($_SESSION['adminPasswordHash']) || $auth == false) { + echo '
+ + + +
'; +} + +// Test connexion, si c'est ok : +if ($auth==true) { + // Connect DB + try { + if (preg_match('/^sqlite/', DB)) { + $dbco = new PDO(DB); + } else { + $dbco = new PDO(DB, DBUSER, DBPASS); + } + $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } catch ( PDOException $e ) { + die('Connexion à la base '.$e->getMessage()); + } + if (isset($_POST['action'])) { + if ($_POST['action'] == 'DeleteEmail' && isset($_POST['email'])) { + DeleteEmail($_POST['email']); + } + if ($_POST['action'] == 'AddBlacklistEmail' && isset($_POST['email'])) { + AddBlacklistEmail($_POST['email']); + } + if ($_POST['action'] == 'DeleteAlias' && isset($_POST['id']) && isset($_POST['alias'])) { + DeleteAlias($_POST['id'], $_POST['alias']); + } + if ($_POST['action'] == 'DisableAlias' && isset($_POST['id']) && isset($_POST['alias'])) { + DisableAlias($_POST['id'], $_POST['alias'], $_POST['email']); + } + } + ?> + + Statistique :

'; + echo ''; + + echo '

User info

'; + echo '
+ + + +
'; + if (isset($_POST['email'])) { + $requestUtilisateur = $dbco->query("SELECT * FROM ".DBTABLEPREFIX."alias WHERE email='".$_POST['email']."' ORDER BY dateCreat DESC")->fetchAll() ; + echo '

Utilisateur '.$_POST['email'].' : '; + if (count($requestUtilisateur) != 0) { + echo 'sup'; + if (!BlacklistEmail($_POST['email'])) { + echo 'blk'; + } + } else { + echo 'N\'existe pas !'; + } + echo '

'; + echo '

'; + if (count($requestUtilisateur) != 0) { + echo ''; + echo ' + + + + + + '; + foreach ($requestUtilisateur as $utilisateur) { + echo ' + + + + + + '; + } + echo '
StatusAliasDateCreatDateExpirComment
'.$utilisateur['status'].''.$utilisateur['alias'].' +
+ sup'; + if ($utilisateur['status'] == 5) { + echo 'Suspendre'; + } + echo '
'.$utilisateur['dateCreat'].''.$utilisateur['dateExpir'].''.$utilisateur['comment'].'
'; + } + } + + echo '

Top user

'; + $recordActifs = $dbco->query("SELECT email, count(alias) calias FROM ".DBTABLEPREFIX."alias WHERE status=5 GROUP BY email ORDER BY calias DESC LIMIT 40")->fetchAll(); + echo ''; + echo ' + + + + '; + foreach ($recordActifs as $recordActif) { + echo ' + + + + '; + } + echo '
EmailNombre d\'aliasAction
'; + if (BlacklistEmail($recordActif['email'])) { + echo 'blk '; + } + echo $recordActif['email'].''.$recordActif['calias'].' + + sup'; + if (!BlacklistEmail($recordActif['email'])) { + echo 'blk'; + } + echo ' +
'; + +} + + + +?> diff --git a/lib/blk.png b/lib/blk.png new file mode 100644 index 0000000..d0eac5f Binary files /dev/null and b/lib/blk.png differ diff --git a/lib/ep_function.php b/lib/ep_function.php index 4a3eb3e..cb8bccf 100644 --- a/lib/ep_function.php +++ b/lib/ep_function.php @@ -4,6 +4,9 @@ // Function ////////////////// +// Status explication : +// 0=not verified - 3=disable - 5=active + // Verification des emails function VerifMXemail($email) { if (CHECKMX) { @@ -78,6 +81,32 @@ function AjouterAlias($status, $alias,$email, $life, $comment) { return $dbco->lastInsertId(); } +// delete email +function DeleteEmail($email) { + global $dbco; + if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."'")->fetchColumn() != 0) { + try { + $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE email = :email"); + $deletecmd->bindParam('email', $email, PDO::PARAM_STR); + $deletecmd->execute(); + echo '
l\'email '.$email.' a bien été supprimé avec tout ces alias.
'; + } catch ( PDOException $e ) { + echo "DB error : ", $e->getMessage(); + die(); + } + } else { + echo '
Erreur : email '.$email.' n\'a pas été supprimé.
'; + } + UpdateVirtualDB(); +} + +function AddBlacklistEmail($email) { + $contenu = '/^'.$email.'$/'; + $fichier = fopen(BLACKLIST, 'a'); + fwrite($fichier, $contenu."\n"); + fclose($fichier); + echo '
La mention '.$contenu.' a été ajouté au fichier de blackliste '.BLACKLIST.'
'; +} // delete alias function DeleteAlias($id, $alias_full) { global $dbco; diff --git a/lib/status0.png b/lib/status0.png new file mode 100644 index 0000000..12d374f Binary files /dev/null and b/lib/status0.png differ diff --git a/lib/status3.png b/lib/status3.png new file mode 100644 index 0000000..fb45fe6 Binary files /dev/null and b/lib/status3.png differ diff --git a/lib/status5.png b/lib/status5.png new file mode 100644 index 0000000..4cb5f4b Binary files /dev/null and b/lib/status5.png differ diff --git a/lib/sup.png b/lib/sup.png new file mode 100755 index 0000000..6fc4d3b Binary files /dev/null and b/lib/sup.png differ