OpenIDConnectLinkedinClient.php in OpenID Connect / OAuth client 8
File
src/Plugin/OpenIDConnectClient/OpenIDConnectLinkedinClient.php
View source
<?php
namespace Drupal\openid_connect\Plugin\OpenIDConnectClient;
use Drupal\Core\Form\FormStateInterface;
use Drupal\openid_connect\Plugin\OpenIDConnectClientBase;
class OpenIDConnectLinkedinClient extends OpenIDConnectClientBase {
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$url = 'https://www.linkedin.com/developer/apps';
$form['description'] = [
'#markup' => '<div class="description">' . $this
->t('Set up your app in <a href="@url" target="_blank">my apps</a> on LinkedIn.', [
'@url' => $url,
]) . '</div>',
];
return $form;
}
public function getEndpoints() {
return [
'authorization' => 'https://www.linkedin.com/oauth/v2/authorization',
'token' => 'https://www.linkedin.com/oauth/v2/accessToken',
'userinfo' => 'https://api.linkedin.com/v2/me?projection=(id,localizedFirstName,localizedLastName,profilePicture(displayImage~:playableStreams))',
'useremail' => 'https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))',
];
}
public function authorize($scope = 'openid email') {
return parent::authorize('r_liteprofile r_emailaddress');
}
public function decodeIdToken($id_token) {
return [];
}
public function retrieveUserInfo($access_token) {
$userinfo = [];
$info = parent::retrieveUserInfo($access_token);
if ($info) {
$userinfo['sub'] = isset($info['id']) ? $info['id'] : '';
$userinfo['first_name'] = isset($info['localizedFirstName']) ? $info['localizedFirstName'] : '';
$userinfo['last_name'] = isset($info['localizedLastName']) ? $info['localizedLastName'] : '';
$userinfo['name'] = $userinfo['first_name'] . ' ' . $userinfo['last_name'];
if (isset($info['profilePicture']['displayImage~']['elements'])) {
$pictures = $info['profilePicture']['displayImage~']['elements'];
$last_picture = end($pictures);
if (isset($last_picture['identifiers'][0]['identifier'])) {
$userinfo['picture'] = $last_picture['identifiers'][0]['identifier'];
}
}
else {
$userinfo['picture'] = '';
}
}
if ($email = $this
->retrieveUserEmail($access_token)) {
$userinfo['email'] = $email;
}
return $userinfo;
}
protected function retrieveUserEmail($access_token) {
$request_options = [
'headers' => [
'Authorization' => 'Bearer ' . $access_token,
'Accept' => 'application/json',
],
];
$endpoints = $this
->getEndpoints();
try {
$response = $this->httpClient
->get($endpoints['useremail'], $request_options);
$object = json_decode((string) $response
->getBody(), TRUE);
if (isset($object['elements'])) {
foreach ($object['elements'] as $element) {
if (isset($element['handle~']['emailAddress'])) {
return $element['handle~']['emailAddress'];
}
}
}
} catch (\Exception $e) {
$variables = [
'@message' => 'Could not retrieve user email information',
'@error_message' => $e
->getMessage(),
];
$this->loggerFactory
->get('openid_connect_' . $this->pluginId)
->error('@message. Details: @error_message', $variables);
}
return FALSE;
}
}