Changeset 96991 in spip-zone


Ignore:
Timestamp:
May 5, 2016, 11:33:55 AM (5 years ago)
Author:
cedric@…
Message:

Certains services mails abiment les URLs de confirm/subscribe/unsubscribe en remplacant les & par des &
On s'adapte et on gere ce cas pour que les actions n'echouent pas, meme si le probleme doit se produire sur d'autres URLs aussi
+ un message d'erreur propre quand on ne peut pas valider l'action pour case d'email ou arg invalide

Location:
_plugins_/mailsubscribers/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/mailsubscribers/trunk/action/confirm_mailsubscriber.php

    r69533 r96991  
    1717function action_confirm_mailsubscriber_dist($email=null){
    1818        include_spip('mailsubscribers_fonctions');
     19        include_spip('inc/mailsubscribers');
    1920        if (is_null($email)){
    20                 $email = _request('email');
    21                 $arg = _request('arg');
    22                 $row = sql_fetsel('id_mailsubscriber,email,jeton,lang,statut','spip_mailsubscribers','email='.sql_quote($email));
    23                 if (!$row
    24                         OR $arg!==mailsubscriber_cle_action("confirm",$row['email'],$row['jeton'])){
    25                         $row = false;
     21                list($email,$arg) = mailsubscribers_args_action();
     22
     23                $row = false;
     24                if (!$email
     25                        OR !$row = sql_fetsel('id_mailsubscriber,email,jeton,lang,statut','spip_mailsubscribers','email='.sql_quote($email))){
     26                        spip_log("confirm_mailsubscriber : email $email pas dans la base spip_mailsubscribers","mailsubscribers");
     27                }
     28                else {
     29                        $cle = mailsubscriber_cle_action("confirm",$row['email'],$row['jeton']);
     30                        if ($arg!==$cle){
     31                                spip_log("confirm_mailsubscriber : cle $arg incorrecte pour email $email","mailsubscribers");
     32                                $row = false;
     33                        }
    2634                }
    2735        }
     
    3139        if (!$row){
    3240                include_spip('inc/minipres');
    33                 echo minipres();
     41                echo minipres(_T('info_email_invalide').'<br />'.$email);
    3442                exit;
    3543        }
  • _plugins_/mailsubscribers/trunk/action/subscribe_mailsubscriber.php

    r77941 r96991  
    1717function action_subscribe_mailsubscriber_dist($email=null, $double_optin=null){
    1818        include_spip('mailsubscribers_fonctions');
     19        include_spip('inc/mailsubscribers');
    1920        include_spip('inc/config');
    2021        if (is_null($email)){
    21                 $email = _request('email');
    22                 $arg = _request('arg');
    23                 if (is_null($arg) AND strpos($_SERVER["QUERY_STRING"],"arg%")!==false){
    24                         $query = str_replace("arg%","arg=",$_SERVER["QUERY_STRING"]);
    25                         parse_str($query,$args);
    26                         $arg = strtolower($args['arg']);
    27                         if (strlen($arg)>40)
    28                                 $arg = substr($arg,-40);
     22                list($email,$arg) = mailsubscribers_args_action();
     23
     24                $row = false;
     25                if (!$email
     26                        OR !$row = sql_fetsel('id_mailsubscriber,email,jeton,lang,statut','spip_mailsubscribers','email='.sql_quote($email))){
     27                        spip_log("subscribe_mailsubscriber : email $email pas dans la base spip_mailsubscribers","mailsubscribers");
    2928                }
    30                 $row = sql_fetsel('id_mailsubscriber,email,jeton,lang,statut','spip_mailsubscribers','email='.sql_quote($email));
    31                 if (!$row
    32                         OR $arg!==mailsubscriber_cle_action("subscribe",$row['email'],$row['jeton'])){
    33                         $row = false;
     29                else {
     30                        $cle = mailsubscriber_cle_action("subscribe",$row['email'],$row['jeton']);
     31                        if ($arg!==$cle){
     32                                spip_log("subscribe_mailsubscriber : cle $arg incorrecte pour email $email","mailsubscribers");
     33                                $row = false;
     34                        }
    3435                }
     36
    3537        }
    3638        else {
     
    3941        if (!$row){
    4042                include_spip('inc/minipres');
    41                 echo minipres();
     43                echo minipres(_T('info_email_invalide').'<br />'.$email);
    4244                exit;
    4345        }
  • _plugins_/mailsubscribers/trunk/action/unsubscribe_mailsubscriber.php

    r87397 r96991  
    1313 *
    1414 * @param string $email
     15 * @param bool $double_optin
    1516 */
    1617function action_unsubscribe_mailsubscriber_dist($email=null, $double_optin=true){
    1718        include_spip('mailsubscribers_fonctions');
     19        include_spip('inc/mailsubscribers');
    1820        if (is_null($email)){
    19                 $email = _request('email');
    20                 $arg = _request('arg');
    21                 if (is_null($arg) AND strpos($_SERVER["QUERY_STRING"],"arg%")!==false){
    22                         $query = str_replace("arg%","arg=",$_SERVER["QUERY_STRING"]);
    23                         parse_str($query,$args);
    24                         $arg = strtolower($args['arg']);
    25                         if (strlen($arg)>40)
    26                                 $arg = substr($arg,-40);
     21                list($email,$arg) = mailsubscribers_args_action();
     22
     23                $row = false;
     24                if (!$email
     25                        OR !$row = sql_fetsel('id_mailsubscriber,email,jeton,lang,statut','spip_mailsubscribers','email='.sql_quote($email))){
     26                        spip_log("unsubscribe_mailsubscriber : email $email pas dans la base spip_mailsubscribers","mailsubscribers");
    2727                }
    28                 $row = sql_fetsel('id_mailsubscriber,email,jeton,lang,statut','spip_mailsubscribers','email='.sql_quote($email));
    29                 if (!$row)
    30                         spip_log("unsubscribe_mailsubscriber : email $email pas dans la base spip_mailsubscribers","mailsubscribers");
    3128                else {
    3229                        $cle = mailsubscriber_cle_action("unsubscribe",$row['email'],$row['jeton']);
     
    4340        if (!$row){
    4441                include_spip('inc/minipres');
    45                 echo minipres();
     42                echo minipres(_T('info_email_invalide').'<br />'.$email);
    4643                exit;
    4744        }
  • _plugins_/mailsubscribers/trunk/inc/mailsubscribers.php

    r96843 r96991  
    88
    99if (!defined('_ECRIRE_INC_VERSION')) return;
     10
     11/**
     12 * Recuperer email et arg dans l'action confirm/subscribe/unsubscribe
     13 * en gerant les cas foireux introduits par les urls coupees dans les mails
     14 * ou par les services d'envoi+redirection qui abiment les URLs
     15 * @return array
     16 */
     17function mailsubscribers_args_action(){
     18        $email = _request('email');
     19        $arg = _request('arg');
     20
     21        if (is_null($arg) OR is_null($email)){
     22                $query = $_SERVER["QUERY_STRING"];
     23                // cas du arg coupe
     24                if (strpos($query,"arg%")!==false){
     25                        $query = str_replace("arg%","arg=",$query);
     26                }
     27                // cas du & transorme en &amp;
     28                if (strpos($query,'&amp;')!==false){
     29                        $query = str_replace("&amp;","&",$query);
     30                }
     31                parse_str($query,$args);
     32                $arg = strtolower($args['arg']);
     33                $email = $args['email'];
     34                if (strlen($arg)>40)
     35                        $arg = substr($arg,-40);
     36                if ($arg AND $email){
     37                        spip_log("mailsubscriber : query_string mal formee, verifiez votre service d'envoi de mails [".$_SERVER["QUERY_STRING"]."]","mailsubscribers"._LOG_INFO_IMPORTANTE);
     38                }
     39        }
     40
     41        return array($email,$arg);
     42}
    1043
    1144/**
  • _plugins_/mailsubscribers/trunk/paquet.xml

    r96985 r96991  
    22        prefix="mailsubscribers"
    33        categorie="communication"
    4         version="1.7.13"
     4        version="1.7.14"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.