Changeset 32341 in spip-zone


Ignore:
Timestamp:
Oct 24, 2009, 3:54:18 PM (11 years ago)
Author:
cedric@…
Message:

calquer le process de retour sur la version 2.1, en adaptant a l'absence d'api auth

Location:
_plugins_/authentification/openid/spip_2_0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/authentification/openid/spip_2_0/action/controler_openid.php

    r32326 r32341  
    3333// en creant le bon cookie.
    3434
    35 function action_controler_openid() {
     35function action_controler_openid_dist() {
    3636
    37         // La cible de notre operation de connexion
    38         $url = _request('url');
    39         $redirect = isset($url) ? $url : _DIR_RESTREINT_ABS;
     37        $securiser_action = charger_fonction('securiser_action', 'inc');
     38        $arg = $securiser_action();
    4039
    41         // Verifier l'openid revenant
    42         include_spip('inc/openid');
    43         terminer_authentification_openid($redirect);
     40        if (!$login = $arg) {
     41                spip_log("action_controler_openid_dist $arg pas compris");
     42        }
     43        else {
     44                include_spip('auth/openid');
     45                $res = auth_openid_terminer_identifier_login($login);
     46
     47                if (is_string($res)){ // Erreur
     48                        $redirect = _request('redirect');
     49                        $redirect = parametre_url($redirect,'var_erreur',$res);
     50                        include_spip('inc/headers');
     51                        redirige_par_entete($redirect);
     52                }
     53
     54                // sinon on loge l'auteur identifie, et on finit (redirection automatique)
     55                auth_loger($res);
     56        }
    4457
    4558}
  • _plugins_/authentification/openid/spip_2_0/auth/openid.php

    r32340 r32341  
    1111
    1212// http://doc.spip.org/@inc_auth_ldap_dist
    13 function auth_openid_dist ($login, $pass, $md5pass="", $md5next="", $log_step='check') {
     13function auth_openid_dist ($login, $pass, $md5pass="", $md5next="") {
    1414
    1515        // il faut un login non vide et qui contient au moins un point
     
    3232        // et qu'il a pas fournit de pass
    3333        // dans ce cas, si l'utilisateur a un openid on peut tenter de la loger avec !
    34         if ($log_step=='check' AND !$auteur){
     34        if (!$auteur){
    3535                // Si l'utilisateur figure dans la base, y recuperer les infos
    3636                $auteur = sql_fetsel("*", "spip_auteurs", array("statut!=".sql_quote("5poubelle") , "login=" . sql_quote($login). " AND openid>''"));
    3737        }
    3838
    39         if ($log_step=='check' AND $auteur) {
     39        if ($auteur) {
    4040                // * Si l'openid existe, la procedure continue en redirigeant
    4141                // vers le fournisseur d'identite. En cas d'erreur, il y a une redirection de faite
     
    4444                // pour d'autres methodes d'identification
    4545                include_spip('inc/openid');
    46                 $retour = parametre_url(openid_url_reception(), "url", url_absolue($cible), '&');
    47                 $erreurs_openid = demander_authentification_openid($auteur['openid'], url_absolue(self()));
     46                $retour = auth_openid_url_retour_login($auteur['login'],url_absolue(self()));
     47                $erreurs_openid = demander_authentification_openid($auteur['openid'], $retour);
    4848                // potentiellement, on arrive ici avec une erreur si l'openid donne n'existe pas
    4949                $auteur = false;
    50         }
    51 
    52         if ($auteur AND $log_step=='ok'){
    53                 $auteur['auth'] = 'openid';
    5450        }
    5551
     
    5854
    5955
     56function auth_openid_terminer_identifier_login($login, $serveur=''){
     57        include_spip('inc/openid');
     58        $retour = auth_openid_url_retour_login($login);
     59        $auteur = terminer_authentification_openid($retour);
     60
     61        if (is_string($auteur))
     62                return $auteur; // erreur !
     63
     64        if (is_array($auteur)
     65                AND isset($auteur['openid'])
     66                AND $openid = $auteur['openid']
     67          AND $auteur = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($login)." AND openid=".sql_quote($openid),"","","","",$serveur)){
     68
     69                $auteur['auth'] = 'openid'; // on se log avec cette methode, donc
     70                return $auteur;
     71        }
     72        return false;
     73}
     74
     75
     76
     77/**
     78 * Fournir une url de retour apres login par un SSO
     79 * pour finir l'authentification
     80 *
     81 * @param string $auth_methode
     82 * @param string $login
     83 * @param string $serveur
     84 * @return string
     85 */
     86function auth_openid_url_retour_login($login, $redirect='', $serveur=''){
     87        $securiser_action = charger_fonction('securiser_action','inc');
     88        return $securiser_action('controler_openid', $login, $redirect, true);
     89}
     90
     91
     92 /**
     93  * Loger un auteur suite a son identification
     94  *
     95  * @param array $auteur
     96  */
     97 function auth_loger($auteur){
     98        if (!is_array($auteur) OR !count($auteur))
     99                return false;
     100
     101        $session = charger_fonction('session', 'inc');
     102        $session($auteur);
     103        $p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
     104        $p['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
     105        $p = array('prefs' => serialize($p));
     106        sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']);
     107
     108        // Si on est admin, poser le cookie de correspondance
     109        if ($auteur['statut'] == '0minirezo') {
     110                include_spip('inc/cookie');
     111                spip_setcookie('spip_admin', '@'.$auteur['login'],
     112                time() + 7 * 24 * 3600);
     113        }
     114
     115        //  bloquer ici le visiteur qui tente d'abuser de ses droits
     116        verifier_visiteur();
     117        return true;
     118}
    60119?>
Note: See TracChangeset for help on using the changeset viewer.