Browse Source

Fix #4575 : rendre email_valide() personalisable (!111)

Fix #4575 : deplacer le contenu de la fonction email_valide() dans un inc_email_valide_dist() surchargeable

+ Permettre d'appeler email_valide() sur un tableau pour le filtrer
+ Précisions de PHPDoc

Co-authored-by: Cerdic <cedric@yterium.com>
Reviewed-on: #111
Co-Authored-By: cerdic <cedric@yterium.com>
Co-Committed-By: cerdic <cedric@yterium.com>
pull/115/head
cerdic 10 months ago
parent
commit
c454b4a6b8
  1. 57
      ecrire/inc/email_valide.php
  2. 35
      ecrire/inc/filtres.php

57
ecrire/inc/email_valide.php

@ -0,0 +1,57 @@
<?php
/***************************************************************************\
* SPIP, Système de publication pour l'internet *
* *
* Copyright © avec tendresse depuis 2001 *
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Gestion des emails et de leur envoi
*
* @package SPIP\Core\Mail
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Vérifier la conformité d'une ou plusieurs adresses email (suivant RFC 822)
*
* @param string $adresses
* Adresse ou liste d'adresse (separees pas des virgules)
* @return bool|string
* - false si une des adresses n'est pas conforme,
* - la normalisation de la dernière adresse donnée sinon
**/
function inc_email_valide_dist($adresses) {
// eviter d'injecter n'importe quoi dans preg_match
if (!is_string($adresses)) {
return false;
}
// Si c'est un spammeur autant arreter tout de suite
if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $adresses)) {
spip_log("Tentative d'injection de mail : $adresses");
return false;
}
foreach (explode(',', $adresses) as $v) {
// nettoyer certains formats
// "Marie Toto <Marie@toto.com>"
$adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v));
// RFC 822
if (!preg_match('#^[^()<>@,;:\\"/[:space:]]+(@([-_0-9a-z]+\.)*[-_0-9a-z]+)$#i', $adresse)) {
return false;
}
}
return $adresse;
}

35
ecrire/inc/filtres.php

@ -2176,36 +2176,23 @@ function nom_acceptable($nom) {
/**
* Vérifier la conformité d'une ou plusieurs adresses email (suivant RFC 822)
*
* @param string $adresses
* @param string|array $adresses
* Adresse ou liste d'adresse
* @return bool|string
* - false si pas conforme,
* si on fournit un tableau, il est filtre et la fonction renvoie avec uniquement les adresses email valides (donc possiblement vide)
* @return bool|string|array
* - false si une des adresses n'est pas conforme,
* - la normalisation de la dernière adresse donnée sinon
* - renvoie un tableau si l'entree est un tableau
**/
function email_valide($adresses) {
// eviter d'injecter n'importe quoi dans preg_match
if (!is_string($adresses)) {
return false;
}
// Si c'est un spammeur autant arreter tout de suite
if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $adresses)) {
spip_log("Tentative d'injection de mail : $adresses");
return false;
}
foreach (explode(',', $adresses) as $v) {
// nettoyer certains formats
// "Marie Toto <Marie@toto.com>"
$adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v));
// RFC 822
if (!preg_match('#^[^()<>@,;:\\"/[:space:]]+(@([-_0-9a-z]+\.)*[-_0-9a-z]+)$#i', $adresse)) {
return false;
}
if (is_array($adresses)) {
$adresses = array_map('email_valide', $adresses);
$adresses = array_filter($adresses);
return $adresses;
}
return $adresse;
$email_valide = charger_fonction('email_valide', 'inc');
return $email_valide($adresses);
}
/**

Loading…
Cancel
Save