-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathOpenStreetMap.php
130 lines (113 loc) · 3.49 KB
/
OpenStreetMap.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
namespace JBelien\OAuth2\Client\Provider;
use League\OAuth2\Client\Provider\AbstractProvider;
use Psr\Http\Message\ResponseInterface;
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use League\OAuth2\Client\Token\AccessToken;
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
class OpenStreetMap extends AbstractProvider
{
use BearerAuthorizationTrait;
protected $dev = false;
public function __construct(array $options = [], array $collaborators = [])
{
parent::__construct($options, $collaborators);
if (isset($options['dev'])) {
$this->dev = (bool) $options['dev'];
}
}
/**
* Get authorization url to begin OAuth flow
*
* @return string
*/
public function getBaseAuthorizationUrl()
{
return $this->dev ?
'https://master.apis.dev.openstreetmap.org/oauth2/authorize' :
'https://www.openstreetmap.org/oauth2/authorize';
}
/**
* Get access token url to retrieve token
*
* @param array $params
*
* @return string
*/
public function getBaseAccessTokenUrl(array $params)
{
return $this->dev ?
'https://master.apis.dev.openstreetmap.org/oauth2/token' :
'https://www.openstreetmap.org/oauth2/token';
}
/**
* Get provider url to fetch user details
*
* @param AccessToken $token
*
* @return string
*/
public function getResourceOwnerDetailsUrl(AccessToken $token)
{
return $this->dev ?
'https://master.apis.dev.openstreetmap.org/api/0.6/user/details.json' :
'https://api.openstreetmap.org/api/0.6/user/details.json';
}
/**
* Get the default scopes used by this provider.
*
* @return array
*/
protected function getDefaultScopes()
{
return ['read_prefs'];
}
/**
* Check a provider response for errors.
*
* @param ResponseInterface $response
* @param array|string $data
*
* @throws IdentityProviderException
*/
protected function checkResponse(ResponseInterface $response, $data)
{
if (isset($data['error'])) {
$statusCode = $response->getStatusCode();
$error = $data['error'];
$errorDescription = $data['error_description'];
$errorLink = (isset($data['error_uri']) ? $data['error_uri'] : false);
throw new IdentityProviderException(
$statusCode . ' - ' . $errorDescription . ': ' . $error . ($errorLink ? ' (see: ' . $errorLink . ')' : ''),
$response->getStatusCode(),
$response
);
}
}
/**
* Generate a user object from a successful user details request.
*
* @param array $response
* @param AccessToken $token
*
* @return League\OAuth2\Client\Provider\ResourceOwnerInterface
*/
protected function createResourceOwner(array $response, AccessToken $token)
{
return new OpenStreetMapResourceOwner($response);
}
/**
* Returns a prepared request for requesting an access token.
*
* @param array $params
*
* @return Psr\Http\Message\RequestInterface
*/
protected function getAccessTokenRequest(array $params)
{
$request = parent::getAccessTokenRequest($params);
$uri = $request->getUri()
->withUserInfo($this->clientId, $this->clientSecret);
return $request->withUri($uri);
}
}