<?php /* * This file is part of the overtrue/socialite. * * (c) overtrue <i@overtrue.me> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Overtrue\Socialite\Providers; use Overtrue\Socialite\AccessTokenInterface; use Overtrue\Socialite\ProviderInterface; use Overtrue\Socialite\User; /** * Class OutlookProvider. */ class OutlookProvider extends AbstractProvider implements ProviderInterface { /** * {@inheritdoc} */ protected $scopes = ['User.Read']; /** * {@inheritdoc} */ protected $scopeSeparator = ' '; /** * {@inheritdoc} */ protected function getAuthUrl($state) { return $this->buildAuthUrlFromBase('https://login.microsoftonline.com/common/oauth2/v2.0/authorize', $state); } /** * {@inheritdoc} */ protected function getTokenUrl() { return 'https://login.microsoftonline.com/common/oauth2/v2.0/token'; } /** * {@inheritdoc} */ protected function getUserByToken(AccessTokenInterface $token) { $response = $this->getHttpClient()->get( 'https://graph.microsoft.com/v1.0/me', ['headers' => [ 'Accept' => 'application/json', 'Authorization' => 'Bearer '.$token->getToken(), ], ]); return json_decode($response->getBody()->getContents(), true); } /** * {@inheritdoc} */ protected function mapUserToObject(array $user) { return new User([ 'id' => $this->arrayItem($user, 'id'), 'nickname' => null, 'name' => $this->arrayItem($user, 'displayName'), 'email' => $this->arrayItem($user, 'userPrincipalName'), 'avatar' => null, ]); } /** * {@inheritdoc} */ protected function getTokenFields($code) { return array_merge(parent::getTokenFields($code), [ 'grant_type' => 'authorization_code', ]); } }