source: spip-zone/_plugins_/gfc/action/gfc_auth.php @ 31948

Last change on this file since 31948 was 31948, checked in by kent1@…, 11 years ago

Une configuration qui doit être compatible de deux méthodes :

  • par l'intermédiaire de defines et non plus $GLOBALS
  • par l'intermédiaire de CFG

Puisque l'on utilise la bibliothèque originale de opensocial, un fichier doit être ajouté (auth/osapiFCAuth) et un doit surcharger la librairie originale (auth/osapiSecurityToken), la seule manière simple de le faire est de modifier le set_include_path mais je ne suis pas sur que ce soit la meilleure solution

File size: 4.6 KB
Line 
1<?
2
3/**
4 * Action d'autentification par GFC
5 *
6 * @return
7 */
8include_spip('base/abstract_sql');
9function action_gfc_auth_dist() {
10        //ini_set("error_reporting", E_ALL);
11        //ini_set("display_errors", 1);
12       
13        // Set the default timezone since many servers won't have this configured
14        //date_default_timezone_set('America/Los_Angeles');
15       
16        if(function_exists('lire_config')){
17                $id = lire_config('gfc/consumer_id') ? lire_config('gfc/consumer_id') : _GFC_CONSUMER_ID;
18                $key = lire_config('gfc/consumer_key') ? lire_config('gfc/consumer_key') : _GFC_CONSUMER_KEY;
19                $secret = lire_config('gfc/consumer_secret') ? str_replace('*:','',lire_config('gfc/consumer_secret')) : str_replace('*:','',_GFC_CONSUMER_SECRET);
20                $default_email = lire_config('gfc/default_email') ? str_replace('*:','',lire_config('gfc/default_email')) : str_replace('*:','',_GFC_DEFAULT_EMAIL);
21        }else{
22                $id = _GFC_CONSUMER_ID;
23                $secret = _GFC_CONSUMER_SECRET;
24                $default_email = _GFC_DEFAULT_EMAIL;
25        }
26        $token = $_COOKIE['fcauth'.$id];
27        spip_log("token = $token");
28        //get osapi info
29        $display_name = $member_id = false;
30        include_spip(_DIR_OSAPI."osapi");
31        //include_spip("auth/osapiSecurityToken");
32        include_spip("auth/osapiFCAuth");
33        include_spip('inc/texte');
34        include_spip('base/abstract_sql');
35        $provider = new osapiFriendConnectProvider();
36        //$auth = new osapiOAuth2Legged($key, $secret);
37        $auth = new osapiFCAuth($token);
38        $osapi = new osapi($provider, $auth);
39        $strictMode = true;
40        if ($osapi) {
41                $batch = $osapi->newBatch();
42                //$request = $osapi->people->get($self_request_params), 'self');
43                $request = $osapi->people->get(array('userId'=>'@viewer', 'groupId'=>'@self'));
44                $batch->add($request, 'self');
45                $result = $batch->execute();
46                $me = $result['self'];
47                spip_log($result);
48                if ($me instanceof osapiError) {
49                        $code = $me->getErrorCode();
50                $message = $me->getErrorMessage();
51                        die("$code - $message");
52                }
53                else{
54                        $display_name =  $me->getFieldByName("displayName");
55                        $member_id =  $me->getFieldByName("id");
56                        if(trim($display_name) == '') $display_name = $member_id;
57                }
58                spip_log("member_id = $member_id");
59        }
60        //END get osapi info
61       
62        if($member_id){
63                //try to login SPIP if google friend account already binded
64                if (login_spip($member_id)){
65                       
66                }
67                //elseif member already connected in SPIP...
68                else if($GLOBALS['visiteur_session']['id_auteur'] !=''){
69                        //if he already has a gfc_id, we do nothing !!THIS IS BAD, WE NEED TO WORK ON THIS CASE!!
70                        $id_auteur = sql_getfetsel("id_auteur","spip_auteurs","id_auteur=".intval($GLOBALS['visiteur_session']['id_auteur'])." AND gfc_uid=''");
71                        // else we consider this is an attempt to bind a spip account to a google friend account, we automatically bind the 2 account
72                        if($id_auteur){
73                                sql_updateq("spip_auteurs",array('gfc_uid'=> $member_id),"id_auteur=".intval($GLOBALS['visiteur_session']['id_auteur']));
74                        }
75                }
76                //if not connected to SPIP and gfc_id not in our system, we create a new SPIP account
77                else if(!sql_getfetsel("id_auteur","spip_auteurs","gfc_uid='$member_id'")){
78                        $declaration = array();
79                        spip_log($_COOKIE['GAUSER']);
80                        $declaration['statut'] = '6forum';
81                        $declaration['nom'] = safehtml($display_name);
82                        $declaration['login'] = preg_replace("[^a-zA-Z0-9_]", "_", $declaration['nom']);
83                        $declaration['email'] = $default_email;
84                        $declaration['gfc_uid'] = $member_id;
85                        $declaration['en_ligne'] = 'NOW()';
86                        $n = sql_insertq('spip_auteurs',$declaration);
87                        $declaration['id_auteur'] = $n;
88                }
89                login_spip($member_id);
90        }
91        if($_SESSION["gfc"]["login_redirect"] != '') $url_retour = $_SESSION["gfc"]["login_redirect"];
92        else $url_retour = "/";
93        header("Location: $url_retour");
94        die();
95}
96
97function login_spip($gfc_id, $spip_id=''){
98        if(intval($gfc_id)){
99                spip_log($gfc_id);
100                $res = sql_select("*","spip_auteurs","gfc_uid='$gfc_id'");
101                $res = sql_fetch($res);
102                spip_log($res);
103        } 
104        elseif($spip_id != '') $res = sql_fetsel("*","spip_auteurs","id_auteur=".sql_quote($spip_id),"","","1");
105        if ($res){
106                spip_log($res);
107                $auth_source = 'gfc';
108                $res['auth'] = $auth_source;
109                // create session
110                $session = charger_fonction('session','inc');
111                $spip_session = $session($res);
112                // create cookie
113                $_COOKIE['spip_session'] = $spip_session;
114                preg_match(',^[^/]*//[^/]*(.*)/$,',
115                           url_de_base(),
116                           $r);
117                spip_log($r);
118                include_spip('inc/cookie');
119                spip_setcookie('spip_session', $spip_session, time() + 3600 * 24 * 14, $r[1]);
120                // antentification
121                $auth = charger_fonction('auth','inc');
122                $auth();
123                return true;
124        }
125        return false;
126}
127
128?>
Note: See TracBrowser for help on using the repository browser.