Skip to content

Commit 53cb4d8

Browse files
committed
Only create a new request on expired tokens
1 parent 973901e commit 53cb4d8

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/main/java/org/kohsuke/github/GitHubClient.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,8 @@ public <T> GitHubResponse<T> sendRequest(@Nonnull GitHubRequest.Builder<?> build
422422
public <T> GitHubResponse<T> sendRequest(GitHubRequest request, @CheckForNull BodyHandler<T> handler)
423423
throws IOException {
424424
int retries = CONNECTION_ERROR_RETRIES;
425-
425+
GitHubConnectorRequest connectorRequest = prepareConnectorRequest(request);
426426
do {
427-
GitHubConnectorRequest connectorRequest = prepareConnectorRequest(request);
428427
GitHubConnectorResponse connectorResponse = null;
429428
try {
430429
logRequest(connectorRequest);
@@ -461,6 +460,7 @@ private void detectKnownErrors(GitHubConnectorResponse connectorResponse,
461460
boolean detectStatusCodeError) throws IOException {
462461
detectOTPRequired(connectorResponse);
463462
detectInvalidCached404Response(connectorResponse, request);
463+
detectExpiredToken(connectorResponse, request);
464464
detectRedirect(connectorResponse);
465465
if (rateLimitHandler.isError(connectorResponse)) {
466466
rateLimitHandler.onError(connectorResponse);
@@ -474,6 +474,22 @@ private void detectKnownErrors(GitHubConnectorResponse connectorResponse,
474474
}
475475
}
476476

477+
private void detectExpiredToken(GitHubConnectorResponse connectorResponse, GitHubRequest request)
478+
throws IOException {
479+
if (connectorResponse.statusCode() != HTTP_UNAUTHORIZED) {
480+
return;
481+
}
482+
String originalAuthorization = connectorResponse.request().header("Authorization");
483+
if (Objects.isNull(originalAuthorization) || originalAuthorization.isEmpty()) {
484+
return;
485+
}
486+
GitHubConnectorRequest updatedRequest = prepareConnectorRequest(request);
487+
String updatedAuthorization = updatedRequest.header("Authorization");
488+
if (!originalAuthorization.equals(updatedAuthorization)) {
489+
throw new RetryRequestException(updatedRequest);
490+
}
491+
}
492+
477493
private void detectRedirect(GitHubConnectorResponse connectorResponse) throws IOException {
478494
if (connectorResponse.statusCode() == HTTP_MOVED_PERM || connectorResponse.statusCode() == HTTP_MOVED_TEMP) {
479495
// GitHubClient depends on GitHubConnector implementations to follow any redirects automatically

0 commit comments

Comments
 (0)