Skip to content

Commit

Permalink
Merge branch 'master' of github.com:hybridauth/hybridauth
Browse files Browse the repository at this point in the history
  • Loading branch information
AdwinTrave committed Nov 19, 2015
1 parent c0f213d commit 1d69bff
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 29 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Hybridauth Change log
Updates:
Updated LightOpenID to 1.2.0
#572 - Add cURL timeouts for OpenID
#582 - [Facebook] read_stream removed
Changes:
#567 - [Odnoklassniki] Get better size of user avatar
#570 - [odnoklassniki] Improve error reporting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,20 @@
* Hybrid_Providers_Odnoklassniki provider adapter based on OAuth2 protocol
*/
class Hybrid_Providers_Odnoklassniki extends Hybrid_Provider_Model_OAuth2
{
{
/**
* ID wrappers initializer
* ID wrappers initializer
*/
function initialize()
function initialize()
{
parent::initialize();
// Provider apis end-points
$this->api->api_base_url = "http://api.ok.ru/fb.do";
$this->api->authorize_url = "http://connect.ok.ru/oauth/authorize";
$this->api->token_url = "http://api.odnoklassniki.ru/oauth/token.do";
$this->api->token_url = "http://api.odnoklassniki.ru/oauth/token.do";
$this->api->sign_token_name = "access_token";
}

private function request($url, $params=false, $type="GET")
{
Hybrid_Logger::info("Enter OAuth2Client::request($url)");
Expand All @@ -43,7 +43,7 @@ private function request($url, $params=false, $type="GET")
curl_setopt($ch, CURLOPT_PROXY , $this->api->curl_proxy);
}
if ($type === "POST") {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POST, 1);
if ($params) curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
$response = curl_exec($ch);
Expand All @@ -52,9 +52,9 @@ private function request($url, $params=false, $type="GET")
$this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$this->http_info = array_merge($this->http_info, curl_getinfo($ch));
curl_close ($ch);
return $response;
return $response;
}

private function parseRequestResult($result)
{
if (json_decode($result)) return json_decode($result);
Expand All @@ -65,7 +65,7 @@ private function parseRequestResult($result)
}
return $result;
}

function authodnoklass($code)
{
$params = array(
Expand All @@ -75,46 +75,46 @@ function authodnoklass($code)
"redirect_uri" => $this->api->redirect_uri,
"code" => $code
);

$response = $this->request($this->api->token_url, http_build_query($params, '', '&'), $this->api->curl_authenticate_method);
$response = $this->parseRequestResult($response);

if (!$response || !isset($response->access_token)) {
throw new Exception("The Authorization Service has return: " . $response->error);
}
if (isset($response->access_token)) $this->api->access_token = $response->access_token;
if (isset($response->refresh_token)) $this->api->refresh_token = $response->refresh_token;
if (isset($response->expires_in)) $this->api->access_token_expires_in = $response->expires_in;
if (isset($response->refresh_token)) $this->api->refresh_token = $response->refresh_token;
if (isset($response->expires_in)) $this->api->access_token_expires_in = $response->expires_in;

// Calculate when the access token expire.
// At this moment Odnoklassniki does not return expire time in response.
// 30 minutes expire time staten in dev docs http://apiok.ru/wiki/pages/viewpage.action?pageId=42476652
if (isset($response->expires_in)) {
$this->api->access_token_expires_at = time() + $response->expires_in;
$this->api->access_token_expires_at = time() + $response->expires_in;
}
else {
$this->api->access_token_expires_at = time() + 1800;
$this->api->access_token_expires_at = time() + 1800;
}
return $response;
return $response;
}

function loginFinish()
{
$error = (array_key_exists('error',$_REQUEST))?$_REQUEST['error']:"";
// Check for errors
if ($error) {
if ($error) {
throw new Exception("Authentication failed! {$this->providerId} returned an error: $error", 5);
}
// Try to authenticate user
$code = (array_key_exists('code',$_REQUEST))?$_REQUEST['code']:"";
try {
$this->authodnoklass($code);
$this->authodnoklass($code);
}
catch (Exception $e) {
throw new Exception("User profile request failed! {$this->providerId} returned an error: $e", 6);
throw new Exception("User profile request failed! {$this->providerId} returned an error: $e->getMessage() ", 6);
}
// Check if authenticated
if (!$this->api->access_token) {
if (!$this->api->access_token) {
throw new Exception("Authentication failed! {$this->providerId} returned an invalid access token.", 5);
}
// Store tokens
Expand All @@ -125,7 +125,7 @@ function loginFinish()
// Set user connected locally
$this->setUserConnected();
}

/**
* Load the user profile.
*/
Expand All @@ -135,16 +135,16 @@ function getUserProfile()
// @see https://apiok.ru/wiki/display/api/users.getCurrentUser+ru
// @see https://apiok.ru/wiki/display/api/fields+ru
$fields = "UID,LOCALE,FIRST_NAME,LAST_NAME,NAME,GENDER,AGE,BIRTHDAY,HAS_EMAIL,EMAIL,CURRENT_STATUS,CURRENT_STATUS_ID,CURRENT_STATUS_DATE,ONLINE,PHOTO_ID,PIC190X190,PIC640X480,LOCATION";

// Signature
$sig = md5('application_key=' . $this->config['keys']['key'] . 'fields=' . $fields .'method=users.getCurrentUser' . md5($this->api->access_token . $this->api->client_secret));
// Signed request
$response = $this->api->api('?application_key=' . $this->config['keys']['key'] . '&fields=' . $fields .'&method=users.getCurrentUser&sig=' . $sig);
$response = $this->api->api('?application_key=' . $this->config['keys']['key'] . '&fields=' . $fields .'&method=users.getCurrentUser&sig=' . $sig);

if (!isset($response->uid)) {
throw new Exception("User profile request failed! {$this->providerId} returned an invalid response.", 6);
}

$this->user->profile->identifier = (property_exists($response,'uid'))?$response->uid:"";
$this->user->profile->firstName = (property_exists($response,'first_name'))?$response->first_name:"";
$this->user->profile->lastName = (property_exists($response,'last_name'))?$response->last_name:"";
Expand All @@ -156,7 +156,7 @@ function getUserProfile()
$this->user->profile->gender = (property_exists($response,'gender'))?$response->gender:"";
$this->user->profile->email = (property_exists($response,'email'))?$response->email:"";
$this->user->profile->emailVerified = (property_exists($response,'email'))?$response->email:"";
if (property_exists($response, 'birthday')) {
if (property_exists($response, 'birthday')) {
list($birthday_year, $birthday_month, $birthday_day) = explode('-', $response->birthday);
$this->user->profile->birthDay = (int) $birthday_day;
$this->user->profile->birthMonth = (int) $birthday_month;
Expand Down
2 changes: 1 addition & 1 deletion hybridauth/Hybrid/Providers/Facebook.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class Hybrid_Providers_Facebook extends Hybrid_Provider_Model {
* default permissions, and a lot of them. You can change them from the configuration by setting the scope to what you want/need
* {@inheritdoc}
*/
public $scope = "email, user_about_me, user_birthday, user_hometown, user_location, user_website, read_stream, publish_actions, read_custom_friendlists";
public $scope = "email, user_about_me, user_birthday, user_hometown, user_location, user_website, publish_actions, read_custom_friendlists";

/**
* Provider API client
Expand Down

0 comments on commit 1d69bff

Please sign in to comment.