source: spip-zone/_plugins_/plugin-thelia/auth/thelia.php @ 47979

Last change on this file since 47979 was 47979, checked in by cam.lafit@…, 10 years ago

Ajout d'un pipeline post authentification Thelia

  • Pour le moment on ne peut se greffer sur un pipeline spip (le systeme d'authentification est déroutée entre temps)
  • Une fois authentifie par Thelia, il est interessant de pouvoir remonter des informations vers SPIP pour personnaliser le compte
    • Un cas classique est de controler les commandes valides afin de lever des restriction de consultation
File size: 5.8 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2008                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13include_spip('inc/session');
14if (!defined("_ECRIRE_INC_VERSION")) return;
15
16         
17          error_reporting(E_ALL);
18// Authentifie via Thélia et retourne la ligne SQL decrivant l'utilisateur si ok
19
20// http://doc.spip.org/@inc_auth_ldap_dist
21function auth_thelia_dist ($login, $pass, $md5pass="", $md5next="") {
22                       
23        if (lire_config("spip_thelia/auth_unique_spip_thelia","non")=="oui") {
24
25                  spip_log("thelia2 $login " . ($pass ? "mdp fourni" : "mdp absent"). ($md5pass ? "md5mdp fourni" : "md5mdp absent"));
26                  if (!file_exists(_RACINE_THELIA."fonctions/moteur.php") ) {
27                      spip_log("fichier thelia trouve");
28                        return array();
29                  }
30                 spip_log("thelia1"); //récupérer le nom de la base spip
31                  if ($result = mysql_query("SELECT DATABASE()")) {
32                    $row = mysql_fetch_row($result);
33                    $spip_db = $row[0];
34                  }
35                  spip_log("test1, db courante=".$spip_db);
36                    $res =" foo ";
37                  ob_start();
38                    include_once(_RACINE_THELIA.'fonctions/moteur.php');
39                    ob_end_clean();
40                    //include_once('classes/Client.class.php');
41                  spip_log("test2");
42                 
43                               
44                  // Securite
45                  if (!$login || (!$pass && !$md5pass)) return array();
46
47                             
48                 
49
50                  // Utilisateur connu ?
51                          $client = New Client();
52                          $rec = $client->charger($login, $pass);
53
54                          //revenir sur la base spip
55                          $resultconnect = mysql_select_db($spip_db);
56                           spip_log("spipdb=".$spip_db." - ".$resultconnect);
57                          if($rec) {
58                                  spip_log("thelia $login utilisateur connu");
59                                  $_SESSION['navig']->client = $client;
60                                  $_SESSION['navig']->connecte = 1; 
61                                  modules_fonction("apresconnexion");
62                               
63                                // importer les infos depuis thelia,
64                                // avec le statut par defaut a l'install
65                                // refuser d'importer n'importe qui
66                                if (!$statut = $GLOBALS['thelia_statut_nouvel_auteur']) return array();
67                       
68                                if ($result = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($login) . " AND source='thelia'")) {
69                                          $data = pipeline('thelia_authentifie',array("auteur" => $result,"statut"=>"existant"));
70                                      return $result;
71                                }
72                               
73                                spip_log("thelia2");
74                                // Recuperer les donnees de l'auteur
75                                // Convertir depuis UTF-8 (jeu de caracteres par defaut)
76                                include_spip('inc/charsets');
77                                $nom = $client->nom.' '.$client->prenom;
78                                $email = $login;
79                                $bio = '';
80                                $resultconnect = mysql_select_db($spip_db);
81                                spip_log("thelia2bis-connect=".$resultconnect);
82                                $n = sql_insertq('spip_auteurs', array(
83                                                'source' => 'thelia',
84                                                'nom' => $nom,
85                                                'login' => $login,
86                                                'email' => $email,
87                                                'bio' => $bio,
88                                                'statut' => $statut,
89                                                'pass' => ''),0);
90                                spip_log("thelia3");
91                                spip_log("Creation de l'auteur '$nom' depuis thelia dans spip_auteurs id->".$n);
92                             
93                                spip_log("thelia4");
94             
95                                if($_SESSION['navig']->urlpageret) {
96                                     spip_log("redirige vers ".$_SESSION['navig']->urlpageret);
97                                          redirige($_SESSION['navig']->urlpageret);
98                                } else {
99                                      spip_log("redirige vers index.php");
100                                      redirige("index.php");
101                                }
102                                spip_log("test6");
103                                if ($n) {
104                                        $data = pipeline('thelia_authentifie',array("auteur" => $n,"statut"=>"nouveau"));
105                                    return sql_fetsel("*", "spip_auteurs", "id_auteur=$n");
106                                }
107
108                                spip_log("Creation de l'auteur '$nom' depuis thelia impossible");
109                               
110                               
111                               
112                                return array(); 
113                               
114                        } else {
115                              //utilisateur inconnu
116                              spip_log("thelia $login utilisateur inconnu");
117                              redirige("connexion.php?errconnex=1");
118                              return array(); 
119                        }
120        } 
121spip_log("thelia0");
122       
123        return array();
124     
125}
126
127/*
128        $auteur = array(login,pass,client)
129*/
130function creer_auteur_thelia($auteur) {
131
132        //Empecher un doublon
133        if ($result = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($auteur['login']) . " AND source='thelia'")) {
134              spip_log("l'utilisateur $login est déjà enregistré dans spip tout va bien",'theliaob');
135              return $result;
136        }
137       
138        //charger le support thelia     
139        ob_start();
140                include_once('fonctions/moteur.php');
141        ob_end_clean(); 
142
143        //Empecher un doublon
144        if ($result = sql_fetsel("*", "spip_auteurs", "login=" . sql_quote($auteur['client']->email) . " AND source='thelia'")) {
145              spip_log("l'utilisateur $login est déjà enregistré dans spip tout va bien",'theliaob');
146              return $result;
147        }
148
149        //Tester la présence dans thelia
150        $client = $auteur['client'];
151        if (!$auteur['client']) {
152                $client = New Client();
153                if (!$client->charger($auteur['login'], $auteur['pass']))
154                        return array(); 
155        }
156
157        //Valeur par défaut
158        if (!$statut = $GLOBALS['thelia_statut_nouvel_auteur']) { 
159                spip_log('erreur pas de statut defini par defaut','theliaob');
160                return array(); 
161        }
162
163        spip_log("enregistrement auteur",'theliaob');
164        // Recuperer les donnees de l'auteur
165        // Convertir depuis UTF-8 (jeu de caracteres par defaut)
166        include_spip('inc/charsets');
167        $nom = $client->nom.' '.$client->prenom;
168        $login = $email = $client->email;
169        $bio = '';
170        $n = sql_insertq(
171                'spip_auteurs', 
172                array(
173                        'source' => 'thelia',
174                        'nom' => $nom,
175                        'login' => $login,
176                        'email' => $email,
177                        'bio' => $bio,
178                        'statut' => $statut,
179                        'pass' => '')
180                );
181        spip_log('Auteur depuis thelia d\'id '.$n,'theliaob');
182
183        return sql_fetsel("*", "spip_auteurs", "id_auteur=$n");
184}
185?>
Note: See TracBrowser for help on using the repository browser.