class OpenIDConnectGithubClient in OpenID Connect / OAuth client 8
Same name and namespace in other branches
- 2.x src/Plugin/OpenIDConnectClient/OpenIDConnectGithubClient.php \Drupal\openid_connect\Plugin\OpenIDConnectClient\OpenIDConnectGithubClient
GitHub OpenID Connect client.
Implements OpenID Connect Client plugin for GitHub.
Plugin annotation
@OpenIDConnectClient(
id = "github",
label = @Translation("GitHub")
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\openid_connect\Plugin\OpenIDConnectClientBase implements ContainerFactoryPluginInterface, OpenIDConnectClientInterface uses StringTranslationTrait
- class \Drupal\openid_connect\Plugin\OpenIDConnectClient\OpenIDConnectGithubClient
- class \Drupal\openid_connect\Plugin\OpenIDConnectClientBase implements ContainerFactoryPluginInterface, OpenIDConnectClientInterface uses StringTranslationTrait
Expanded class hierarchy of OpenIDConnectGithubClient
File
- src/
Plugin/ OpenIDConnectClient/ OpenIDConnectGithubClient.php, line 18
Namespace
Drupal\openid_connect\Plugin\OpenIDConnectClientView source
class OpenIDConnectGithubClient extends OpenIDConnectClientBase {
/**
* A mapping of OpenID Connect user claims to GitHub user properties.
*
* See https://developer.github.com/v3/users .
*
* @var array
*/
protected $userInfoMapping = [
'name' => 'name',
'sub' => 'id',
'email' => 'email',
'preferred_username' => 'login',
'picture' => 'avatar_url',
'profile' => 'html_url',
'website' => 'blog',
];
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$url = 'https://github.com/settings/developers';
$form['description'] = [
'#markup' => '<div class="description">' . $this
->t('Set up your app in <a href="@url" target="_blank">developer applications</a> on GitHub.', [
'@url' => $url,
]) . '</div>',
];
return $form;
}
/**
* {@inheritdoc}
*/
public function getEndpoints() {
return [
'authorization' => 'https://github.com/login/oauth/authorize',
'token' => 'https://github.com/login/oauth/access_token',
'userinfo' => 'https://api.github.com/user',
];
}
/**
* {@inheritdoc}
*/
public function authorize($scope = 'openid email') {
// Use GitHub specific authorisations.
return parent::authorize('user:email');
}
/**
* {@inheritdoc}
*/
public function decodeIdToken($id_token) {
return [];
}
/**
* {@inheritdoc}
*/
public function retrieveUserInfo($access_token) {
$request_options = [
'headers' => [
'Authorization' => 'token ' . $access_token,
'Accept' => 'application/json',
],
];
$endpoints = $this
->getEndpoints();
$client = $this->httpClient;
try {
$claims = [];
$response = $client
->get($endpoints['userinfo'], $request_options);
$response_data = json_decode((string) $response
->getBody(), TRUE);
foreach ($this->userInfoMapping as $claim => $key) {
if (array_key_exists($key, $response_data)) {
$claims[$claim] = $response_data[$key];
}
}
// GitHub names can be empty. Fall back to the login name.
if (empty($claims['name']) && isset($response_data['login'])) {
$claims['name'] = $response_data['login'];
}
// Convert the updated_at date to a timestamp.
if (!empty($response_data['updated_at'])) {
$claims['updated_at'] = strtotime($response_data['updated_at']);
}
// The email address is only provided in the User resource if the user has
// chosen to display it publicly. So we need to make another request to
// find out the user's email address(es).
if (empty($claims['email'])) {
$email_response = $client
->get($endpoints['userinfo'] . '/emails', $request_options);
$email_response_data = json_decode((string) $email_response
->getBody(), TRUE);
foreach ($email_response_data as $email) {
// See https://developer.github.com/v3/users/emails/
if (!empty($email['primary'])) {
$claims['email'] = $email['email'];
$claims['email_verified'] = $email['verified'];
break;
}
}
}
return $claims;
} catch (\Exception $e) {
$variables = [
'@message' => 'Could not retrieve user profile information',
'@error_message' => $e
->getMessage(),
];
$this->loggerFactory
->get('openid_connect_' . $this->pluginId)
->error('@message. Details: @error_message', $variables);
return FALSE;
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
OpenIDConnectClientBase:: |
protected | property | The minimum set of scopes for this client. | |
OpenIDConnectClientBase:: |
protected | property | The datetime.time service. | |
OpenIDConnectClientBase:: |
protected | property | The HTTP client to fetch the feed data with. | |
OpenIDConnectClientBase:: |
protected | property | The language manager. | |
OpenIDConnectClientBase:: |
protected | property | The logger factory used for logging. | |
OpenIDConnectClientBase:: |
protected | property | Page cache kill switch. | |
OpenIDConnectClientBase:: |
protected | property | The request stack used to access request globals. | |
OpenIDConnectClientBase:: |
protected | property | The OpenID state token service. | |
OpenIDConnectClientBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
OpenIDConnectClientBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
OpenIDConnectClientBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
3 |
OpenIDConnectClientBase:: |
public | function |
Gets an array of of scopes. Overrides OpenIDConnectClientInterface:: |
|
OpenIDConnectClientBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
OpenIDConnectClientBase:: |
protected | function | Returns the redirect URL. | |
OpenIDConnectClientBase:: |
protected | function | Helper function for request options. | |
OpenIDConnectClientBase:: |
protected | function | Helper function for URL options. | |
OpenIDConnectClientBase:: |
public | function |
Retrieve access token and ID token. Overrides OpenIDConnectClientInterface:: |
|
OpenIDConnectClientBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
|
OpenIDConnectClientBase:: |
public | function |
Form submission handler. Overrides PluginFormInterface:: |
|
OpenIDConnectClientBase:: |
public | function |
Form validation handler. Overrides PluginFormInterface:: |
|
OpenIDConnectClientBase:: |
public | function |
The constructor. Overrides PluginBase:: |
|
OpenIDConnectGithubClient:: |
protected | property | A mapping of OpenID Connect user claims to GitHub user properties. | |
OpenIDConnectGithubClient:: |
public | function |
Redirects the user to the authorization endpoint. Overrides OpenIDConnectClientBase:: |
|
OpenIDConnectGithubClient:: |
public | function |
Form constructor. Overrides OpenIDConnectClientBase:: |
|
OpenIDConnectGithubClient:: |
public | function |
Decodes ID token to access user data. Overrides OpenIDConnectClientBase:: |
|
OpenIDConnectGithubClient:: |
public | function |
Returns an array of endpoints. Overrides OpenIDConnectClientInterface:: |
|
OpenIDConnectGithubClient:: |
public | function |
Retrieves user info: additional user profile data. Overrides OpenIDConnectClientBase:: |
|
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |