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

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

moins de debug

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