'slogin.log'), JLog :: ALL, array('slogin')); // $redirect = JURI::base().'?option=com_slogin&task=check&plugin=live' ; //TODO ERI: ms live oauth does not allow query strings in the register App Redirect uris // in order to bypass this, we make a SEF url redirect for slogin/live -> index.php?option=com_slogin&lang=en&plugin=live&task=check // and give the slogin/live redirect to MS. $redirect = ('https://www.openaire.eu/slogin/live'); $scope = 'wl.signin wl.basic wl.emails' ; $params = array( 'response_type=code', 'redirect_uri='.$redirect, 'client_id=' . $this->params->get('id'), 'scope=' . $scope, 'display=popup', ); $params = implode('&', $params); //https://login.live.com/oauth20_authorize.srf?client_id=CLIENT_ID&scope=SCOPES&response_type=code&redirect_uri=REDIRECT_URI $url = 'https://login.live.com/oauth20_authorize.srf?'.$params; JLog :: add('URL LIVE AUTH URL'.$url , JLog :: DEBUG, 'slogin'); return $url; } public function onSloginCheck() { require_once JPATH_BASE.'/components/com_slogin/controller.php'; $controller = new SLoginController(); $input = JFactory::getApplication()->input; $code = $input->get('code', null, 'STRING'); $returnRequest = new SloginRequest(); if ($code) { JLog :: add('URL LIVE AUTH code'.$code, JLog :: DEBUG, 'slogin'); // get access_token for google API //$redirect = (JURI::base().'?option=com_slogin&task=check&plugin=live'); $redirect = ('https://www.openaire.eu/slogin/live'); $params = array( 'client_id=' . $this->params->get('id'), 'client_secret=' . $this->params->get('password'), 'grant_type=authorization_code', 'code=' . $code, 'redirect_uri=' . $redirect ); $params = implode('&', $params); $url = 'https://login.live.com/oauth20_token.srf'; $request = json_decode($controller->open_http($url, true, $params)); if(empty($request)){ echo 'Error - empty access tocken'; JLog :: add('URL LIVE AUTH Error - empty access tocken ', JLog :: DEBUG, 'slogin'); exit; } $url = 'https://apis.live.net/v5.0/me?access_token='.$request->access_token; $request = json_decode($controller->open_http($url)); if(empty($request)){ echo 'Error - empty user data'; exit; } else if(!empty($request->error)){ echo 'Error - '. $request->error; exit; } /* object(stdClass)#534 (9) { ["id"]=> string(16) "d5f1256f7b5322c7" ["name"]=> string(37) "Аркадий Седельников" ["first_name"]=> string(14) "Аркадий" ["last_name"]=> string(22) "Седельников" ["link"]=> string(25) "https://profile.live.com/" ["gender"]=> NULL ["emails"]=> object(stdClass)#533 (4) { ["preferred"]=> string(22) "a.sedelnikov@gmail.com" ["account"]=> string(22) "a.sedelnikov@gmail.com" ["personal"]=> NULL ["business"]=> NULL } ["locale"]=> string(5) "ru_RU" ["updated_time"]=> string(24) "2013-02-09T04:50:26+0000" } */ if(!empty($request->emails->preferred)) $email = $request->emails->preferred; else if(!empty($request->emails->account)) $email = $request->emails->account; else if(!empty($request->emails->personal)) $email = $request->emails->personal; else if(!empty($request->emails->business)) $email = $request->emails->business; else $email = ''; $returnRequest->first_name = $request->first_name; $returnRequest->last_name = $request->last_name; $returnRequest->email = $email; $returnRequest->id = $request->id; $returnRequest->real_name = $request->name; $returnRequest->sex = $request->gender; $returnRequest->display_name = $request->name; $returnRequest->all_request = $request; return $returnRequest; } else{ echo 'Error - empty code'; exit; } } public function onCreateSloginLink(&$links, $add = '') { $i = count($links); $links[$i]['link'] = 'index.php?option=com_slogin&task=auth&plugin=live' . $add; $links[$i]['class'] = 'liveslogin'; $links[$i]['plugin_name'] = 'live'; $links[$i]['plugin_title'] = JText::_('COM_SLOGIN_PROVIDER_LIVE'); } }