-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update GithubOAuth.php #123
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -85,11 +85,51 @@ protected function fetchUserInfoWithToken(): object | |||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||||
'http_errors' => false, | ||||||||||||||||||||||||||||||||||||||||||
]); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
$userInfo = json_decode($response->getBody()); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||
* Note: When making a call to /user, the API will only return the email address the user's explicitly set publicly visible | ||||||||||||||||||||||||||||||||||||||||||
* (or null if the user has not specified a public email address in their profile). | ||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||
if (empty($userInfo->email)) { | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||
* The email address is mandatory we have no other choice but to dig deeper. | ||||||||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||
* To retrieve the user's email addresses regardless if their status is set public or not, we need to call /user/emails. | ||||||||||||||||||||||||||||||||||||||||||
* @see https://docs.github.com/en/rest/users/emails?apiVersion=2022-11-28#list-email-addresses-for-a-user | ||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||
$response = $this->client->request('GET', self::$API_USER_INFO_URL.'/emails', [ | ||||||||||||||||||||||||||||||||||||||||||
'headers' => [ | ||||||||||||||||||||||||||||||||||||||||||
'User-Agent' => self::$APPLICATION_NAME . '/1.0', | ||||||||||||||||||||||||||||||||||||||||||
'Accept' => 'application/vnd.github+json', | ||||||||||||||||||||||||||||||||||||||||||
'Authorization' => 'Bearer ' . $this->getToken(), | ||||||||||||||||||||||||||||||||||||||||||
], | ||||||||||||||||||||||||||||||||||||||||||
'http_errors' => false, | ||||||||||||||||||||||||||||||||||||||||||
]); | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+103
to
+110
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Check for API request success before processing the response. The response from the GitHub API should be checked for success before attempting to decode the body. This ensures that the code handles errors gracefully. + if ($response->getStatusCode() !== 200) {
+ throw new Exception('Failed to fetch user emails from GitHub API');
+ }
$emailAddresses = json_decode($response->getBody()); Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
$emailAddresses = json_decode($response->getBody()); | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
/** | ||||||||||||||||||||||||||||||||||||||||||
* The response can contain multiple email addresses | ||||||||||||||||||||||||||||||||||||||||||
* so, we'll choose the one marked as primary | ||||||||||||||||||||||||||||||||||||||||||
* or at least get the first one just to be covered | ||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||
$userInfo->email = $emailAddresses[0]->email; | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Check for empty email addresses array. Before accessing the first element of the + if (empty($emailAddresses)) {
+ throw new Exception('No email addresses found for the user');
+ }
$userInfo->email = $emailAddresses[0]->email; Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
foreach ( $emailAddresses as $emailAddress ) { | ||||||||||||||||||||||||||||||||||||||||||
if ($emailAddress->primary) { | ||||||||||||||||||||||||||||||||||||||||||
$userInfo->email = $emailAddress->email; | ||||||||||||||||||||||||||||||||||||||||||
break; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+121
to
+126
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Optimize email address selection logic. The logic for selecting the primary email address can be optimized by using - foreach ( $emailAddresses as $emailAddress ) {
- if ($emailAddress->primary) {
- $userInfo->email = $emailAddress->email;
- break;
- }
- }
+ $primaryEmail = array_filter($emailAddresses, fn($email) => $email->primary);
+ $userInfo->email = !empty($primaryEmail) ? array_shift($primaryEmail)->email : $emailAddresses[0]->email; Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Handle potential exceptions more gracefully. Using - exit($e->getMessage());
+ log_message('error', $e->getMessage());
+ throw new Exception('Error fetching user info with token');
|
||||||||||||||||||||||||||||||||||||||||||
} catch (Exception $e) { | ||||||||||||||||||||||||||||||||||||||||||
exit($e->getMessage()); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
return json_decode($response->getBody()); | ||||||||||||||||||||||||||||||||||||||||||
return $userInfo; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
protected function setColumnsName(string $nameOfProcess, $userInfo): array | ||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Check for API request success before processing the response.
The response from the GitHub API should be checked for success before attempting to decode the body. This ensures that the code handles errors gracefully.
Committable suggestion