mirror of
https://github.com/e107inc/e107.git
synced 2025-02-22 07:47:10 +01:00
171 lines
5.7 KiB
PHP
171 lines
5.7 KiB
PHP
<?php
|
|
|
|
/* !
|
|
* Hybridauth
|
|
* https://hybridauth.github.io/hybridauth | https://github.com/hybridauth/hybridauth
|
|
* (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
|
|
*/
|
|
|
|
/**
|
|
* Hybrid_Providers_LinkedIn OAuth2 provider adapter.
|
|
*/
|
|
class Hybrid_Providers_LinkedIn extends Hybrid_Provider_Model_OAuth2 {
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public $scope = "r_basicprofile r_emailaddress";
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
function initialize() {
|
|
parent::initialize();
|
|
|
|
// Provider api end-points.
|
|
$this->api->api_base_url = "https://api.linkedin.com/v1/";
|
|
$this->api->authorize_url = "https://www.linkedin.com/oauth/v2/authorization";
|
|
$this->api->token_url = "https://www.linkedin.com/oauth/v2/accessToken";
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
function loginBegin() {
|
|
if (is_array($this->scope)) {
|
|
$this->scope = implode(" ", $this->scope);
|
|
}
|
|
parent::loginBegin();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @see https://developer.linkedin.com/docs/rest-api
|
|
*/
|
|
function getUserProfile() {
|
|
// Refresh tokens if needed.
|
|
$this->setHeaders("token");
|
|
$this->refreshToken();
|
|
|
|
// https://developer.linkedin.com/docs/fields.
|
|
$fields = isset($this->config["fields"]) ? $this->config["fields"] : [
|
|
"id",
|
|
"email-address",
|
|
"first-name",
|
|
"last-name",
|
|
"headline",
|
|
"location",
|
|
"industry",
|
|
"picture-url",
|
|
"public-profile-url",
|
|
];
|
|
|
|
$this->setHeaders();
|
|
$response = $this->api->get(
|
|
"people/~:(" . implode(",", $fields) . ")",
|
|
array(
|
|
"format" => "json",
|
|
)
|
|
);
|
|
|
|
if (!isset($response->id)) {
|
|
throw new Exception("User profile request failed! {$this->providerId} returned an invalid response: " . Hybrid_Logger::dumpData($response), 6);
|
|
}
|
|
|
|
$this->user->profile->identifier = isset($response->id) ? $response->id : "";
|
|
$this->user->profile->firstName = isset($response->firstName) ? $response->firstName : "";
|
|
$this->user->profile->lastName = isset($response->lastName) ? $response->lastName : "";
|
|
$this->user->profile->photoURL = isset($response->pictureUrl) ? $response->pictureUrl : "";
|
|
$this->user->profile->profileURL = isset($response->publicProfileUrl) ? $response->publicProfileUrl : "";
|
|
$this->user->profile->email = isset($response->emailAddress) ? $response->emailAddress : "";
|
|
$this->user->profile->description = isset($response->headline) ? $response->headline : "";
|
|
$this->user->profile->country = isset($response->location) ? $response->location->name : "";
|
|
$this->user->profile->emailVerified = $this->user->profile->email;
|
|
$this->user->profile->displayName = trim($this->user->profile->firstName . " " . $this->user->profile->lastName);
|
|
|
|
return $this->user->profile;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*
|
|
* @param array $status
|
|
* An associative array containing:
|
|
* - content: A collection of fields describing the shared content.
|
|
* - comment: A comment by the member to associated with the share.
|
|
* - visibility: A collection of visibility information about the share.
|
|
*
|
|
* @return object
|
|
* An object containing:
|
|
* - updateKey - A unique ID for the shared content posting that was just created.
|
|
* - updateUrl - A direct link to the newly shared content on LinkedIn.com that you can direct the user's web browser to.
|
|
* @throws Exception
|
|
* @see https://developer.linkedin.com/docs/share-on-linkedin
|
|
*/
|
|
function setUserStatus($status) {
|
|
// Refresh tokens if needed.
|
|
$this->setHeaders("token");
|
|
$this->refreshToken();
|
|
|
|
try {
|
|
// Define default visibility.
|
|
if (!isset($status["visibility"])) {
|
|
$status["visibility"]["code"] = "anyone";
|
|
}
|
|
|
|
$this->setHeaders("share");
|
|
$response = $this->api->post(
|
|
"people/~/shares?format=json",
|
|
array(
|
|
"body" => $status,
|
|
)
|
|
);
|
|
} catch (Exception $e) {
|
|
throw new Exception("Update user status failed! {$this->providerId} returned an error: {$e->getMessage()}", 0, $e);
|
|
}
|
|
|
|
if (!isset($response->updateKey)) {
|
|
throw new Exception("Update user status failed! {$this->providerId} returned an error: {$response->message}", $response->errorCode);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Set correct request headers.
|
|
*
|
|
* @param string $api_type
|
|
* (optional) Specify api type.
|
|
*
|
|
* @return void
|
|
*/
|
|
private function setHeaders($api_type = null) {
|
|
$this->api->curl_header = array(
|
|
"Authorization: Bearer {$this->api->access_token}",
|
|
);
|
|
|
|
switch ($api_type) {
|
|
case "share":
|
|
$this->api->curl_header = array_merge(
|
|
$this->api->curl_header,
|
|
array(
|
|
"Content-Type: application/json",
|
|
"x-li-format: json",
|
|
)
|
|
);
|
|
break;
|
|
|
|
case "token":
|
|
$this->api->curl_header = array_merge(
|
|
$this->api->curl_header,
|
|
array(
|
|
"Content-Type: application/x-www-form-urlencoded",
|
|
)
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|