Improves the XSRF protection by reducing it to a single assert on the existence of...
authorVincent Zanotti <vincent.zanotti@polytechnique.org>
Mon, 19 May 2008 22:16:28 +0000 (00:16 +0200)
committerVincent Zanotti <vincent.zanotti@polytechnique.org>
Mon, 19 May 2008 22:27:57 +0000 (00:27 +0200)
Signed-off-by: Vincent Zanotti <vincent.zanotti@polytechnique.org>
12 files changed:
classes/csvimporter.php
classes/pltableeditor.php
classes/session.php
modules/admin.php
modules/axletter.php
modules/carnet.php
modules/core.php
modules/email.php
modules/googleapps.php
modules/platal.php
modules/xnet.php
modules/xnetgrp.php

index 522544f..571d227 100644 (file)
@@ -330,9 +330,7 @@ class CSVImporter
                 $fields[]     = $key;
             }
             if ($current == 'valid' && Env::has('csv_valid')) {
-                if (!S::has_xsrf_token()) {
-                    $page->kill("L'opération n'a pas pu être effectuée, merci de réessayer.");
-                }
+                S::assert_xsrf_token();
                 $this->run($_SESSION['csv_action'], $insert, $update);
                 $page->assign('csv_done', true);
                 $this->cleanSession($sesfields);
index 35d5aae..826faa5 100644 (file)
@@ -192,8 +192,9 @@ class PLTableEditor
     {
         $page->changeTpl('core/table-editor.tpl');
         $list = true;
+        if ($action == 'delete') {
+            S::assert_xsrf_token();
 
-        if ($action == 'delete' && S::has_xsrf_token()) {
             if (!isset($this->delete_action)) {
                 foreach ($this->jtables as $table => $j)
                     XDB::execute("DELETE FROM {$table} WHERE {$j['joinid']} = {?}{$j['joinextra']}", $id);
@@ -209,8 +210,6 @@ class PLTableEditor
             } else {
                 $page->trig("Impossible de supprimer l'entrée.");
             }
-        } else if ($action == 'delete') {
-            $page->trig("Impossible de supprimer l'entrée, merci de réessayer.");
         }
         if ($action == 'edit') {
             $r = XDB::query("SELECT * FROM {$this->table} WHERE {$this->idfield} = {?} AND {$this->whereclause}",$id);
@@ -240,7 +239,9 @@ class PLTableEditor
             }
             $list = false;
         }
-        if ($action == 'update' && S::has_xsrf_token()) {
+        if ($action == 'update') {
+            S::assert_xsrf_token();
+
             $values = "";
             $cancel = false;
             foreach ($this->vars as $field => $descr) {
@@ -289,8 +290,6 @@ class PLTableEditor
             if (!$this->auto_return) {
                 return $this->apply($page, 'edit', $id);
             }
-        } else if ($action == 'update') {
-            $page->trig("Impossible de mettre à jour, merci de réessayer.");
         }
         if ($action == 'sort') {
             $this->sortfield = $id;
index 5a58059..2cb755a 100644 (file)
@@ -78,11 +78,6 @@ class Session
         return Session::logged() && Session::v('perms')->hasFlag(PERMS_ADMIN);
     }
 
-    public static function has_xsrf_token()
-    {
-        return Session::has('xsrf_token') && Session::v('xsrf_token') == Env::v('token');
-    }
-
     public static function logged()
     {
         return Session::v('auth', AUTH_PUBLIC) >= AUTH_COOKIE;
@@ -92,6 +87,22 @@ class Session
     {
         return Session::v('auth', AUTH_PUBLIC) >= AUTH_MDP;
     }
+
+    // Anti-XSRF protections.
+    public static function has_xsrf_token()
+    {
+        return Session::has('xsrf_token') && Session::v('xsrf_token') == Env::v('token');
+    }
+
+    public static function assert_xsrf_token()
+    {
+        if (!Session::has_xsrf_token()) {
+            global $page;
+            if ($page instanceof PlatalPage) {
+                $page->kill("L'opération n'a pas pu aboutir, merci de réessayer.");
+            }
+        }
+    }
 }
 
 // {{{ function check_perms()
index e9e899d..9b6fe07 100644 (file)
@@ -413,9 +413,8 @@ class AdminModule extends PLModule
 
             // Check if there was a submission
             foreach($_POST as $key => $val) {
-                if (!S::has_xsrf_token()) {
-                    $page->kill("L'opération de modification de l'utilisateur a échouée, merci de réessayer.");
-                }
+                S::assert_xsrf_token();
+
                 switch ($key) {
                     case "add_fwd":
                         $email = trim(Env::v('email'));
@@ -748,26 +747,20 @@ class AdminModule extends PLModule
             // on examine l'op a effectuer
             switch ($op) {
                 case 'mail':
-                    if (S::has_xsrf_token()) {
-                        send_warning_homonyme($prenom, $nom, $forlife, $loginbis);
-                        switch_bestalias($target, $loginbis);
-                    } else {
-                        $page->assign('op', 'list');
-                        $page->trig("L'envoi du mail d'homonymie a échoué, merci de réessayer.");
-                    }
+                    S::assert_xsrf_token();
+
+                    send_warning_homonyme($prenom, $nom, $forlife, $loginbis);
+                    switch_bestalias($target, $loginbis);
                     $op = 'list';
                     break;
 
                 case 'correct':
-                    if (S::has_xsrf_token()) {
-                        switch_bestalias($target, $loginbis);
-                        XDB::execute("UPDATE aliases SET type='homonyme',expire=NOW() WHERE alias={?}", $loginbis);
-                        XDB::execute("REPLACE INTO homonymes (homonyme_id,user_id) VALUES({?},{?})", $target, $target);
-                        send_robot_homonyme($prenom, $nom, $forlife, $loginbis);
-                    } else {
-                        $page->assign('op', 'list');
-                        $page->trig("La correction de l'homonymie a échouée, merci de réessayer.");
-                    }
+                    S::assert_xsrf_token();
+
+                    switch_bestalias($target, $loginbis);
+                    XDB::execute("UPDATE aliases SET type='homonyme',expire=NOW() WHERE alias={?}", $loginbis);
+                    XDB::execute("REPLACE INTO homonymes (homonyme_id,user_id) VALUES({?},{?})", $target, $target);
+                    send_robot_homonyme($prenom, $nom, $forlife, $loginbis);
                     $op = 'list';
                     break;
             }
@@ -834,7 +827,9 @@ class AdminModule extends PLModule
 
         $page->assign('promo',$promo);
 
-        if ($validate && S::has_xsrf_token()) {
+        if ($validate) {
+            S::assert_xsrf_token();
+
             $new_deces = array();
             $res = XDB::iterRow("SELECT user_id,matricule,nom,prenom,deces FROM auth_user_md5 WHERE promo = {?}", $promo);
             while (list($uid,$mat,$nom,$prenom,$deces) = $res->next()) {
@@ -853,8 +848,6 @@ class AdminModule extends PLModule
                 }
             }
             $page->assign('new_deces',$new_deces);
-        } else if ($validate) {
-            $page->trig("La mise à jour des dates de decès à échouée, merci de réessayer.");
         }
 
         $res = XDB::iterator('SELECT matricule, nom, prenom, deces FROM auth_user_md5 WHERE promo = {?} ORDER BY nom,prenom', $promo);
@@ -937,12 +930,10 @@ class AdminModule extends PLModule
         }
 
         if(Env::has('uid') && Env::has('type') && Env::has('stamp')) {
+            S::assert_xsrf_token();
+
             $req = Validate::get_typed_request(Env::v('uid'), Env::v('type'), Env::v('stamp'));
-            if($req && S::has_xsrf_token()) {
-                $req->handle_formu();
-            } else if ($req) {
-                $page->trig("L'opération a échoué, merci de réessayer.");
-            }
+            $req->handle_formu();
         }
 
         $r = XDB::iterator('SHOW COLUMNS FROM requests_answers');
@@ -1046,7 +1037,9 @@ class AdminModule extends PLModule
         }
 
         // update wiki perms
-        if ($action == 'update' && S::has_xsrf_token()) {
+        if ($action == 'update') {
+            S::assert_xsrf_token();
+
             $perms_read = Post::v('read');
             $perms_edot = Post::v('edit');
             if ($perms_read || $perms_edit) {
@@ -1061,21 +1054,21 @@ class AdminModule extends PLModule
                     wiki_set_perms($wiki_page, $perms0, $perms1);
                 }
             }
-        } elseif ($action == 'update') {
-            $page->trig("La mise à jour des permissions wiki a échouée, merci de réessayer.");
         }
 
-        if ($action == 'delete' && $wikipage != '' && S::has_xsrf_token()) {
+        if ($action == 'delete' && $wikipage != '') {
+            S::assert_xsrf_token();
+
             if (wiki_delete_page($wikipage)) {
                 $page->trig("La page ".$wikipage." a été supprimée.");
             } else {
                 $page->trig("Impossible de supprimer la page ".$wikipage.".");
             }
-        } elseif ($action == 'delete' && $wikipage != '') {
-            $page->trig("La suppression de la page wiki a échouée, merci de réessayer.");
         }
 
-        if ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2 && S::has_xsrf_token()) {
+        if ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2) {
+            S::assert_xsrf_token();
+
             if ($changedLinks = wiki_rename_page($wikipage, $wikipage2)) {
                 $s = 'La page <em>'.$wikipage.'</em> a été déplacée en <em>'.$wikipage2.'</em>.';
                 if (is_numeric($changedLinks)) {
@@ -1085,8 +1078,6 @@ class AdminModule extends PLModule
             } else {
                 $page->trig("Impossible de déplacer la page ".$wikipage);
             }
-        } elseif ($action == 'rename' && $wikipage != '' && $wikipage2 != '' && $wikipage != $wikipage2) {
-            $page->trig("Le renommage de la page wiki a échoué, merci de réessayer.");
         }
 
         $perms = wiki_perms_options();
@@ -1135,10 +1126,7 @@ class AdminModule extends PLModule
         switch (Post::v('action')) {
           case 'create':
             if (trim(Post::v('ipN')) != '') {
-                if (!S::has_xsrf_token()) {
-                    $page->trig("L'ajout d'une IP à surveiller a échoué, merci de réessayer.");
-                    break;
-                }
+                S::assert_xsrf_token();
                 Xdb::execute('INSERT IGNORE INTO ip_watch (ip, mask, state, detection, last, uid, description)
                                           VALUES ({?}, {?}, {?}, CURDATE(), NOW(), {?}, {?})',
                              ip_to_uint(trim(Post::v('ipN'))), ip_to_uint(trim(Post::v('maskN'))),
@@ -1147,10 +1135,7 @@ class AdminModule extends PLModule
             break;
 
           case 'edit':
-            if (!S::has_xsrf_token()) {
-                $page->trig("L'édition de l'IP a échoué, merci de réessayer.");
-                break;
-            }
+            S::assert_xsrf_token();
             Xdb::execute('UPDATE ip_watch
                              SET state = {?}, last = NOW(), uid = {?}, description = {?}, mask = {?}
                            WHERE ip = {?}', Post::v('stateN'), S::i('uid'), Post::v('descriptionN'),
@@ -1159,11 +1144,8 @@ class AdminModule extends PLModule
 
           default:
             if ($action == 'delete' && !is_null($ip)) {
-                if (S::has_xsrf_token()) {
-                    Xdb::execute('DELETE FROM ip_watch WHERE ip = {?}', ip_to_uint($ip));
-                } else {
-                    $page->trig("La suppression de l'adresse IP a échouée, merci de réessayer.");
-                }
+                S::assert_xsrf_token();
+                Xdb::execute('DELETE FROM ip_watch WHERE ip = {?}', ip_to_uint($ip));
             }
         }
         if ($action != 'create' && $action != 'edit') {
index d093bd3..68577c5 100644 (file)
@@ -109,7 +109,9 @@ class AXLetterModule extends PLModule
                 $saved = false;
                 $new   = true;
             }
-        } elseif (Post::has('valid') && S::has_xsrf_token()) {
+        } elseif (Post::has('valid')) {
+            S::assert_xsrf_token();
+
             if (!$subject && $title) {
                 $subject = $title;
             }
@@ -190,8 +192,6 @@ class AXLetterModule extends PLModule
                 pl_redirect('ax');
                 break;
             }
-        } elseif (Post::has('valid')) {
-            $page->trig("L'opération a échouée, merci de réessayer.");
         }
         $page->assign('id', $id);
         $page->assign('short_name', $short_name);
@@ -288,7 +288,9 @@ class AXLetterModule extends PLModule
             $action = Post::v('action');
             $uid    = Post::v('uid');
         }
-        if ($uid && S::has_xsrf_token()) {
+        if ($uid) {
+            S::assert_xsrf_token();
+
             $uids   = preg_split('/ *[,;\: ] */', $uid);
             foreach ($uids as $uid) {
                 switch ($action) {
@@ -303,8 +305,6 @@ class AXLetterModule extends PLModule
                     $page->trig("Personne ne correspond à l'identifiant '$uid'");
                 }
             }
-        } elseif ($uid) {
-            $page->trig("L'opération sur la liste des administrateurs AX a échouée, merci de réessayer.");
         }
 
         $page->changeTpl('axletter/admin.tpl');
index 194d866..cf1cd16 100644 (file)
@@ -127,9 +127,8 @@ class CarnetModule extends PLModule
         $promo_sortie = $res->fetchOneCell();
         $page->assign('promo_sortie', $promo_sortie);
 
-        if ($action && !S::has_xsrf_token()) {
-            $page->trig("La mise à jour des notifications a échouée, merci de réessayer.");
-            $action = false;
+        if ($action) {
+            S::assert_xsrf_token();
         }
         switch ($action) {
           case 'add_promo':
@@ -146,24 +145,21 @@ class CarnetModule extends PLModule
             break;
         }
 
-        if (Env::has('subs') && S::has_xsrf_token()) {
+        if (Env::has('subs')) {
+            S::assert_xsrf_token();
             $watch->_subs->update('sub');
-        } elseif (Env::has('subs')) {
-            $page->trig("La mise à jour des notifications a échouée, merci de réessayer.");
         }
 
-        if (Env::has('flags_contacts') && S::has_xsrf_token()) {
+        if (Env::has('flags_contacts')) {
+            S::assert_xsrf_token();
             $watch->watch_contacts = Env::b('contacts');
             $watch->saveFlags();
-        } elseif (Env::has('flags_contacts')) {
-            $page->trig("La mise à jour des notifications a échouée, merci de réessayer.");
         }
 
-        if (Env::has('flags_mail') && S::has_xsrf_token()) {
+        if (Env::has('flags_mail')) {
+            S::assert_xsrf_token();
             $watch->watch_mail = Env::b('mail');
             $watch->saveFlags();
-        } elseif (Env::has('flags_mail')) {
-            $page->trig("La mise à jour des notifications a échouée, merci de réessayer.");
         }
 
         $page->assign_by_ref('watch', $watch);
@@ -214,9 +210,11 @@ class CarnetModule extends PLModule
 
         // For XSRF protection, checks both the normal xsrf token, and the special RSS token.
         // It allows direct linking to contact adding in the RSS feed.
-        if (Env::v('action') && (S::has_xsrf_token() || Env::v('token') === S::v('core_rss_hash'))) {
-            switch (Env::v('action')) {
-              case 'retirer':
+        if (Env::v('action') && Env::v('token') !== S::v('core_rss_hash')) {
+            S::assert_xsrf_token();
+        }
+        switch (Env::v('action')) {
+            case 'retirer':
                 if (is_numeric($user)) {
                     if (XDB::execute('DELETE FROM contacts
                                        WHERE uid = {?} AND contact = {?}',
@@ -236,7 +234,7 @@ class CarnetModule extends PLModule
                 }
                 break;
 
-              case 'ajouter':
+            case 'ajouter':
                 require_once('user.func.inc.php');
                 if (($login = get_user_login($user)) !== false) {
                     if (XDB::execute(
@@ -250,9 +248,6 @@ class CarnetModule extends PLModule
                         $page->trig('Contact déjà dans la liste !');
                     }
                 }
-            }
-        } elseif (Env::v('action')) {
-            $page->trig("La modification du contact a échouée, merci de réessayer.");
         }
 
         $search = false;
index 663af58..031032d 100644 (file)
@@ -79,16 +79,13 @@ class CoreModule extends PLModule
 
     function handler_purge_cache(&$page)
     {
-        if (S::has_xsrf_token()) {
-            require_once 'wiki.inc.php';
+        require_once 'wiki.inc.php';
+        S::assert_xsrf_token();
 
-            $page->clear_compiled_tpl();
-            wiki_clear_all_cache();
+        $page->clear_compiled_tpl();
+        wiki_clear_all_cache();
 
-            http_redirect(empty($_SERVER['HTTP_REFERER']) ? './' : $_SERVER['HTTP_REFERER']);
-        } else {
-            $page->kill("La purge du cache a échouée, merci de réessayer.");
-        }
+        http_redirect(empty($_SERVER['HTTP_REFERER']) ? './' : $_SERVER['HTTP_REFERER']);
     }
 
     function handler_kill_sessions(&$page)
@@ -116,7 +113,9 @@ class CoreModule extends PLModule
         global $globals;
         $page->changeTpl('core/bug.tpl', SIMPLE);
         $page->addJsLink('close_on_esc.js');
-        if (Env::has('send') && trim(Env::v('detailed_desc')) && S::has_xsrf_token()) {
+        if (Env::has('send') && trim(Env::v('detailed_desc'))) {
+            S::assert_xsrf_token();
+
             $body = wordwrap(Env::v('detailed_desc'), 78) . "\n\n"
                   . "----------------------------\n"
                   . "Page        : " . Env::v('page') . "\n\n"
@@ -131,10 +130,8 @@ class CoreModule extends PLModule
             $mymail->setSubject('Plat/al '.Env::v('task_type').' : '.Env::v('item_summary'));
             $mymail->setTxtBody($body);
             $mymail->send();
-        } elseif (Env::has('send') && S::has_xsrf_token()) {
-            $page->trig("Merci de remplir une explication du problème rencontré");
         } elseif (Env::has('send')) {
-            $page->trig("L'envoi du bug a échoué, merci de réessayer.");
+            $page->trig("Merci de remplir une explication du problème rencontré");
         }
     }
 
index e00cf76..b321981 100644 (file)
@@ -103,7 +103,9 @@ class EmailModule extends PLModule
 
         $page->assign('demande', AliasReq::get_request($uid));
 
-        if ($action == 'delete' && $value && S::has_xsrf_token()) {
+        if ($action == 'delete' && $value) {
+            S::assert_xsrf_token();
+
             //Suppression d'un alias
             XDB::execute(
                 'DELETE virtual, virtual_redirect
@@ -111,8 +113,6 @@ class EmailModule extends PLModule
              INNER JOIN virtual_redirect USING (vid)
                   WHERE alias = {?} AND (redirect = {?} OR redirect = {?})', $value,
                 $forlife.'@'.$globals->mail->domain, $forlife.'@'.$globals->mail->domain2);
-        } elseif ($action == 'delete' && $value) {
-            $page->trig("La suppression de ton alias a échouée, merci de réessayer.");
         }
 
         //Récupération des alias éventuellement existants
@@ -127,9 +127,10 @@ class EmailModule extends PLModule
         list($alias, $visibility) = $res->fetchOneRow();
         $page->assign('actuel', $alias);
 
-        if ($action == 'ask' && Env::has('alias') && Env::has('raison') && S::has_xsrf_token()) {
-            //Si l'utilisateur vient de faire une damande
+        if ($action == 'ask' && Env::has('alias') && Env::has('raison')) {
+            S::assert_xsrf_token();
 
+            //Si l'utilisateur vient de faire une damande
             $alias  = Env::v('alias');
             $raison = Env::v('raison');
             $public = (Env::v('public', 'off') == 'on')?"public":"private";
@@ -173,8 +174,6 @@ class EmailModule extends PLModule
                 $page->assign('success',$alias);
                 return;
             }
-        } elseif ($action == 'ask' && Env::has('alias') && Env::has('raison')) {
-            $page->trig("Ta demande d'alias n'a pas pu être enregistrée, merci de réessayer.");
         } elseif ($action == 'set' && ($value == 'public' || $value == 'private')) {
             if (!S::has_xsrf_token()) {
                 return PL_FORBIDDEN;
@@ -232,7 +231,9 @@ class EmailModule extends PLModule
             $redirect->modify_one_email_redirect($email, $rewrite);
         }
 
-        if (Env::has('emailop') && S::has_xsrf_token()) {
+        if (Env::has('emailop')) {
+            S::assert_xsrf_token();
+
             $actifs = Env::v('emails_actifs', Array());
             print_r(Env::v('emails_rewrite'));
             if (Env::v('emailop') == "ajouter" && Env::has('email')) {
@@ -243,8 +244,6 @@ class EmailModule extends PLModule
                 $page->assign('retour', $redirect->modify_email($actifs,
                     Env::v('emails_rewrite',Array())));
             }
-        } else if (Env::has('emailop')) {
-            $page->trig('L\'ajout d\'une nouvelle redirection a échoué, merci de réessayer.');
         }
 
         $res = XDB::query(
@@ -294,7 +293,9 @@ class EmailModule extends PLModule
         wiki_require_page('Xorg.Mails');
         $page->changeTpl('emails/submit_spam.tpl');
 
-        if (Post::has('send_email') && S::has_xsrf_token()) {
+        if (Post::has('send_email')) {
+            S::assert_xsrf_token();
+
             $upload = PlUpload::get($_FILES['mail'], S::v('forlife'), 'spam.submit', true);
             if (!$upload) {
                 $page->trig('Une erreur a été rencontrée lors du transfert du fichier');
@@ -316,8 +317,6 @@ class EmailModule extends PLModule
             $mailer->send();
             $page->trig('Le message a été transmis à ' . $box);
             $upload->clear();
-        } elseif (Post::has('send_email')) {
-            $page->trig("La soumission du spam a échouée, merci de réessayer.");
         }
     }
 
@@ -344,7 +343,9 @@ class EmailModule extends PLModule
                                     VALUES  ({?}, {?})", S::i('uid'), $data);
             }
             exit;
-        } else if (Env::v('submit') == 'Envoyer' && S::has_xsrf_token()) {
+        } else if (Env::v('submit') == 'Envoyer') {
+            S::assert_xsrf_token();
+
             function getEmails($aliases)
             {
                 if (!is_array($aliases)) {
@@ -411,8 +412,6 @@ class EmailModule extends PLModule
                     }
                 }
             }
-        } else if (Env::v('submit') == 'Envoyer') {
-            $page->trig("L'envoi de l'email a échoué, merci de réessayer.");
         } else {
             $res = XDB::query("SELECT  data
                                  FROM  email_send_save
@@ -475,7 +474,9 @@ class EmailModule extends PLModule
 
         $page->changeTpl('emails/broken.tpl');
 
-        if ($warn == 'warn' && $email && S::has_xsrf_token()) {
+        if ($warn == 'warn' && $email) {
+            S::assert_xsrf_token();
+
             $email = valide_email($email);
             // vérifications d'usage
             $sel = XDB::query(
@@ -514,16 +515,14 @@ L'équipe d'administration <support@" . $globals->mail->domain . '>';
                 $mail->send();
                 $page->trig("Mail envoyé ! :o)");
             }
-        } elseif ($warn == 'warn' && $email) {
-            $page->trig("Nous n'avons pas pu prévenir ton correspondant, merci de réessayer.");
-        } elseif (Post::has('email') && S::has_xsrf_token()) {
+        } elseif (Post::has('email')) {
+            S::assert_xsrf_token();
+
             $email = valide_email(Post::v('email'));
 
             list(,$fqdn) = explode('@', $email);
             $fqdn = strtolower($fqdn);
-            if ($fqdn == 'polytechnique.org' || $fqdn == 'melix.org'
-            ||  $fqdn == 'm4x.org' || $fqdn == 'melix.net')
-            {
+            if ($fqdn == 'polytechnique.org' || $fqdn == 'melix.org' ||  $fqdn == 'm4x.org' || $fqdn == 'melix.net') {
                 $page->assign('neuneu', true);
             } else {
                 $page->assign('email',$email);
@@ -554,8 +553,6 @@ L'équipe d'administration <support@" . $globals->mail->domain . '>';
                     $page->assign_by_ref('x', $x);
                 }
             }
-        } elseif (Post::has('email')) {
-            $page->trig("Nous n'avons pas réussi à satisfaire ta demande, merci de réessayer.");
         }
     }
 
@@ -569,8 +566,8 @@ L'équipe d'administration <support@" . $globals->mail->domain . '>';
                         'dangerous' => 'Usurpations par cette adresse');
         $page->assign('states', $states);
 
-        if (Post::has('action') && !S::has_xsrf_token()) {
-            $page->kill("L'action n'a pas pu être réalisée, merci de réessayer.");
+        if (Post::has('action')) {
+            S::assert_xsrf_token();
         }
         switch (Post::v('action')) {
           case 'create':
index 14baa8e..d22f9b2 100644 (file)
@@ -68,18 +68,15 @@ class GoogleAppsModule extends PLModule
                 } else if ($subaction == 'nosync') {
                     $account->set_password_sync(false);
                 } else if (Post::has('response2') && !$account->sync_password) {
-                    if (S::has_xsrf_token()) {
-                        $account->set_password(Post::v('response2'));
-                    } else {
-                        $page->trig("Le changement de ton mot de passe Google Apps a échoué, merci de réessayer.");
-                    }
+                    S::assert_xsrf_token();
+                    $account->set_password(Post::v('response2'));
                 }
             }
 
             if ($action == 'suspend' && Post::has('suspend') && $account->active()) {
-                if (!S::has_xsrf_token()) {
-                    $page->trig("La demande de suspension de ton compte a échouée, merci de réessayer.");
-                } else if ($account->pending_update_suspension) {
+                S::assert_xsrf_token();
+
+                if ($account->pending_update_suspension) {
                     $page->trig("Ton compte est déjà en cours de désactivation.");
                 } else {
                     if ($redirect->modify_one_email('googleapps', false) == SUCCESS) {
@@ -99,6 +96,8 @@ class GoogleAppsModule extends PLModule
                 $page->assign('password_sync', Get::b('password_sync', true));
             }
             if ($action == 'create' && Post::has('password_sync') && Post::has('redirect_mails')) {
+                S::assert_xsrf_token();
+
                 $password_sync = Post::b('password_sync');
                 $redirect_mails = Post::b('redirect_mails');
                 if ($password_sync) {
@@ -107,12 +106,8 @@ class GoogleAppsModule extends PLModule
                     $password = Post::v('response2');
                 }
 
-                if (S::has_xsrf_token()) {
-                    $account->create($password_sync, $password, $redirect_mails);
-                    $page->trig("La demande de création de ton compte Google Apps a bien été enregistrée.");
-                } else {
-                    $page->trig("La demande de création de ton compte Google Apps a échouée, merci de réessayer.");
-                }
+                $account->create($password_sync, $password, $redirect_mails);
+                $page->trig("La demande de création de ton compte Google Apps a bien été enregistrée.");
             }
         }
 
index 1c3f71d..f2d4d96 100644 (file)
@@ -187,8 +187,9 @@ class PlatalModule extends PLModule
     {
         global $globals;
 
-        if (Post::has('response2') && S::has_xsrf_token())  {
+        if (Post::has('response2'))  {
             require_once 'secure_hash.inc.php';
+            S::assert_xsrf_token();
 
             $_SESSION['password'] = $password = Post::v('response2');
 
@@ -216,8 +217,6 @@ class PlatalModule extends PLModule
 
             $page->changeTpl('platal/motdepasse.success.tpl');
             $page->run();
-        } else if (Post::has('response2')) {
-            $page->trig('Le changement de ton mot de passe a échoué, merci de réessayer.');
         }
 
         $page->changeTpl('platal/motdepasse.tpl');
index b1dd12b..c8e5611 100644 (file)
@@ -80,7 +80,9 @@ class XnetModule extends PLModule
                                         Get::v('del'));
             list($id, $nom, $domain) = $res->fetchOneRow();
             $page->assign('nom', $nom);
-            if ($id && Post::has('del') && S::has_xsrf_token()) {
+            if ($id && Post::has('del')) {
+                S::assert_xsrf_token();
+
                 XDB::query('DELETE FROM groupex.membres WHERE asso_id={?}', $id);
                 $page->trig('membres supprimés');
 
@@ -103,20 +105,18 @@ class XnetModule extends PLModule
                 XDB::query('DELETE FROM groupex.asso WHERE id={?}', $id);
                 $page->trig("Groupe $nom supprimé");
                 Get::kill('del');
-            } else if ($id && Post::has('del')) {
-                $page->trig("La suppression du groupe X a échouée, merci de réssayer.");
             }
             if (!$id) {
                 Get::kill('del');
             }
         }
 
-        if (Post::has('diminutif') && S::has_xsrf_token()) {
+        if (Post::has('diminutif')) {
+            S::assert_xsrf_token();
+
             XDB::query('INSERT INTO groupex.asso (id,diminutif)
                                  VALUES(NULL,{?})', Post::v('diminutif'));
             pl_redirect('../'.Post::v('diminutif').'/edit');
-        } else if (Post::has('diminutif')) {
-            $page->trig("L'ajout du groupe X a échoué, merci de réssayer.");
         }
 
         $res = XDB::query('SELECT nom,diminutif FROM groupex.asso ORDER by NOM');
index 85009c3..b3de66d 100644 (file)
@@ -221,7 +221,9 @@ class XnetGrpModule extends PLModule
         global $globals;
         $page->changeTpl('xnetgrp/edit.tpl');
 
-        if (Post::has('submit') && S::has_xsrf_token()) {
+        if (Post::has('submit')) {
+            S::assert_xsrf_token();
+
             if (S::has_perms()) {
                 if (Post::v('mail_domain') && (strstr(Post::v('mail_domain'), '.') === false)) {
                     $page->trig("le domaine doit être un FQDN (aucune modif effectuée) !!!");
@@ -272,8 +274,6 @@ class XnetGrpModule extends PLModule
             }
 
             pl_redirect('../'.Post::v('diminutif', $globals->asso('diminutif')).'/edit');
-        } else if (Post::has('submit')) {
-            $page->trig("La mise à jour des paramètres du groupe a échouée, merci de réssayer.");
         }
 
         if (S::has_perms()) {