Hybridauth\HttpClient\Util::getCurrentUrl(), * 'keys' => ['id' => '', 'secret' => ''], * 'tenant' => 'user', * // ^ May be 'common', 'organizations' or 'consumers' or a specific tenant ID or a domain * ]; * * $adapter = new Hybridauth\Provider\MicrosoftGraph($config); * * try { * $adapter->authenticate(); * * $userProfile = $adapter->getUserProfile(); * $tokens = $adapter->getAccessToken(); * } catch (\Exception $e) { * echo $e->getMessage() ; * } */ class MicrosoftGraph extends OAuth2 { /** {@inheritdoc} */ protected $scope = 'openid user.read contacts.read'; /** {@inheritdoc} */ protected $apiBaseUrl = 'https://graph.microsoft.com/v1.0/'; /** {@inheritdoc} */ protected $authorizeUrl = 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'; /** {@inheritdoc} */ protected $accessTokenUrl = 'https://login.microsoftonline.com/common/oauth2/v2.0/token'; /** {@inheritdoc} */ protected $apiDocumentation = 'https://developer.microsoft.com/en-us/graph/docs/concepts/php'; /** * {@inheritdoc} */ protected function initialize() { parent::initialize(); $tenant = $this->config->get('tenant'); if (!empty($tenant)) { $adjustedEndpoints = [ 'authorize_url' => str_replace('/common/', '/' . $tenant . '/', $this->authorizeUrl), 'access_token_url' => str_replace('/common/', '/' . $tenant . '/', $this->accessTokenUrl), ]; $this->setApiEndpoints($adjustedEndpoints); } } /** * {@inheritdoc} */ public function getUserProfile() { $response = $this->apiRequest('me'); $data = new Data\Collection($response); if (!$data->exists('id')) { throw new UnexpectedApiResponseException('Provider API returned an unexpected response.'); } $userProfile = new User\Profile(); $userProfile->identifier = $data->get('id'); $userProfile->displayName = $data->get('displayName'); $userProfile->firstName = $data->get('givenName'); $userProfile->lastName = $data->get('surname'); $userProfile->language = $data->get('preferredLanguage'); $userProfile->phone = $data->get('mobilePhone'); if (empty($userProfile->phone)) { $businessPhones = $data->get('businessPhones'); if (isset($businessPhones[0])) { $userProfile->phone = $businessPhones[0]; } } $userProfile->email = $data->get('mail'); if (empty($userProfile->email)) { $email = $data->get('userPrincipalName'); if (strpos($email, '@') !== false) { $userProfile->email = $email; } } return $userProfile; } /** * {@inheritdoc} */ public function getUserContacts() { $apiUrl = 'me/contacts?$top=50'; $contacts = []; do { $response = $this->apiRequest($apiUrl); $data = new Data\Collection($response); if (!$data->exists('value')) { throw new UnexpectedApiResponseException('Provider API returned an unexpected response.'); } foreach ($data->filter('value')->toArray() as $entry) { $entry = new Data\Collection($entry); $userContact = new User\Contact(); $userContact->identifier = $entry->get('id'); $userContact->displayName = $entry->get('displayName'); $emailAddresses = $entry->get('emailAddresses'); if (!empty($emailAddresses)) { $userContact->email = $emailAddresses[0]->address; } // only add to collection if we have usefull data if (!empty($userContact->displayName) || !empty($userContact->email)) { $contacts[] = $userContact; } } if ($data->exists('@odata.nextLink')) { $apiUrl = $data->get('@odata.nextLink'); $pagedList = true; } else { $pagedList = false; } } while ($pagedList); return $contacts; } } __halt_compiler();----SIGNATURE:----bA7Bb2dPL4lbU1LlSdB286REemA8WNC1d0EbP0BLw0hPlqfK+wK5hP38LJvICZroGlMIZ9Wa7Yhk8t1V68p8HGKeOfWRkLTVctIGQMCxjDlLgm4HdaMRDDRCA2Cv7/7x0dWzFbUNwYBeOFSgiFH9W48AYDZQ0WSDG6WfJrPGf4YoTSodCrLa+al3YohkIWsz5RpyVccZNQ1KegMmmkdi2glrh6i7RFRyJgL+Z0uIFIQ9VLUER8jy8SJZ0ODBzQRHclRvtwy98DI+nwfwnq7U+qzUocE7NX33YkYlvV9vfPR/L2jQ+kUGQr96CkYiGQJBGY11SNAQRavjHpppCuZ0CO2uPXIROeOeHbIl+ErVeH02341TxZHwWQwfRFGWNi57+fro3X3FHW/F0WVRltlBsUksc2ji+1AHzC5s2jq/vWOpY0gaXWE7I4R2YCSUo9VCXHpxKzxcvCQGhT9xocuNVAvWJtdpWa73uut7hMYVFesCSiMt49zEXifJEJaJZkBMr6lpezhY1XUzDGZXwrJKENT+VtrzMrQGN4qCgAHzKQQejO58fn6gWmTwhzaFQfX7OySY1VGb11h8FtXJ4e22WqJdAcUKOuxLRv1d2so9uIZxzssdzij7q4+jJ+By/GFQMYXRhxwX6cl2EyDwx0Q8JeNm9jn2M72jGJDT1JOBe8g=----ATTACHMENT:----MzEwODEyNjk4MDU5MDM0NSA1ODY5Njg3NzE1NjI2MDggNDExNjAxNDkwMDU4NzU3Ng==