1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/emailpoubelle_ynh.git synced 2024-09-03 18:26:29 +02:00

Pas très loin de la fin de la 1.0

This commit is contained in:
David 2013-11-19 16:51:59 +01:00
parent 231a965813
commit 47c6d2410d
6 changed files with 114 additions and 26 deletions

1
.gitignore vendored
View file

@ -4,3 +4,4 @@ virtual.db
checkupdate checkupdate
conf.php conf.php
test* test*
var/database.sdb

48
CHANGELOG.md Normal file
View file

@ -0,0 +1,48 @@
## 1.1 (future)
- support postfix-mysql (not plain text virtual file)
- admin panel page with statistic
- add second table in database (for domain/checkupdate/intervale cron)
- send email for advertisement action ?
## 1.0 (2013-10-02)
Features:
- add database with PDO (remove plain text)
support mysql, sqlite, postgresql...
- add multi-domain support
- add memory email (with cookies)
- add life for alias (optional)
- add comment for alias (optional)
- add template for example
- add javascript in form (noscript compatible)
- add cron for expir life email
- add maintenance mode
- add basic form anti-spam
- add disable/enable alias function
- pass UTF-8 encode
## 0.3 (2013-08-08) (without database)
- add blacklist.txt regex
- add function "alias list"
- add shell statistique script
- add readme
## 0.2 (2012-08-05)
Features:
- add aliasdeny.txt regex
- migrate to Net_DNS2
- check email exist with DNS (check MX)
Bugfixes:
- fixe http://forge.zici.fr/p/emailpoubelle-php/issues/4/
## 0.1b (2012-03-20)
- start project

View file

@ -1,6 +1,8 @@
#!/usr/bin/php #!/usr/bin/php
<?php <?php
include('./conf.php'); include('../conf.php');
# pour migrer du plain-text vers la base de donnée
// Connect DB // Connect DB
try { try {
@ -15,7 +17,7 @@ try {
} }
// postmap command // postmap command
function UpdateVirtualDB() { function UpdateVirtualDB_migrateTo10() {
global $dbco; global $dbco;
try { try {
$selectcmd = $dbco->prepare("SELECT alias, email $selectcmd = $dbco->prepare("SELECT alias, email
@ -39,7 +41,7 @@ function UpdateVirtualDB() {
// add new alias // add new alias
function AjouterAlias($status, $alias,$email, $life, $comment) { function AjouterAlias_migrateTo10($status, $alias,$email, $life, $comment) {
global $dbco; global $dbco;
$dateCreat=date('Y-m-d H:i:s', 0); $dateCreat=date('Y-m-d H:i:s', 0);
$dateExpir=NULL; $dateExpir=NULL;
@ -67,12 +69,12 @@ while (!feof($handle)) {
$bufferExplode = explode(' ', $buffer); $bufferExplode = explode(' ', $buffer);
if (!preg_match('/^(#|$|;)/', $buffer)) { if (!preg_match('/^(#|$|;)/', $buffer)) {
echo $bufferExplode[0].' -> '.$bufferExplode[1]."\n"; echo $bufferExplode[0].' -> '.$bufferExplode[1]."\n";
AjouterAlias(5, trim($bufferExplode[0]), trim($bufferExplode[1]), null, null); AjouterAlias_migrateTo10(5, trim($bufferExplode[0]), trim($bufferExplode[1]), null, null);
} }
} }
} }
fclose($handle); fclose($handle);
UpdateVirtualDB(); UpdateVirtualDB_migrateTo10();
?> ?>

View file

@ -65,8 +65,18 @@ try {
} }
// Create DB if not exists // Create DB if not exists
try { try {
// status : 0=not verified - 3=disable - 5=active // status : 0=not verified - 3=disable - 5=active
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias ( if (preg_match('/^sqlite/', DB)) {
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias (
id INTEGER PRIMARY KEY,
status INTEGER(1) NOT NULL,
alias CHAR(150) NOT NULL UNIQUE,
email CHAR(150) NOT NULL,
dateCreat DATETIME NOT NULL,
dateExpir DATETIME,
comment TEXT);");
} else {
$create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias (
id INTEGER PRIMARY KEY AUTO_INCREMENT, id INTEGER PRIMARY KEY AUTO_INCREMENT,
status INTEGER(1) NOT NULL, status INTEGER(1) NOT NULL,
alias CHAR(150) NOT NULL UNIQUE, alias CHAR(150) NOT NULL UNIQUE,
@ -74,6 +84,7 @@ $create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias (
dateCreat DATETIME NOT NULL, dateCreat DATETIME NOT NULL,
dateExpir DATETIME, dateExpir DATETIME,
comment TEXT);"); comment TEXT);");
}
} catch ( PDOException $e ) { } catch ( PDOException $e ) {
echo '<div class="highlight-1">Erreur à l\'initialisation des tables. Merci de contacter l\'administrateur '; echo '<div class="highlight-1">Erreur à l\'initialisation des tables. Merci de contacter l\'administrateur ';
if (DEBUG) { $e->getMessage(); } if (DEBUG) { $e->getMessage(); }
@ -85,12 +96,11 @@ $create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias (
// Start program // Start program
////////////////// //////////////////
// get process act // get process "act" (action)
$action = isset($_GET['act']) ? $_GET['act'] : ''; $action = isset($_GET['act']) ? $_GET['act'] : '';
switch ($action) { switch ($action) {
case "validemail" : case "validemail" :
$get_value = urlUnGen($_GET['value']); $get_value = urlUnGen($_GET['value']);
echo $dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$get_value['id']."' AND status = 0")->fetchColumn();
if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$get_value['id']."' AND status = 0")->fetchColumn() != 0) { if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$get_value['id']."' AND status = 0")->fetchColumn() != 0) {
UpdateStatusAlias($get_value['id'], $get_value['alias_full'], 5); UpdateStatusAlias($get_value['id'], $get_value['alias_full'], 5);
echo '<div class="highlight-3">Votre email poubelle <b>'.$get_value['alias_full'].'</b> est maintenant actif</div>'; echo '<div class="highlight-3">Votre email poubelle <b>'.$get_value['alias_full'].'</b> est maintenant actif</div>';
@ -123,7 +133,7 @@ switch ($action) {
if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spam if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spam
echo 'Hello you'; echo 'Hello you';
} else if (isset($_POST['list'])) { } else if (isset($_POST['list'])) {
$email=strtolower($_POST['email']); $email=strtolower(StripCleanToHtml($_POST['email']));
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>'; echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>';
} else if (! VerifMXemail($email)) { } else if (! VerifMXemail($email)) {
@ -134,11 +144,11 @@ if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spa
echo '<div class="highlight-1">Erreur : aucun email actif connu</div>'; echo '<div class="highlight-1">Erreur : aucun email actif connu</div>';
} }
} else if (isset($_POST['email']) && isset($_POST['alias'])) { } else if (isset($_POST['email']) && isset($_POST['alias'])) {
$alias=strtolower($_POST['alias']); $alias=strtolower(StripCleanToHtml($_POST['alias']));
$email=strtolower($_POST['email']); $email=strtolower(StripCleanToHtml($_POST['email']));
$domain=$_POST['domain']; $domain=StripCleanToHtml($_POST['domain']);
$life=$_POST['life']; $life=$_POST['life'];
$comment=$_POST['comment']; $comment=StripCleanToHtml($_POST['comment']);
$alias_full=$alias.'@'.$domain; $alias_full=$alias.'@'.$domain;
// Check form // Check form
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
@ -167,8 +177,9 @@ if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spa
$message= $alias_full.' => '.$email."\n"; $message= $alias_full.' => '.$email."\n";
$message= "Cliquer sur le lien ci-dessous pour confirmer : \n"; $message= "Cliquer sur le lien ci-dessous pour confirmer : \n";
$message.= "\t * ".urlGen('validemail',$lastId,$alias_full)."\n"; $message.= "\t * ".urlGen('validemail',$lastId,$alias_full)."\n";
$message.= "\n";
$message.= "Pour supprimer cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n"; $message.= "Pour supprimer cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n";
$message.= "\t * ".urlGen('del',$lastId,$alias_full)."\n"; $message.= "\t * ".urlGen('delete',$lastId,$alias_full)."\n";
$message.= "\n"; $message.= "\n";
$message.= "Après confirmation, vous pourez suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n"; $message.= "Après confirmation, vous pourez suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n";
$message.= "\t * ".urlGen('disable',$lastId,$alias_full)."\n"; $message.= "\t * ".urlGen('disable',$lastId,$alias_full)."\n";
@ -182,7 +193,7 @@ if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spa
$message= "Confirmation de la création de votre redirection email poubelle : "; $message= "Confirmation de la création de votre redirection email poubelle : ";
$message= $alias_full.' => '.$email."\n"; $message= $alias_full.' => '.$email."\n";
$message= "Cliquer sur le lien ci-dessous pour confirmer la suppression : \n"; $message= "Cliquer sur le lien ci-dessous pour confirmer la suppression : \n";
$message.= "\t * ".urlGen('del',$id,$alias_full)."\n\n"; $message.= "\t * ".urlGen('delete',$id,$alias_full)."\n\n";
$message.= "Sinon pour suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n"; $message.= "Sinon pour suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n";
$message.= "\t * ".urlGen('disable',$id,$alias_full)."\n"; $message.= "\t * ".urlGen('disable',$id,$alias_full)."\n";
SendEmail($email,'Suppression de l\'alias '.$alias,$message); SendEmail($email,'Suppression de l\'alias '.$alias,$message);
@ -200,7 +211,7 @@ if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spa
// memory email // memory email
if (isset($_POST['memory'])) { if (isset($_POST['memory'])) {
setcookie ("email", $email, time() + 31536000); setcookie ("email", StripCleanToHtml($email), time() + 31536000);
} else if (isset($_COOKIE['email'])) { } else if (isset($_COOKIE['email'])) {
unset($_COOKIE['email']); unset($_COOKIE['email']);
} }
@ -364,3 +375,15 @@ if (!CRON) { LifeExpire(); }
echo CheckUpdate(); echo CheckUpdate();
} // end maintenance mod } // end maintenance mod
?> ?>
<link href="http://cdn.wijmo.com/themes/rocket/jquery-wijmo.css" rel="stylesheet" type="text/css" />
<link href="http://cdn.wijmo.com/jquery.wijmo-open.1.1.5.css" rel="stylesheet" type="text/css" />
<link href="http://cdn.wijmo.com/jquery.wijmo-complete.1.1.5.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.11/jquery-ui.min.js" type="text/javascript"></script>
<script src="http://cdn.wijmo.com/external/jquery.bgiframe-2.1.3-pre.js" type="text/javascript"></script>
<script src="http://cdn.wijmo.com/external/jquery.glob.min.js" type="text/javascript"></script>
<script src="http://cdn.wijmo.com/external/jquery.mousewheel.min.js" type="text/javascript"></script>
<script src="http://cdn.wijmo.com/external/raphael-min.js" type="text/javascript"></script>
<script src="http://cdn.wijmo.com/jquery.wijmo-open.1.1.5.min.js" type="text/javascript"></script>
<script src="http://cdn.wijmo.com/jquery.wijmo-complete.1.1.5.min.js" type="text/javascript"></script>

View file

@ -1,2 +0,0 @@
<?php
?>

View file

@ -278,6 +278,22 @@ function urlUnGen($get_value) {
return $return; return $return;
} }
// Source http://css-tricks.com/serious-form-security/
function StripCleanToHtml($s){
// Restores the added slashes (ie.: " I\'m John " for security in output, and escapes them in htmlentities(ie.: &quot; etc.)
// Also strips any <html> tags it may encouter
// Use: Anything that shouldn't contain html (pretty much everything that is not a textarea)
return htmlentities(trim(strip_tags(stripslashes($s))), ENT_NOQUOTES, "UTF-8");
}
function CleanToHtml($s){
// Restores the added slashes (ie.: " I\'m John " for security in output, and escapes them in htmlentities(ie.: &quot; etc.)
// It preserves any <html> tags in that they are encoded aswell (like &lt;html&gt;)
// As an extra security, if people would try to inject tags that would become tags after stripping away bad characters,
// we do still strip tags but only after htmlentities, so any genuine code examples will stay
// Use: For input fields that may contain html, like a textarea
return strip_tags(htmlentities(trim(stripslashes($s))), ENT_NOQUOTES, "UTF-8");
}
////////////////// //////////////////
// Admin function // Admin function
////////////////// //////////////////