Skip to content

Commit 96fee44

Browse files
committed
Fix for Resource Owner Details URL and parsing
1 parent f24f79d commit 96fee44

File tree

3 files changed

+77
-13
lines changed

3 files changed

+77
-13
lines changed

src/Provider/Microsoft.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
use League\OAuth2\Client\Provider\AbstractProvider;
55
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
66
use League\OAuth2\Client\Token\AccessToken;
7+
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
78
use Psr\Http\Message\ResponseInterface;
89

910
class Microsoft extends AbstractProvider
1011
{
12+
use BearerAuthorizationTrait;
13+
1114
/**
1215
* Default scopes
1316
*
@@ -34,7 +37,7 @@ class Microsoft extends AbstractProvider
3437
*
3538
* @var string
3639
*/
37-
protected $urlResourceOwnerDetails = 'https://apis.live.net/v5.0/me';
40+
protected $urlResourceOwnerDetails = 'https://graph.microsoft.com/v1.0/me';
3841

3942
/**
4043
* Get authorization url to begin OAuth flow

src/Provider/MicrosoftResourceOwner.php

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,47 +38,95 @@ public function getId()
3838
*/
3939
public function getEmail()
4040
{
41-
return $this->response['emails']['preferred'] ?: null;
41+
return $this->response['mail'] ?: null;
4242
}
4343

4444
/**
45-
* Get user firstname
45+
* Get user principal name
46+
*
47+
* @return string|null
48+
*/
49+
public function getPrincipalName()
50+
{
51+
return $this->response['userPrincipalName'] ?: null;
52+
}
53+
54+
/**
55+
* @deprecated will be removed in 3.0. Use getGivenName() instead.
56+
*
57+
* Get user first name
4658
*
4759
* @return string|null
4860
*/
4961
public function getFirstname()
5062
{
51-
return $this->response['first_name'] ?: null;
63+
return $this->getGivenName();
5264
}
5365

5466
/**
67+
* Get user given name (first name)
68+
*
69+
* @return string|null
70+
*/
71+
public function getGivenName()
72+
{
73+
return $this->response['givenName'] ?: null;
74+
}
75+
76+
/**
77+
* @deprecated will be removed in 3.0. Use getSurname() instead.
78+
*
5579
* Get user lastname
5680
*
5781
* @return string|null
5882
*/
5983
public function getLastname()
6084
{
61-
return $this->response['last_name'] ?: null;
85+
return $this->getSurname();
6286
}
6387

6488
/**
89+
* Get user surname
90+
*
91+
* @return string|null
92+
*/
93+
public function getSurname()
94+
{
95+
return $this->response['surname'] ?: null;
96+
}
97+
98+
/**
99+
* @deprecated will be removed in 3.0. Use getDisplayName() instead.
100+
*
65101
* Get user name
66102
*
67103
* @return string|null
68104
*/
69105
public function getName()
70106
{
71-
return $this->response['name'] ?: null;
107+
return $this->getDisplayName();
108+
}
109+
110+
/**
111+
* Get user name
112+
*
113+
* @return string|null
114+
*/
115+
public function getDisplayName()
116+
{
117+
return $this->response['displayName'] ?: null;
72118
}
73119

74120
/**
121+
* @deprecated will be removed in 3.0.
122+
*
75123
* Get user urls
76124
*
77125
* @return string|null
78126
*/
79127
public function getUrls()
80128
{
81-
return isset($this->response['link']) ? $this->response['link'].'/cid-'.$this->getId() : null;
129+
return null;
82130
}
83131

84132
/**
@@ -88,6 +136,11 @@ public function getUrls()
88136
*/
89137
public function toArray()
90138
{
91-
return $this->response;
139+
return $this->response + [
140+
'first_name' => $this->response['givenName'],
141+
'last_name' => $this->response['surname'],
142+
'name' => $this->response['displayName'],
143+
'link' => null
144+
];
92145
}
93146
}

tests/src/Provider/MicrosoftTest.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,14 +118,14 @@ public function testUserData()
118118
$lastname = uniqid();
119119
$name = uniqid();
120120
$userId = rand(1000,9999);
121-
$urls = uniqid();
121+
$userPrincipalName = uniqid();
122122

123123
$postResponse = m::mock('Psr\Http\Message\ResponseInterface');
124124
$postResponse->shouldReceive('getBody')->andReturn('{"access_token":"mock_access_token","authentication_token":"","code":"","expires_in":3600,"refresh_token":"mock_refresh_token","scope":"","state":"","token_type":""}');
125125
$postResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
126126

127127
$userResponse = m::mock('Psr\Http\Message\ResponseInterface');
128-
$userResponse->shouldReceive('getBody')->andReturn('{"id": '.$userId.', "name": "'.$name.'", "first_name": "'.$firstname.'", "last_name": "'.$lastname.'", "emails": {"preferred": "'.$email.'"}, "link": "'.$urls.'"}');
128+
$userResponse->shouldReceive('getBody')->andReturn('{"id": '.$userId.', "displayName": "'.$name.'", "givenName": "'.$firstname.'", "surname": "'.$lastname.'", "mail": "'.$email.'", "userPrincipalName": "'.$userPrincipalName.'"}');
129129
$userResponse->shouldReceive('getHeader')->andReturn(['content-type' => 'json']);
130130

131131
$client = m::mock('GuzzleHttp\ClientInterface');
@@ -138,17 +138,25 @@ public function testUserData()
138138
$user = $this->provider->getResourceOwner($token);
139139

140140
$this->assertEquals($email, $user->getEmail());
141-
$this->assertEquals($email, $user->toArray()['emails']['preferred']);
141+
$this->assertEquals($email, $user->toArray()['mail']);
142+
$this->assertEquals($userPrincipalName, $user->getPrincipalName());
143+
$this->assertEquals($userPrincipalName, $user->toArray()['userPrincipalName']);
142144
$this->assertEquals($firstname, $user->getFirstname());
143145
$this->assertEquals($firstname, $user->toArray()['first_name']);
146+
$this->assertEquals($firstname, $user->getGivenName());
147+
$this->assertEquals($firstname, $user->toArray()['givenName']);
144148
$this->assertEquals($lastname, $user->getLastname());
145149
$this->assertEquals($lastname, $user->toArray()['last_name']);
150+
$this->assertEquals($lastname, $user->getSurname());
151+
$this->assertEquals($lastname, $user->toArray()['surname']);
146152
$this->assertEquals($name, $user->getName());
147153
$this->assertEquals($name, $user->toArray()['name']);
154+
$this->assertEquals($name, $user->getDisplayName());
155+
$this->assertEquals($name, $user->toArray()['displayName']);
148156
$this->assertEquals($userId, $user->getId());
149157
$this->assertEquals($userId, $user->toArray()['id']);
150-
$this->assertEquals($urls.'/cid-'.$userId, $user->getUrls());
151-
$this->assertEquals($urls.'/cid-'.$userId, $user->toArray()['link'].'/cid-'.$user->toArray()['id']);
158+
$this->assertNull($user->getUrls());
159+
$this->assertNull($user->toArray()['link']);
152160
}
153161

154162
/**

0 commit comments

Comments
 (0)