[spip-dev] notification / action / redirection / je tourne en rond ...

Hello,

j'ai voulu faire un systeme de notification sur le plugin agenda et je coince un peu sur les actions.

Le but est d'envoyer un mail aux admins quand un evenement est ajouté, avec dans le mail, un lien permettant d'ajouter un mot clé.

Tout se passe bien si l'auteur est deja authentifié quand il clique sur le lien, mais s'il ne l'est pas, ou si il l'est avec un mauvais utilisateur, je voulais faire un logout / login / rediriger vers l'action.

Je me suis donc fait une fonction securiser_action qui gere les appels en get avec une redirection quand ca marche et un logout quand ca coince:
function inc_securiser_action($action='', $arg='', $redirect="", $mode=false, $att='')
{
    include_spip('inc/securiser_action');
    if ($action){
        return securiser_action_auteur($action, $arg, $redirect, $mode, $att);
    }
    else {
        $arg = _request('arg');
        $hash = _request('hash');
        $action = _request('action');
        if (verifier_action_auteur("$action-$arg", $hash))
            return $arg;
        else {
            include_spip('inc/minipres');
            include_spip('inc/headers');
            $url=$_SERVER['REQUEST_URI'];
            spip_log("logout verifier_action_auteur($action-$arg, $hash)");
            redirige_par_entete("spip.php?action=logout&url=".urlencode("spip.php?page=login&url=".urlencode($url)));
        }
    }
}

et un systeme de notification (qui marche, puisque quand on est authentifié, le mot clé s'ajoute bien):

Mais ca ne marche pas : j'ai bien le logout, mais après le login, l'action n'est pas reconnue, comme si arg etait vide ou que le hash n'etait plus valide.

l'url initiale est :
spip.php?action=editer_mot&arg=61,evenements,id_evenement,evenement,1894&hash=1dc4f41cb9172467137fe3e571f599f5&redirect=spip.php%3Farticle55
si je ne suis pas authentifié, je suis redirigé (après logout) vers :
spip.php?page=login&url=%2Fspip.php%3Faction%3Dediter_mot%26arg%3D61%2C%2Cevenements%2Cid_evenement%2Cevenement%2C1894%26hash%3D1dc4f41cb9172467137fe3e571f599f5%26redirect%3Dspip.php%253Farticle55
Mais quand je rentre mon mot de passe, l'action n'est pas reconnue :
Pourtant, l'action a l'air bonne avant le logout…

(pid 25419) login de stephane vers /spip.php?action=editer_mot&arg=63,evenements,id_evenement,evenement,1894&hash=6fd08c4c035ffb75a05dbc9c6bf7de39&redirect=spip.php%3Farticle55

(pid 25419) redirige: /spip.php?action=editer_mot&arg=63,evenements,id_evenement,evenement,1894&hash=6fd08c4c035ffb75a05dbc9c6bf7de39&redirect=spip.php%3Farticle55

(pid 25419) logout verifier_action_auteur(editer_mot-63,evenements,id_evenement,evenement,1894, 6fd08c4c035ffb75a05dbc9c6bf7de39)

(pid 25419) redirige: spip.php?action=logout&url=spip.php%3Fpage%3Dlogin%26url%3D%252Fspip.php%253Faction%253Dediter_mot%2526arg%253D63%252C%252Cevenements%252Cid_evenement%252Cevenement%252C1894%2526hash%253D6fd08c4c035ffb75a05dbc9c6bf7de39%2526redirect%253Dspip.php%25253Farticle55

(pid 25419) logout spip.php?page=login&url=%2Fspip.php%3Faction%3Dediter_mot%26arg%3D63%2C%2Cevenements%2Cid_evenement%2Cevenement%2C1894%26hash%3D6fd08c4c035ffb75a05dbc9c6bf7de39%26redirect%3Dspip.php%253Farticle553

(pid 25419) redirige: spip.php?page=login&url=%2Fspip.php%3Faction%3Dediter_mot%26arg%3D63%2C%2Cevenements%2Cid_evenement%2Cevenement%2C1894%26hash%3D6fd08c4c035ffb75a05dbc9c6bf7de39%26redirect%3Dspip.php%253Farticle55

Pourtant, après login, j'ai bien dans le log :
spip.php?action=editer_mot&arg=59,evenements,id_evenement,evenement,1894&hash=019818161bbebbdf25a2ec279ab953ba&redirect=spip.php&article55

Quelqu'un a une idée ?

@++

spipcarto a écrit :

Hello,

j'ai voulu faire un systeme de notification sur le plugin agenda et je coince un peu sur les actions.

Le but est d'envoyer un mail aux admins quand un evenement est ajouté, avec dans le mail, un lien permettant d'ajouter un mot clé.

Tout se passe bien si l'auteur est deja authentifié quand il clique sur le lien, mais s'il ne l'est pas, ou si il l'est avec un mauvais utilisateur, je voulais faire un logout / login / rediriger vers l'action.
  

Pour etre precis, mon probleme, si j'ai bien compris, est que le "pass" de l'auteur change à chaque login, ce qui fait qu'une action n'est plus utilisable si l'auteur repasse par la case authentification.

un visiteur poste un evenement (l'admin visé est l'auteur 3)
md5(editer_mot-48,evenements,id_evenement,evenement,1894,3,95eb616e07bf05339d67f5886e6841f0,1038800b5c4ff6b9de30d302c20dc152)=1df55eb69ec8885137225a8e136c3fda
son "pass" est alors : 95eb616e07bf05339d67f5886e6841f0

utiliser l'action sans etre authentifié (l'admin 3 clique sur le lien)
md5(editer_mot-48,evenements,id_evenement,evenement,1894,1038800b5c4ff6b9de30d302c20dc152)=8b92047b21e6b871bf1ce8e82e47c74b

login (l'admin 3 s'authentifie)
md5(editer_mot-48,evenements,id_evenement,evenement,1894,3,22c643ece1ff68fdc2b1f02184e09939,1038800b5c4ff6b9de30d302c20dc152)=00058caddc728c9c11f0662b59828e01
son "pass" est alors : 22c643ece1ff68fdc2b1f02184e09939

un autre visiteur poste un evenement avant le logout de l'admin 3
md5(editer_mot-49,evenements,id_evenement,evenement,1894,3,22c643ece1ff68fdc2b1f02184e09939,1038800b5c4ff6b9de30d302c20dc152)=04b80ee8ddce3c22d9b1625a69fccf15
son "pass" est toujours: 22c643ece1ff68fdc2b1f02184e09939

après re-login
_action_auteur(editer_mot-49,evenements,id_evenement,evenement,1894,3,ea386d799f5a037f0b3dc7359c0a7f78,1038800b5c4ff6b9de30d302c20dc152)=3125135135690b8c7a3682f8f6a61c41
son "pass" est alors : ea386d799f5a037f0b3dc7359c0a7f78

Bref, c'est bien pour la securité, mais du coup on ne peut plus generer des actions valables un peu plus longtemps.

Une idée sur la question ?

Merci.

@++