Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/auth/adapter/PhutilGitHubAuthAdapter.php
12256 views
1
<?php
2
3
/**
4
* Authentication adapter for Github OAuth2.
5
*/
6
final class PhutilGitHubAuthAdapter extends PhutilOAuthAuthAdapter {
7
8
public function getAdapterType() {
9
return 'github';
10
}
11
12
public function getAdapterDomain() {
13
return 'github.com';
14
}
15
16
public function getAccountID() {
17
return $this->getOAuthAccountData('id');
18
}
19
20
public function getAccountEmail() {
21
return $this->getOAuthAccountData('email');
22
}
23
24
public function getAccountName() {
25
return $this->getOAuthAccountData('login');
26
}
27
28
public function getAccountImageURI() {
29
return $this->getOAuthAccountData('avatar_url');
30
}
31
32
public function getAccountURI() {
33
$name = $this->getAccountName();
34
if (strlen($name)) {
35
return 'https://github.com/'.$name;
36
}
37
return null;
38
}
39
40
public function getAccountRealName() {
41
return $this->getOAuthAccountData('name');
42
}
43
44
protected function getAuthenticateBaseURI() {
45
return 'https://github.com/login/oauth/authorize';
46
}
47
48
protected function getTokenBaseURI() {
49
return 'https://github.com/login/oauth/access_token';
50
}
51
52
protected function loadOAuthAccountData() {
53
$uri = new PhutilURI('https://api.github.com/user');
54
55
$future = new HTTPSFuture($uri);
56
57
// NOTE: GitHub requires a User-Agent string.
58
$future->addHeader('User-Agent', __CLASS__);
59
60
// See T13485. Circa early 2020, GitHub has deprecated use of the
61
// "access_token" URI parameter.
62
$token_header = sprintf('token %s', $this->getAccessToken());
63
$future->addHeader('Authorization', $token_header);
64
65
list($body) = $future->resolvex();
66
67
try {
68
return phutil_json_decode($body);
69
} catch (PhutilJSONParserException $ex) {
70
throw new PhutilProxyException(
71
pht('Expected valid JSON response from GitHub account data request.'),
72
$ex);
73
}
74
}
75
76
}
77
78